From 78661e9aa92c7e43c9a96039e7dfb3dabc79a287 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Tue, 16 May 2023 15:14:36 +0200 Subject: [PATCH] m68008: Implement as a 68000 variant m68000mcu: Extract from m68000 --- scripts/src/cpu.lua | 16 +- src/devices/cpu/m68000/m68000-head.h | 6156 +- src/devices/cpu/m68000/m68000.cpp | 136 +- src/devices/cpu/m68000/m68000.h | 25 +- src/devices/cpu/m68000/m68000gen.py | 259 +- src/devices/cpu/m68000/m68000mcu-head.h | 6144 + .../{m68000-sdfm.cpp => m68000mcu-sdfm.cpp} | 6146 +- .../{m68000-sdpm.cpp => m68000mcu-sdpm.cpp} | 6146 +- .../{m68000-sifm.cpp => m68000mcu-sifm.cpp} | 6146 +- .../{m68000-sipm.cpp => m68000mcu-sipm.cpp} | 6146 +- src/devices/cpu/m68000/m68000mcu.cpp | 109 + src/devices/cpu/m68000/m68000mcu.h | 36 + src/devices/cpu/m68000/m68008-head.h | 6144 + src/devices/cpu/m68000/m68008-sdf8.cpp | 239435 +++++++++++++ src/devices/cpu/m68000/m68008-sdp8.cpp | 274771 +++++++++++++++ src/devices/cpu/m68000/m68008-sif8.cpp | 239435 +++++++++++++ src/devices/cpu/m68000/m68008-sip8.cpp | 274771 +++++++++++++++ src/devices/cpu/m68000/m68008.cpp | 74 +- src/devices/cpu/m68000/m68008.h | 45 +- src/devices/cpu/m68000/tmp68301.h | 2 +- src/mame/luxor/abc1600mac.cpp | 39 +- 21 files changed, 1053471 insertions(+), 18710 deletions(-) create mode 100644 src/devices/cpu/m68000/m68000mcu-head.h rename src/devices/cpu/m68000/{m68000-sdfm.cpp => m68000mcu-sdfm.cpp} (96%) rename src/devices/cpu/m68000/{m68000-sdpm.cpp => m68000mcu-sdpm.cpp} (96%) rename src/devices/cpu/m68000/{m68000-sifm.cpp => m68000mcu-sifm.cpp} (96%) rename src/devices/cpu/m68000/{m68000-sipm.cpp => m68000mcu-sipm.cpp} (96%) create mode 100644 src/devices/cpu/m68000/m68000mcu.cpp create mode 100644 src/devices/cpu/m68000/m68000mcu.h create mode 100644 src/devices/cpu/m68000/m68008-head.h create mode 100644 src/devices/cpu/m68000/m68008-sdf8.cpp create mode 100644 src/devices/cpu/m68000/m68008-sdp8.cpp create mode 100644 src/devices/cpu/m68000/m68008-sif8.cpp create mode 100644 src/devices/cpu/m68000/m68008-sip8.cpp diff --git a/scripts/src/cpu.lua b/scripts/src/cpu.lua index cd199d40559..8c8b0f9bb51 100644 --- a/scripts/src/cpu.lua +++ b/scripts/src/cpu.lua @@ -1950,10 +1950,18 @@ if CPUS["M680X0"] then MAME_DIR .. "src/devices/cpu/m68000/m68000-sif.cpp", MAME_DIR .. "src/devices/cpu/m68000/m68000-sdp.cpp", MAME_DIR .. "src/devices/cpu/m68000/m68000-sip.cpp", - MAME_DIR .. "src/devices/cpu/m68000/m68000-sdfm.cpp", - MAME_DIR .. "src/devices/cpu/m68000/m68000-sifm.cpp", - MAME_DIR .. "src/devices/cpu/m68000/m68000-sdpm.cpp", - MAME_DIR .. "src/devices/cpu/m68000/m68000-sipm.cpp", + MAME_DIR .. "src/devices/cpu/m68000/m68000mcu-head.h", + MAME_DIR .. "src/devices/cpu/m68000/m68000mcu-sdfm.cpp", + MAME_DIR .. "src/devices/cpu/m68000/m68000mcu-sifm.cpp", + MAME_DIR .. "src/devices/cpu/m68000/m68000mcu-sdpm.cpp", + MAME_DIR .. "src/devices/cpu/m68000/m68000mcu-sipm.cpp", + MAME_DIR .. "src/devices/cpu/m68000/m68000mcu.h", + MAME_DIR .. "src/devices/cpu/m68000/m68000mcu.cpp", + MAME_DIR .. "src/devices/cpu/m68000/m68008-head.h", + MAME_DIR .. "src/devices/cpu/m68000/m68008-sdf8.cpp", + MAME_DIR .. "src/devices/cpu/m68000/m68008-sif8.cpp", + MAME_DIR .. "src/devices/cpu/m68000/m68008-sdp8.cpp", + MAME_DIR .. "src/devices/cpu/m68000/m68008-sip8.cpp", MAME_DIR .. "src/devices/cpu/m68000/m68008.h", MAME_DIR .. "src/devices/cpu/m68000/m68008.cpp", MAME_DIR .. "src/devices/cpu/m68000/m68010.h", diff --git a/src/devices/cpu/m68000/m68000-head.h b/src/devices/cpu/m68000/m68000-head.h index e95092130e9..738915a2375 100644 --- a/src/devices/cpu/m68000/m68000-head.h +++ b/src/devices/cpu/m68000/m68000-head.h @@ -6,12 +6,12 @@ void state_reset_df(); void state_bus_error_df(); void state_address_error_df(); void state_double_fault_df(); +void state_interrupt_df(); +void state_trace_df(); void state_illegal_df(); void state_priviledge_df(); -void state_trace_df(); void state_linea_df(); void state_linef_df(); -void state_interrupt_df(); void ori_b_imm8_ds_df(); void ori_b_imm8_ais_df(); void ori_b_imm8_aips_df(); @@ -1541,12 +1541,12 @@ void state_reset_if(); void state_bus_error_if(); void state_address_error_if(); void state_double_fault_if(); +void state_interrupt_if(); +void state_trace_if(); void state_illegal_if(); void state_priviledge_if(); -void state_trace_if(); void state_linea_if(); void state_linef_if(); -void state_interrupt_if(); void ori_b_imm8_ds_if(); void ori_b_imm8_ais_if(); void ori_b_imm8_aips_if(); @@ -3076,12 +3076,12 @@ void state_reset_dp(); void state_bus_error_dp(); void state_address_error_dp(); void state_double_fault_dp(); +void state_interrupt_dp(); +void state_trace_dp(); void state_illegal_dp(); void state_priviledge_dp(); -void state_trace_dp(); void state_linea_dp(); void state_linef_dp(); -void state_interrupt_dp(); void ori_b_imm8_ds_dp(); void ori_b_imm8_ais_dp(); void ori_b_imm8_aips_dp(); @@ -4611,12 +4611,12 @@ void state_reset_ip(); void state_bus_error_ip(); void state_address_error_ip(); void state_double_fault_ip(); +void state_interrupt_ip(); +void state_trace_ip(); void state_illegal_ip(); void state_priviledge_ip(); -void state_trace_ip(); void state_linea_ip(); void state_linef_ip(); -void state_interrupt_ip(); void ori_b_imm8_ds_ip(); void ori_b_imm8_ais_ip(); void ori_b_imm8_aips_ip(); @@ -6142,6143 +6142,3 @@ void rol_das_ip(); void rol_dais_ip(); void rol_adr16_ip(); void rol_adr32_ip(); -void state_reset_dfm(); -void state_bus_error_dfm(); -void state_address_error_dfm(); -void state_double_fault_dfm(); -void state_illegal_dfm(); -void state_priviledge_dfm(); -void state_trace_dfm(); -void state_linea_dfm(); -void state_linef_dfm(); -void state_interrupt_dfm(); -void ori_b_imm8_ds_dfm(); -void ori_b_imm8_ais_dfm(); -void ori_b_imm8_aips_dfm(); -void ori_b_imm8_pais_dfm(); -void ori_b_imm8_das_dfm(); -void ori_b_imm8_dais_dfm(); -void ori_b_imm8_adr16_dfm(); -void ori_b_imm8_adr32_dfm(); -void ori_imm8_ccr_dfm(); -void ori_w_imm16_ds_dfm(); -void ori_w_imm16_ais_dfm(); -void ori_w_imm16_aips_dfm(); -void ori_w_imm16_pais_dfm(); -void ori_w_imm16_das_dfm(); -void ori_w_imm16_dais_dfm(); -void ori_w_imm16_adr16_dfm(); -void ori_w_imm16_adr32_dfm(); -void ori_i16u_sr_dfm(); -void ori_l_imm32_ds_dfm(); -void ori_l_imm32_ais_dfm(); -void ori_l_imm32_aips_dfm(); -void ori_l_imm32_pais_dfm(); -void ori_l_imm32_das_dfm(); -void ori_l_imm32_dais_dfm(); -void ori_l_imm32_adr16_dfm(); -void ori_l_imm32_adr32_dfm(); -void btst_dd_ds_dfm(); -void movep_w_das_dd_dfm(); -void btst_dd_ais_dfm(); -void btst_dd_aips_dfm(); -void btst_dd_pais_dfm(); -void btst_dd_das_dfm(); -void btst_dd_dais_dfm(); -void btst_dd_adr16_dfm(); -void btst_dd_adr32_dfm(); -void btst_dd_dpc_dfm(); -void btst_dd_dpci_dfm(); -void btst_dd_imm_dfm(); -void bchg_dd_ds_dfm(); -void movep_l_das_dd_dfm(); -void bchg_dd_ais_dfm(); -void bchg_dd_aips_dfm(); -void bchg_dd_pais_dfm(); -void bchg_dd_das_dfm(); -void bchg_dd_dais_dfm(); -void bchg_dd_adr16_dfm(); -void bchg_dd_adr32_dfm(); -void bclr_dd_ds_dfm(); -void movep_w_dd_das_dfm(); -void bclr_dd_ais_dfm(); -void bclr_dd_aips_dfm(); -void bclr_dd_pais_dfm(); -void bclr_dd_das_dfm(); -void bclr_dd_dais_dfm(); -void bclr_dd_adr16_dfm(); -void bclr_dd_adr32_dfm(); -void bset_dd_ds_dfm(); -void movep_l_dd_das_dfm(); -void bset_dd_ais_dfm(); -void bset_dd_aips_dfm(); -void bset_dd_pais_dfm(); -void bset_dd_das_dfm(); -void bset_dd_dais_dfm(); -void bset_dd_adr16_dfm(); -void bset_dd_adr32_dfm(); -void andi_b_imm8_ds_dfm(); -void andi_b_imm8_ais_dfm(); -void andi_b_imm8_aips_dfm(); -void andi_b_imm8_pais_dfm(); -void andi_b_imm8_das_dfm(); -void andi_b_imm8_dais_dfm(); -void andi_b_imm8_adr16_dfm(); -void andi_b_imm8_adr32_dfm(); -void andi_imm8_ccr_dfm(); -void andi_w_imm16_ds_dfm(); -void andi_w_imm16_ais_dfm(); -void andi_w_imm16_aips_dfm(); -void andi_w_imm16_pais_dfm(); -void andi_w_imm16_das_dfm(); -void andi_w_imm16_dais_dfm(); -void andi_w_imm16_adr16_dfm(); -void andi_w_imm16_adr32_dfm(); -void andi_i16u_sr_dfm(); -void andi_l_imm32_ds_dfm(); -void andi_l_imm32_ais_dfm(); -void andi_l_imm32_aips_dfm(); -void andi_l_imm32_pais_dfm(); -void andi_l_imm32_das_dfm(); -void andi_l_imm32_dais_dfm(); -void andi_l_imm32_adr16_dfm(); -void andi_l_imm32_adr32_dfm(); -void subi_b_imm8_ds_dfm(); -void subi_b_imm8_ais_dfm(); -void subi_b_imm8_aips_dfm(); -void subi_b_imm8_pais_dfm(); -void subi_b_imm8_das_dfm(); -void subi_b_imm8_dais_dfm(); -void subi_b_imm8_adr16_dfm(); -void subi_b_imm8_adr32_dfm(); -void subi_w_imm16_ds_dfm(); -void subi_w_imm16_ais_dfm(); -void subi_w_imm16_aips_dfm(); -void subi_w_imm16_pais_dfm(); -void subi_w_imm16_das_dfm(); -void subi_w_imm16_dais_dfm(); -void subi_w_imm16_adr16_dfm(); -void subi_w_imm16_adr32_dfm(); -void subi_l_imm32_ds_dfm(); -void subi_l_imm32_ais_dfm(); -void subi_l_imm32_aips_dfm(); -void subi_l_imm32_pais_dfm(); -void subi_l_imm32_das_dfm(); -void subi_l_imm32_dais_dfm(); -void subi_l_imm32_adr16_dfm(); -void subi_l_imm32_adr32_dfm(); -void addi_b_imm8_ds_dfm(); -void addi_b_imm8_ais_dfm(); -void addi_b_imm8_aips_dfm(); -void addi_b_imm8_pais_dfm(); -void addi_b_imm8_das_dfm(); -void addi_b_imm8_dais_dfm(); -void addi_b_imm8_adr16_dfm(); -void addi_b_imm8_adr32_dfm(); -void addi_w_imm16_ds_dfm(); -void addi_w_imm16_ais_dfm(); -void addi_w_imm16_aips_dfm(); -void addi_w_imm16_pais_dfm(); -void addi_w_imm16_das_dfm(); -void addi_w_imm16_dais_dfm(); -void addi_w_imm16_adr16_dfm(); -void addi_w_imm16_adr32_dfm(); -void addi_l_imm32_ds_dfm(); -void addi_l_imm32_ais_dfm(); -void addi_l_imm32_aips_dfm(); -void addi_l_imm32_pais_dfm(); -void addi_l_imm32_das_dfm(); -void addi_l_imm32_dais_dfm(); -void addi_l_imm32_adr16_dfm(); -void addi_l_imm32_adr32_dfm(); -void btst_imm8_ds_dfm(); -void btst_imm8_ais_dfm(); -void btst_imm8_aips_dfm(); -void btst_imm8_pais_dfm(); -void btst_imm8_das_dfm(); -void btst_imm8_dais_dfm(); -void btst_imm8_adr16_dfm(); -void btst_imm8_adr32_dfm(); -void btst_imm8_dpc_dfm(); -void btst_imm8_dpci_dfm(); -void bchg_imm8_ds_dfm(); -void bchg_imm8_ais_dfm(); -void bchg_imm8_aips_dfm(); -void bchg_imm8_pais_dfm(); -void bchg_imm8_das_dfm(); -void bchg_imm8_dais_dfm(); -void bchg_imm8_adr16_dfm(); -void bchg_imm8_adr32_dfm(); -void bclr_imm8_ds_dfm(); -void bclr_imm8_ais_dfm(); -void bclr_imm8_aips_dfm(); -void bclr_imm8_pais_dfm(); -void bclr_imm8_das_dfm(); -void bclr_imm8_dais_dfm(); -void bclr_imm8_adr16_dfm(); -void bclr_imm8_adr32_dfm(); -void bset_imm8_ds_dfm(); -void bset_imm8_ais_dfm(); -void bset_imm8_aips_dfm(); -void bset_imm8_pais_dfm(); -void bset_imm8_das_dfm(); -void bset_imm8_dais_dfm(); -void bset_imm8_adr16_dfm(); -void bset_imm8_adr32_dfm(); -void eori_b_imm8_ds_dfm(); -void eori_b_imm8_ais_dfm(); -void eori_b_imm8_aips_dfm(); -void eori_b_imm8_pais_dfm(); -void eori_b_imm8_das_dfm(); -void eori_b_imm8_dais_dfm(); -void eori_b_imm8_adr16_dfm(); -void eori_b_imm8_adr32_dfm(); -void eori_imm8_ccr_dfm(); -void eori_w_imm16_ds_dfm(); -void eori_w_imm16_ais_dfm(); -void eori_w_imm16_aips_dfm(); -void eori_w_imm16_pais_dfm(); -void eori_w_imm16_das_dfm(); -void eori_w_imm16_dais_dfm(); -void eori_w_imm16_adr16_dfm(); -void eori_w_imm16_adr32_dfm(); -void eori_i16u_sr_dfm(); -void eori_l_imm32_ds_dfm(); -void eori_l_imm32_ais_dfm(); -void eori_l_imm32_aips_dfm(); -void eori_l_imm32_pais_dfm(); -void eori_l_imm32_das_dfm(); -void eori_l_imm32_dais_dfm(); -void eori_l_imm32_adr16_dfm(); -void eori_l_imm32_adr32_dfm(); -void cmpi_b_imm8_ds_dfm(); -void cmpi_b_imm8_ais_dfm(); -void cmpi_b_imm8_aips_dfm(); -void cmpi_b_imm8_pais_dfm(); -void cmpi_b_imm8_das_dfm(); -void cmpi_b_imm8_dais_dfm(); -void cmpi_b_imm8_adr16_dfm(); -void cmpi_b_imm8_adr32_dfm(); -void cmpi_w_imm16_ds_dfm(); -void cmpi_w_imm16_ais_dfm(); -void cmpi_w_imm16_aips_dfm(); -void cmpi_w_imm16_pais_dfm(); -void cmpi_w_imm16_das_dfm(); -void cmpi_w_imm16_dais_dfm(); -void cmpi_w_imm16_adr16_dfm(); -void cmpi_w_imm16_adr32_dfm(); -void cmpi_l_imm32_ds_dfm(); -void cmpi_l_imm32_ais_dfm(); -void cmpi_l_imm32_aips_dfm(); -void cmpi_l_imm32_pais_dfm(); -void cmpi_l_imm32_das_dfm(); -void cmpi_l_imm32_dais_dfm(); -void cmpi_l_imm32_adr16_dfm(); -void cmpi_l_imm32_adr32_dfm(); -void move_b_ds_dd_dfm(); -void move_b_ais_dd_dfm(); -void move_b_aips_dd_dfm(); -void move_b_pais_dd_dfm(); -void move_b_das_dd_dfm(); -void move_b_dais_dd_dfm(); -void move_b_adr16_dd_dfm(); -void move_b_adr32_dd_dfm(); -void move_b_dpc_dd_dfm(); -void move_b_dpci_dd_dfm(); -void move_b_imm8_dd_dfm(); -void move_b_ds_aid_dfm(); -void move_b_ais_aid_dfm(); -void move_b_aips_aid_dfm(); -void move_b_pais_aid_dfm(); -void move_b_das_aid_dfm(); -void move_b_dais_aid_dfm(); -void move_b_adr16_aid_dfm(); -void move_b_adr32_aid_dfm(); -void move_b_dpc_aid_dfm(); -void move_b_dpci_aid_dfm(); -void move_b_imm8_aid_dfm(); -void move_b_ds_aipd_dfm(); -void move_b_ais_aipd_dfm(); -void move_b_aips_aipd_dfm(); -void move_b_pais_aipd_dfm(); -void move_b_das_aipd_dfm(); -void move_b_dais_aipd_dfm(); -void move_b_adr16_aipd_dfm(); -void move_b_adr32_aipd_dfm(); -void move_b_dpc_aipd_dfm(); -void move_b_dpci_aipd_dfm(); -void move_b_imm8_aipd_dfm(); -void move_b_ds_paid_dfm(); -void move_b_ais_paid_dfm(); -void move_b_aips_paid_dfm(); -void move_b_pais_paid_dfm(); -void move_b_das_paid_dfm(); -void move_b_dais_paid_dfm(); -void move_b_adr16_paid_dfm(); -void move_b_adr32_paid_dfm(); -void move_b_dpc_paid_dfm(); -void move_b_dpci_paid_dfm(); -void move_b_imm8_paid_dfm(); -void move_b_ds_dad_dfm(); -void move_b_ais_dad_dfm(); -void move_b_aips_dad_dfm(); -void move_b_pais_dad_dfm(); -void move_b_das_dad_dfm(); -void move_b_dais_dad_dfm(); -void move_b_adr16_dad_dfm(); -void move_b_adr32_dad_dfm(); -void move_b_dpc_dad_dfm(); -void move_b_dpci_dad_dfm(); -void move_b_imm8_dad_dfm(); -void move_b_ds_daid_dfm(); -void move_b_ais_daid_dfm(); -void move_b_aips_daid_dfm(); -void move_b_pais_daid_dfm(); -void move_b_das_daid_dfm(); -void move_b_dais_daid_dfm(); -void move_b_adr16_daid_dfm(); -void move_b_adr32_daid_dfm(); -void move_b_dpc_daid_dfm(); -void move_b_dpci_daid_dfm(); -void move_b_imm8_daid_dfm(); -void move_b_ds_adr16_dfm(); -void move_b_ais_adr16_dfm(); -void move_b_aips_adr16_dfm(); -void move_b_pais_adr16_dfm(); -void move_b_das_adr16_dfm(); -void move_b_dais_adr16_dfm(); -void move_b_adr16_adr16_dfm(); -void move_b_adr32_adr16_dfm(); -void move_b_dpc_adr16_dfm(); -void move_b_dpci_adr16_dfm(); -void move_b_imm8_adr16_dfm(); -void move_b_ds_adr32_dfm(); -void move_b_ais_adr32_dfm(); -void move_b_aips_adr32_dfm(); -void move_b_pais_adr32_dfm(); -void move_b_das_adr32_dfm(); -void move_b_dais_adr32_dfm(); -void move_b_adr16_adr32_dfm(); -void move_b_adr32_adr32_dfm(); -void move_b_dpc_adr32_dfm(); -void move_b_dpci_adr32_dfm(); -void move_b_imm8_adr32_dfm(); -void move_l_ds_dd_dfm(); -void move_l_as_dd_dfm(); -void move_l_ais_dd_dfm(); -void move_l_aips_dd_dfm(); -void move_l_pais_dd_dfm(); -void move_l_das_dd_dfm(); -void move_l_dais_dd_dfm(); -void move_l_adr16_dd_dfm(); -void move_l_adr32_dd_dfm(); -void move_l_dpc_dd_dfm(); -void move_l_dpci_dd_dfm(); -void move_l_imm32_dd_dfm(); -void movea_l_ds_ad_dfm(); -void movea_l_as_ad_dfm(); -void movea_l_ais_ad_dfm(); -void movea_l_aips_ad_dfm(); -void movea_l_pais_ad_dfm(); -void movea_l_das_ad_dfm(); -void movea_l_dais_ad_dfm(); -void movea_l_adr16_ad_dfm(); -void movea_l_adr32_ad_dfm(); -void movea_l_dpc_ad_dfm(); -void movea_l_dpci_ad_dfm(); -void movea_l_imm32_ad_dfm(); -void move_l_ds_aid_dfm(); -void move_l_as_aid_dfm(); -void move_l_ais_aid_dfm(); -void move_l_aips_aid_dfm(); -void move_l_pais_aid_dfm(); -void move_l_das_aid_dfm(); -void move_l_dais_aid_dfm(); -void move_l_adr16_aid_dfm(); -void move_l_adr32_aid_dfm(); -void move_l_dpc_aid_dfm(); -void move_l_dpci_aid_dfm(); -void move_l_imm32_aid_dfm(); -void move_l_ds_aipd_dfm(); -void move_l_as_aipd_dfm(); -void move_l_ais_aipd_dfm(); -void move_l_aips_aipd_dfm(); -void move_l_pais_aipd_dfm(); -void move_l_das_aipd_dfm(); -void move_l_dais_aipd_dfm(); -void move_l_adr16_aipd_dfm(); -void move_l_adr32_aipd_dfm(); -void move_l_dpc_aipd_dfm(); -void move_l_dpci_aipd_dfm(); -void move_l_imm32_aipd_dfm(); -void move_l_ds_paid_dfm(); -void move_l_as_paid_dfm(); -void move_l_ais_paid_dfm(); -void move_l_aips_paid_dfm(); -void move_l_pais_paid_dfm(); -void move_l_das_paid_dfm(); -void move_l_dais_paid_dfm(); -void move_l_adr16_paid_dfm(); -void move_l_adr32_paid_dfm(); -void move_l_dpc_paid_dfm(); -void move_l_dpci_paid_dfm(); -void move_l_imm32_paid_dfm(); -void move_l_ds_dad_dfm(); -void move_l_as_dad_dfm(); -void move_l_ais_dad_dfm(); -void move_l_aips_dad_dfm(); -void move_l_pais_dad_dfm(); -void move_l_das_dad_dfm(); -void move_l_dais_dad_dfm(); -void move_l_adr16_dad_dfm(); -void move_l_adr32_dad_dfm(); -void move_l_dpc_dad_dfm(); -void move_l_dpci_dad_dfm(); -void move_l_imm32_dad_dfm(); -void move_l_ds_daid_dfm(); -void move_l_as_daid_dfm(); -void move_l_ais_daid_dfm(); -void move_l_aips_daid_dfm(); -void move_l_pais_daid_dfm(); -void move_l_das_daid_dfm(); -void move_l_dais_daid_dfm(); -void move_l_adr16_daid_dfm(); -void move_l_adr32_daid_dfm(); -void move_l_dpc_daid_dfm(); -void move_l_dpci_daid_dfm(); -void move_l_imm32_daid_dfm(); -void move_l_ds_adr16_dfm(); -void move_l_as_adr16_dfm(); -void move_l_ais_adr16_dfm(); -void move_l_aips_adr16_dfm(); -void move_l_pais_adr16_dfm(); -void move_l_das_adr16_dfm(); -void move_l_dais_adr16_dfm(); -void move_l_adr16_adr16_dfm(); -void move_l_adr32_adr16_dfm(); -void move_l_dpc_adr16_dfm(); -void move_l_dpci_adr16_dfm(); -void move_l_imm32_adr16_dfm(); -void move_l_ds_adr32_dfm(); -void move_l_as_adr32_dfm(); -void move_l_ais_adr32_dfm(); -void move_l_aips_adr32_dfm(); -void move_l_pais_adr32_dfm(); -void move_l_das_adr32_dfm(); -void move_l_dais_adr32_dfm(); -void move_l_adr16_adr32_dfm(); -void move_l_adr32_adr32_dfm(); -void move_l_dpc_adr32_dfm(); -void move_l_dpci_adr32_dfm(); -void move_l_imm32_adr32_dfm(); -void move_w_ds_dd_dfm(); -void move_w_as_dd_dfm(); -void move_w_ais_dd_dfm(); -void move_w_aips_dd_dfm(); -void move_w_pais_dd_dfm(); -void move_w_das_dd_dfm(); -void move_w_dais_dd_dfm(); -void move_w_adr16_dd_dfm(); -void move_w_adr32_dd_dfm(); -void move_w_dpc_dd_dfm(); -void move_w_dpci_dd_dfm(); -void move_w_imm16_dd_dfm(); -void movea_w_ds_ad_dfm(); -void movea_w_as_ad_dfm(); -void movea_w_ais_ad_dfm(); -void movea_w_aips_ad_dfm(); -void movea_w_pais_ad_dfm(); -void movea_w_das_ad_dfm(); -void movea_w_dais_ad_dfm(); -void movea_w_adr16_ad_dfm(); -void movea_w_adr32_ad_dfm(); -void movea_w_dpc_ad_dfm(); -void movea_w_dpci_ad_dfm(); -void movea_w_imm16_ad_dfm(); -void move_w_ds_aid_dfm(); -void move_w_as_aid_dfm(); -void move_w_ais_aid_dfm(); -void move_w_aips_aid_dfm(); -void move_w_pais_aid_dfm(); -void move_w_das_aid_dfm(); -void move_w_dais_aid_dfm(); -void move_w_adr16_aid_dfm(); -void move_w_adr32_aid_dfm(); -void move_w_dpc_aid_dfm(); -void move_w_dpci_aid_dfm(); -void move_w_imm16_aid_dfm(); -void move_w_ds_aipd_dfm(); -void move_w_as_aipd_dfm(); -void move_w_ais_aipd_dfm(); -void move_w_aips_aipd_dfm(); -void move_w_pais_aipd_dfm(); -void move_w_das_aipd_dfm(); -void move_w_dais_aipd_dfm(); -void move_w_adr16_aipd_dfm(); -void move_w_adr32_aipd_dfm(); -void move_w_dpc_aipd_dfm(); -void move_w_dpci_aipd_dfm(); -void move_w_imm16_aipd_dfm(); -void move_w_ds_paid_dfm(); -void move_w_as_paid_dfm(); -void move_w_ais_paid_dfm(); -void move_w_aips_paid_dfm(); -void move_w_pais_paid_dfm(); -void move_w_das_paid_dfm(); -void move_w_dais_paid_dfm(); -void move_w_adr16_paid_dfm(); -void move_w_adr32_paid_dfm(); -void move_w_dpc_paid_dfm(); -void move_w_dpci_paid_dfm(); -void move_w_imm16_paid_dfm(); -void move_w_ds_dad_dfm(); -void move_w_as_dad_dfm(); -void move_w_ais_dad_dfm(); -void move_w_aips_dad_dfm(); -void move_w_pais_dad_dfm(); -void move_w_das_dad_dfm(); -void move_w_dais_dad_dfm(); -void move_w_adr16_dad_dfm(); -void move_w_adr32_dad_dfm(); -void move_w_dpc_dad_dfm(); -void move_w_dpci_dad_dfm(); -void move_w_imm16_dad_dfm(); -void move_w_ds_daid_dfm(); -void move_w_as_daid_dfm(); -void move_w_ais_daid_dfm(); -void move_w_aips_daid_dfm(); -void move_w_pais_daid_dfm(); -void move_w_das_daid_dfm(); -void move_w_dais_daid_dfm(); -void move_w_adr16_daid_dfm(); -void move_w_adr32_daid_dfm(); -void move_w_dpc_daid_dfm(); -void move_w_dpci_daid_dfm(); -void move_w_imm16_daid_dfm(); -void move_w_ds_adr16_dfm(); -void move_w_as_adr16_dfm(); -void move_w_ais_adr16_dfm(); -void move_w_aips_adr16_dfm(); -void move_w_pais_adr16_dfm(); -void move_w_das_adr16_dfm(); -void move_w_dais_adr16_dfm(); -void move_w_adr16_adr16_dfm(); -void move_w_adr32_adr16_dfm(); -void move_w_dpc_adr16_dfm(); -void move_w_dpci_adr16_dfm(); -void move_w_imm16_adr16_dfm(); -void move_w_ds_adr32_dfm(); -void move_w_as_adr32_dfm(); -void move_w_ais_adr32_dfm(); -void move_w_aips_adr32_dfm(); -void move_w_pais_adr32_dfm(); -void move_w_das_adr32_dfm(); -void move_w_dais_adr32_dfm(); -void move_w_adr16_adr32_dfm(); -void move_w_adr32_adr32_dfm(); -void move_w_dpc_adr32_dfm(); -void move_w_dpci_adr32_dfm(); -void move_w_imm16_adr32_dfm(); -void negx_b_ds_dfm(); -void negx_b_ais_dfm(); -void negx_b_aips_dfm(); -void negx_b_pais_dfm(); -void negx_b_das_dfm(); -void negx_b_dais_dfm(); -void negx_b_adr16_dfm(); -void negx_b_adr32_dfm(); -void negx_w_ds_dfm(); -void negx_w_ais_dfm(); -void negx_w_aips_dfm(); -void negx_w_pais_dfm(); -void negx_w_das_dfm(); -void negx_w_dais_dfm(); -void negx_w_adr16_dfm(); -void negx_w_adr32_dfm(); -void negx_l_ds_dfm(); -void negx_l_ais_dfm(); -void negx_l_aips_dfm(); -void negx_l_pais_dfm(); -void negx_l_das_dfm(); -void negx_l_dais_dfm(); -void negx_l_adr16_dfm(); -void negx_l_adr32_dfm(); -void move_sr_ds_dfm(); -void move_sr_ais_dfm(); -void move_sr_aips_dfm(); -void move_sr_pais_dfm(); -void move_sr_das_dfm(); -void move_sr_dais_dfm(); -void move_sr_adr16_dfm(); -void move_sr_adr32_dfm(); -void chk_w_ds_dd_dfm(); -void chk_w_ais_dd_dfm(); -void chk_w_aips_dd_dfm(); -void chk_w_pais_dd_dfm(); -void chk_w_das_dd_dfm(); -void chk_w_dais_dd_dfm(); -void chk_w_adr16_dd_dfm(); -void chk_w_adr32_dd_dfm(); -void chk_w_dpc_dd_dfm(); -void chk_w_dpci_dd_dfm(); -void chk_w_imm16_dd_dfm(); -void lea_ais_ad_dfm(); -void lea_das_ad_dfm(); -void lea_dais_ad_dfm(); -void lea_adr16_ad_dfm(); -void lea_adr32_ad_dfm(); -void lea_dpc_ad_dfm(); -void lea_dpci_ad_dfm(); -void clr_b_ds_dfm(); -void clr_b_ais_dfm(); -void clr_b_aips_dfm(); -void clr_b_pais_dfm(); -void clr_b_das_dfm(); -void clr_b_dais_dfm(); -void clr_b_adr16_dfm(); -void clr_b_adr32_dfm(); -void clr_w_ds_dfm(); -void clr_w_ais_dfm(); -void clr_w_aips_dfm(); -void clr_w_pais_dfm(); -void clr_w_das_dfm(); -void clr_w_dais_dfm(); -void clr_w_adr16_dfm(); -void clr_w_adr32_dfm(); -void clr_l_ds_dfm(); -void clr_l_ais_dfm(); -void clr_l_aips_dfm(); -void clr_l_pais_dfm(); -void clr_l_das_dfm(); -void clr_l_dais_dfm(); -void clr_l_adr16_dfm(); -void clr_l_adr32_dfm(); -void neg_b_ds_dfm(); -void neg_b_ais_dfm(); -void neg_b_aips_dfm(); -void neg_b_pais_dfm(); -void neg_b_das_dfm(); -void neg_b_dais_dfm(); -void neg_b_adr16_dfm(); -void neg_b_adr32_dfm(); -void neg_w_ds_dfm(); -void neg_w_ais_dfm(); -void neg_w_aips_dfm(); -void neg_w_pais_dfm(); -void neg_w_das_dfm(); -void neg_w_dais_dfm(); -void neg_w_adr16_dfm(); -void neg_w_adr32_dfm(); -void neg_l_ds_dfm(); -void neg_l_ais_dfm(); -void neg_l_aips_dfm(); -void neg_l_pais_dfm(); -void neg_l_das_dfm(); -void neg_l_dais_dfm(); -void neg_l_adr16_dfm(); -void neg_l_adr32_dfm(); -void move_ds_ccr_dfm(); -void move_ais_ccr_dfm(); -void move_aips_ccr_dfm(); -void move_pais_ccr_dfm(); -void move_das_ccr_dfm(); -void move_dais_ccr_dfm(); -void move_adr16_ccr_dfm(); -void move_adr32_ccr_dfm(); -void move_dpc_ccr_dfm(); -void move_dpci_ccr_dfm(); -void move_imm8_ccr_dfm(); -void not_b_ds_dfm(); -void not_b_ais_dfm(); -void not_b_aips_dfm(); -void not_b_pais_dfm(); -void not_b_das_dfm(); -void not_b_dais_dfm(); -void not_b_adr16_dfm(); -void not_b_adr32_dfm(); -void not_w_ds_dfm(); -void not_w_ais_dfm(); -void not_w_aips_dfm(); -void not_w_pais_dfm(); -void not_w_das_dfm(); -void not_w_dais_dfm(); -void not_w_adr16_dfm(); -void not_w_adr32_dfm(); -void not_l_ds_dfm(); -void not_l_ais_dfm(); -void not_l_aips_dfm(); -void not_l_pais_dfm(); -void not_l_das_dfm(); -void not_l_dais_dfm(); -void not_l_adr16_dfm(); -void not_l_adr32_dfm(); -void move_ds_sr_dfm(); -void move_ais_sr_dfm(); -void move_aips_sr_dfm(); -void move_pais_sr_dfm(); -void move_das_sr_dfm(); -void move_dais_sr_dfm(); -void move_adr16_sr_dfm(); -void move_adr32_sr_dfm(); -void move_dpc_sr_dfm(); -void move_dpci_sr_dfm(); -void move_i16u_sr_dfm(); -void nbcd_b_ds_dfm(); -void nbcd_b_ais_dfm(); -void nbcd_b_aips_dfm(); -void nbcd_b_pais_dfm(); -void nbcd_b_das_dfm(); -void nbcd_b_dais_dfm(); -void nbcd_b_adr16_dfm(); -void nbcd_b_adr32_dfm(); -void swap_ds_dfm(); -void pea_ais_dfm(); -void pea_das_dfm(); -void pea_dais_dfm(); -void pea_adr16_dfm(); -void pea_adr32_dfm(); -void pea_dpc_dfm(); -void pea_dpci_dfm(); -void ext_w_ds_dfm(); -void movem_w_list_ais_dfm(); -void movem_w_listp_pais_dfm(); -void movem_w_list_das_dfm(); -void movem_w_list_dais_dfm(); -void movem_w_list_adr16_dfm(); -void movem_w_list_adr32_dfm(); -void ext_l_ds_dfm(); -void movem_l_list_ais_dfm(); -void movem_l_listp_pais_dfm(); -void movem_l_list_das_dfm(); -void movem_l_list_dais_dfm(); -void movem_l_list_adr16_dfm(); -void movem_l_list_adr32_dfm(); -void tst_b_ds_dfm(); -void tst_b_ais_dfm(); -void tst_b_aips_dfm(); -void tst_b_pais_dfm(); -void tst_b_das_dfm(); -void tst_b_dais_dfm(); -void tst_b_adr16_dfm(); -void tst_b_adr32_dfm(); -void tst_w_ds_dfm(); -void tst_w_ais_dfm(); -void tst_w_aips_dfm(); -void tst_w_pais_dfm(); -void tst_w_das_dfm(); -void tst_w_dais_dfm(); -void tst_w_adr16_dfm(); -void tst_w_adr32_dfm(); -void tst_l_ds_dfm(); -void tst_l_ais_dfm(); -void tst_l_aips_dfm(); -void tst_l_pais_dfm(); -void tst_l_das_dfm(); -void tst_l_dais_dfm(); -void tst_l_adr16_dfm(); -void tst_l_adr32_dfm(); -void tas_ds_dfm(); -void tas_ais_dfm(); -void tas_aips_dfm(); -void tas_pais_dfm(); -void tas_das_dfm(); -void tas_dais_dfm(); -void tas_adr16_dfm(); -void tas_adr32_dfm(); -void movem_w_ais_list_dfm(); -void movem_w_aips_list_dfm(); -void movem_w_das_list_dfm(); -void movem_w_dais_list_dfm(); -void movem_w_adr16_list_dfm(); -void movem_w_adr32_list_dfm(); -void movem_w_dpc_list_dfm(); -void movem_w_dpci_list_dfm(); -void movem_l_ais_list_dfm(); -void movem_l_aips_list_dfm(); -void movem_l_das_list_dfm(); -void movem_l_dais_list_dfm(); -void movem_l_adr16_list_dfm(); -void movem_l_adr32_list_dfm(); -void movem_l_dpc_list_dfm(); -void movem_l_dpci_list_dfm(); -void trap_imm4_dfm(); -void link_as_imm16_dfm(); -void unlk_as_dfm(); -void move_as_usp_dfm(); -void move_usp_as_dfm(); -void reset_dfm(); -void nop_dfm(); -void stop_i16u_dfm(); -void rte_dfm(); -void rts_dfm(); -void trapv_dfm(); -void rtr_dfm(); -void jsr_ais_dfm(); -void jsr_das_dfm(); -void jsr_dais_dfm(); -void jsr_adr16_dfm(); -void jsr_adr32_dfm(); -void jsr_dpc_dfm(); -void jsr_dpci_dfm(); -void jmp_ais_dfm(); -void jmp_das_dfm(); -void jmp_dais_dfm(); -void jmp_adr16_dfm(); -void jmp_adr32_dfm(); -void jmp_dpc_dfm(); -void jmp_dpci_dfm(); -void addq_b_imm3_ds_dfm(); -void addq_b_imm3_ais_dfm(); -void addq_b_imm3_aips_dfm(); -void addq_b_imm3_pais_dfm(); -void addq_b_imm3_das_dfm(); -void addq_b_imm3_dais_dfm(); -void addq_b_imm3_adr16_dfm(); -void addq_b_imm3_adr32_dfm(); -void addq_w_imm3_ds_dfm(); -void addq_w_imm3_as_dfm(); -void addq_w_imm3_ais_dfm(); -void addq_w_imm3_aips_dfm(); -void addq_w_imm3_pais_dfm(); -void addq_w_imm3_das_dfm(); -void addq_w_imm3_dais_dfm(); -void addq_w_imm3_adr16_dfm(); -void addq_w_imm3_adr32_dfm(); -void addq_l_imm3_ds_dfm(); -void addq_l_imm3_as_dfm(); -void addq_l_imm3_ais_dfm(); -void addq_l_imm3_aips_dfm(); -void addq_l_imm3_pais_dfm(); -void addq_l_imm3_das_dfm(); -void addq_l_imm3_dais_dfm(); -void addq_l_imm3_adr16_dfm(); -void addq_l_imm3_adr32_dfm(); -void st_ds_dfm(); -void dbt_ds_rel16_dfm(); -void st_ais_dfm(); -void st_aips_dfm(); -void st_pais_dfm(); -void st_das_dfm(); -void st_dais_dfm(); -void st_adr16_dfm(); -void st_adr32_dfm(); -void subq_b_imm3_ds_dfm(); -void subq_b_imm3_ais_dfm(); -void subq_b_imm3_aips_dfm(); -void subq_b_imm3_pais_dfm(); -void subq_b_imm3_das_dfm(); -void subq_b_imm3_dais_dfm(); -void subq_b_imm3_adr16_dfm(); -void subq_b_imm3_adr32_dfm(); -void subq_w_imm3_ds_dfm(); -void subq_w_imm3_as_dfm(); -void subq_w_imm3_ais_dfm(); -void subq_w_imm3_aips_dfm(); -void subq_w_imm3_pais_dfm(); -void subq_w_imm3_das_dfm(); -void subq_w_imm3_dais_dfm(); -void subq_w_imm3_adr16_dfm(); -void subq_w_imm3_adr32_dfm(); -void subq_l_imm3_ds_dfm(); -void subq_l_imm3_as_dfm(); -void subq_l_imm3_ais_dfm(); -void subq_l_imm3_aips_dfm(); -void subq_l_imm3_pais_dfm(); -void subq_l_imm3_das_dfm(); -void subq_l_imm3_dais_dfm(); -void subq_l_imm3_adr16_dfm(); -void subq_l_imm3_adr32_dfm(); -void sf_ds_dfm(); -void dbra_ds_rel16_dfm(); -void sf_ais_dfm(); -void sf_aips_dfm(); -void sf_pais_dfm(); -void sf_das_dfm(); -void sf_dais_dfm(); -void sf_adr16_dfm(); -void sf_adr32_dfm(); -void shi_ds_dfm(); -void dbhi_ds_rel16_dfm(); -void shi_ais_dfm(); -void shi_aips_dfm(); -void shi_pais_dfm(); -void shi_das_dfm(); -void shi_dais_dfm(); -void shi_adr16_dfm(); -void shi_adr32_dfm(); -void sls_ds_dfm(); -void dbls_ds_rel16_dfm(); -void sls_ais_dfm(); -void sls_aips_dfm(); -void sls_pais_dfm(); -void sls_das_dfm(); -void sls_dais_dfm(); -void sls_adr16_dfm(); -void sls_adr32_dfm(); -void scc_ds_dfm(); -void dbcc_ds_rel16_dfm(); -void scc_ais_dfm(); -void scc_aips_dfm(); -void scc_pais_dfm(); -void scc_das_dfm(); -void scc_dais_dfm(); -void scc_adr16_dfm(); -void scc_adr32_dfm(); -void scs_ds_dfm(); -void dbcs_ds_rel16_dfm(); -void scs_ais_dfm(); -void scs_aips_dfm(); -void scs_pais_dfm(); -void scs_das_dfm(); -void scs_dais_dfm(); -void scs_adr16_dfm(); -void scs_adr32_dfm(); -void sne_ds_dfm(); -void dbne_ds_rel16_dfm(); -void sne_ais_dfm(); -void sne_aips_dfm(); -void sne_pais_dfm(); -void sne_das_dfm(); -void sne_dais_dfm(); -void sne_adr16_dfm(); -void sne_adr32_dfm(); -void seq_ds_dfm(); -void dbeq_ds_rel16_dfm(); -void seq_ais_dfm(); -void seq_aips_dfm(); -void seq_pais_dfm(); -void seq_das_dfm(); -void seq_dais_dfm(); -void seq_adr16_dfm(); -void seq_adr32_dfm(); -void svc_ds_dfm(); -void dbvc_ds_rel16_dfm(); -void svc_ais_dfm(); -void svc_aips_dfm(); -void svc_pais_dfm(); -void svc_das_dfm(); -void svc_dais_dfm(); -void svc_adr16_dfm(); -void svc_adr32_dfm(); -void svs_ds_dfm(); -void dbvs_ds_rel16_dfm(); -void svs_ais_dfm(); -void svs_aips_dfm(); -void svs_pais_dfm(); -void svs_das_dfm(); -void svs_dais_dfm(); -void svs_adr16_dfm(); -void svs_adr32_dfm(); -void spl_ds_dfm(); -void dbpl_ds_rel16_dfm(); -void spl_ais_dfm(); -void spl_aips_dfm(); -void spl_pais_dfm(); -void spl_das_dfm(); -void spl_dais_dfm(); -void spl_adr16_dfm(); -void spl_adr32_dfm(); -void smi_ds_dfm(); -void dbmi_ds_rel16_dfm(); -void smi_ais_dfm(); -void smi_aips_dfm(); -void smi_pais_dfm(); -void smi_das_dfm(); -void smi_dais_dfm(); -void smi_adr16_dfm(); -void smi_adr32_dfm(); -void sge_ds_dfm(); -void dbge_ds_rel16_dfm(); -void sge_ais_dfm(); -void sge_aips_dfm(); -void sge_pais_dfm(); -void sge_das_dfm(); -void sge_dais_dfm(); -void sge_adr16_dfm(); -void sge_adr32_dfm(); -void slt_ds_dfm(); -void dblt_ds_rel16_dfm(); -void slt_ais_dfm(); -void slt_aips_dfm(); -void slt_pais_dfm(); -void slt_das_dfm(); -void slt_dais_dfm(); -void slt_adr16_dfm(); -void slt_adr32_dfm(); -void sgt_ds_dfm(); -void dbgt_ds_rel16_dfm(); -void sgt_ais_dfm(); -void sgt_aips_dfm(); -void sgt_pais_dfm(); -void sgt_das_dfm(); -void sgt_dais_dfm(); -void sgt_adr16_dfm(); -void sgt_adr32_dfm(); -void sle_ds_dfm(); -void dble_ds_rel16_dfm(); -void sle_ais_dfm(); -void sle_aips_dfm(); -void sle_pais_dfm(); -void sle_das_dfm(); -void sle_dais_dfm(); -void sle_adr16_dfm(); -void sle_adr32_dfm(); -void bra_rel16_dfm(); -void bra_rel8_dfm(); -void bsr_rel16_dfm(); -void bsr_rel8_dfm(); -void bhi_rel16_dfm(); -void bhi_rel8_dfm(); -void bls_rel16_dfm(); -void bls_rel8_dfm(); -void bcc_rel16_dfm(); -void bcc_rel8_dfm(); -void bcs_rel16_dfm(); -void bcs_rel8_dfm(); -void bne_rel16_dfm(); -void bne_rel8_dfm(); -void beq_rel16_dfm(); -void beq_rel8_dfm(); -void bvc_rel16_dfm(); -void bvc_rel8_dfm(); -void bvs_rel16_dfm(); -void bvs_rel8_dfm(); -void bpl_rel16_dfm(); -void bpl_rel8_dfm(); -void bmi_rel16_dfm(); -void bmi_rel8_dfm(); -void bge_rel16_dfm(); -void bge_rel8_dfm(); -void blt_rel16_dfm(); -void blt_rel8_dfm(); -void bgt_rel16_dfm(); -void bgt_rel8_dfm(); -void ble_rel16_dfm(); -void ble_rel8_dfm(); -void moveq_imm8o_dd_dfm(); -void or_b_ds_dd_dfm(); -void or_b_ais_dd_dfm(); -void or_b_aips_dd_dfm(); -void or_b_pais_dd_dfm(); -void or_b_das_dd_dfm(); -void or_b_dais_dd_dfm(); -void or_b_adr16_dd_dfm(); -void or_b_adr32_dd_dfm(); -void or_b_dpc_dd_dfm(); -void or_b_dpci_dd_dfm(); -void or_b_imm8_dd_dfm(); -void or_w_ds_dd_dfm(); -void or_w_ais_dd_dfm(); -void or_w_aips_dd_dfm(); -void or_w_pais_dd_dfm(); -void or_w_das_dd_dfm(); -void or_w_dais_dd_dfm(); -void or_w_adr16_dd_dfm(); -void or_w_adr32_dd_dfm(); -void or_w_dpc_dd_dfm(); -void or_w_dpci_dd_dfm(); -void or_w_imm16_dd_dfm(); -void or_l_ds_dd_dfm(); -void or_l_ais_dd_dfm(); -void or_l_aips_dd_dfm(); -void or_l_pais_dd_dfm(); -void or_l_das_dd_dfm(); -void or_l_dais_dd_dfm(); -void or_l_adr16_dd_dfm(); -void or_l_adr32_dd_dfm(); -void or_l_dpc_dd_dfm(); -void or_l_dpci_dd_dfm(); -void or_l_imm32_dd_dfm(); -void divu_w_ds_dd_dfm(); -void divu_w_ais_dd_dfm(); -void divu_w_aips_dd_dfm(); -void divu_w_pais_dd_dfm(); -void divu_w_das_dd_dfm(); -void divu_w_dais_dd_dfm(); -void divu_w_adr16_dd_dfm(); -void divu_w_adr32_dd_dfm(); -void divu_w_dpc_dd_dfm(); -void divu_w_dpci_dd_dfm(); -void divu_w_imm16_dd_dfm(); -void sbcd_ds_dd_dfm(); -void sbcd_pais_paid_dfm(); -void or_b_dd_ais_dfm(); -void or_b_dd_aips_dfm(); -void or_b_dd_pais_dfm(); -void or_b_dd_das_dfm(); -void or_b_dd_dais_dfm(); -void or_b_dd_adr16_dfm(); -void or_b_dd_adr32_dfm(); -void or_w_dd_ais_dfm(); -void or_w_dd_aips_dfm(); -void or_w_dd_pais_dfm(); -void or_w_dd_das_dfm(); -void or_w_dd_dais_dfm(); -void or_w_dd_adr16_dfm(); -void or_w_dd_adr32_dfm(); -void or_l_dd_ais_dfm(); -void or_l_dd_aips_dfm(); -void or_l_dd_pais_dfm(); -void or_l_dd_das_dfm(); -void or_l_dd_dais_dfm(); -void or_l_dd_adr16_dfm(); -void or_l_dd_adr32_dfm(); -void divs_w_ds_dd_dfm(); -void divs_w_ais_dd_dfm(); -void divs_w_aips_dd_dfm(); -void divs_w_pais_dd_dfm(); -void divs_w_das_dd_dfm(); -void divs_w_dais_dd_dfm(); -void divs_w_adr16_dd_dfm(); -void divs_w_adr32_dd_dfm(); -void divs_w_dpc_dd_dfm(); -void divs_w_dpci_dd_dfm(); -void divs_w_imm16_dd_dfm(); -void sub_b_ds_dd_dfm(); -void sub_b_ais_dd_dfm(); -void sub_b_aips_dd_dfm(); -void sub_b_pais_dd_dfm(); -void sub_b_das_dd_dfm(); -void sub_b_dais_dd_dfm(); -void sub_b_adr16_dd_dfm(); -void sub_b_adr32_dd_dfm(); -void sub_b_dpc_dd_dfm(); -void sub_b_dpci_dd_dfm(); -void sub_b_imm8_dd_dfm(); -void sub_w_ds_dd_dfm(); -void sub_w_as_dd_dfm(); -void sub_w_ais_dd_dfm(); -void sub_w_aips_dd_dfm(); -void sub_w_pais_dd_dfm(); -void sub_w_das_dd_dfm(); -void sub_w_dais_dd_dfm(); -void sub_w_adr16_dd_dfm(); -void sub_w_adr32_dd_dfm(); -void sub_w_dpc_dd_dfm(); -void sub_w_dpci_dd_dfm(); -void sub_w_imm16_dd_dfm(); -void sub_l_ds_dd_dfm(); -void sub_l_as_dd_dfm(); -void sub_l_ais_dd_dfm(); -void sub_l_aips_dd_dfm(); -void sub_l_pais_dd_dfm(); -void sub_l_das_dd_dfm(); -void sub_l_dais_dd_dfm(); -void sub_l_adr16_dd_dfm(); -void sub_l_adr32_dd_dfm(); -void sub_l_dpc_dd_dfm(); -void sub_l_dpci_dd_dfm(); -void sub_l_imm32_dd_dfm(); -void suba_w_ds_ad_dfm(); -void suba_w_as_ad_dfm(); -void suba_w_ais_ad_dfm(); -void suba_w_aips_ad_dfm(); -void suba_w_pais_ad_dfm(); -void suba_w_das_ad_dfm(); -void suba_w_dais_ad_dfm(); -void suba_w_adr16_ad_dfm(); -void suba_w_adr32_ad_dfm(); -void suba_w_dpc_ad_dfm(); -void suba_w_dpci_ad_dfm(); -void suba_w_imm16_ad_dfm(); -void subx_b_ds_dd_dfm(); -void subx_b_pais_paid_dfm(); -void sub_b_dd_ais_dfm(); -void sub_b_dd_aips_dfm(); -void sub_b_dd_pais_dfm(); -void sub_b_dd_das_dfm(); -void sub_b_dd_dais_dfm(); -void sub_b_dd_adr16_dfm(); -void sub_b_dd_adr32_dfm(); -void subx_w_ds_dd_dfm(); -void subx_w_pais_paid_dfm(); -void sub_w_dd_ais_dfm(); -void sub_w_dd_aips_dfm(); -void sub_w_dd_pais_dfm(); -void sub_w_dd_das_dfm(); -void sub_w_dd_dais_dfm(); -void sub_w_dd_adr16_dfm(); -void sub_w_dd_adr32_dfm(); -void subx_l_ds_dd_dfm(); -void subx_l_pais_paid_dfm(); -void sub_l_dd_ais_dfm(); -void sub_l_dd_aips_dfm(); -void sub_l_dd_pais_dfm(); -void sub_l_dd_das_dfm(); -void sub_l_dd_dais_dfm(); -void sub_l_dd_adr16_dfm(); -void sub_l_dd_adr32_dfm(); -void suba_l_ds_ad_dfm(); -void suba_l_as_ad_dfm(); -void suba_l_ais_ad_dfm(); -void suba_l_aips_ad_dfm(); -void suba_l_pais_ad_dfm(); -void suba_l_das_ad_dfm(); -void suba_l_dais_ad_dfm(); -void suba_l_adr16_ad_dfm(); -void suba_l_adr32_ad_dfm(); -void suba_l_dpc_ad_dfm(); -void suba_l_dpci_ad_dfm(); -void suba_l_imm32_ad_dfm(); -void cmp_b_ds_dd_dfm(); -void cmp_b_ais_dd_dfm(); -void cmp_b_aips_dd_dfm(); -void cmp_b_pais_dd_dfm(); -void cmp_b_das_dd_dfm(); -void cmp_b_dais_dd_dfm(); -void cmp_b_adr16_dd_dfm(); -void cmp_b_adr32_dd_dfm(); -void cmp_b_dpc_dd_dfm(); -void cmp_b_dpci_dd_dfm(); -void cmp_b_imm8_dd_dfm(); -void cmp_w_ds_dd_dfm(); -void cmp_w_as_dd_dfm(); -void cmp_w_ais_dd_dfm(); -void cmp_w_aips_dd_dfm(); -void cmp_w_pais_dd_dfm(); -void cmp_w_das_dd_dfm(); -void cmp_w_dais_dd_dfm(); -void cmp_w_adr16_dd_dfm(); -void cmp_w_adr32_dd_dfm(); -void cmp_w_dpc_dd_dfm(); -void cmp_w_dpci_dd_dfm(); -void cmp_w_imm16_dd_dfm(); -void cmp_l_ds_dd_dfm(); -void cmp_l_as_dd_dfm(); -void cmp_l_ais_dd_dfm(); -void cmp_l_aips_dd_dfm(); -void cmp_l_pais_dd_dfm(); -void cmp_l_das_dd_dfm(); -void cmp_l_dais_dd_dfm(); -void cmp_l_adr16_dd_dfm(); -void cmp_l_adr32_dd_dfm(); -void cmp_l_dpc_dd_dfm(); -void cmp_l_dpci_dd_dfm(); -void cmp_l_imm32_dd_dfm(); -void cmpa_w_ds_ad_dfm(); -void cmpa_w_as_ad_dfm(); -void cmpa_w_ais_ad_dfm(); -void cmpa_w_aips_ad_dfm(); -void cmpa_w_pais_ad_dfm(); -void cmpa_w_das_ad_dfm(); -void cmpa_w_dais_ad_dfm(); -void cmpa_w_adr16_ad_dfm(); -void cmpa_w_adr32_ad_dfm(); -void cmpa_w_dpc_ad_dfm(); -void cmpa_w_dpci_ad_dfm(); -void cmpa_w_imm16_ad_dfm(); -void eor_b_dd_ds_dfm(); -void cmpm_b_aips_aipd_dfm(); -void eor_b_dd_ais_dfm(); -void eor_b_dd_aips_dfm(); -void eor_b_dd_pais_dfm(); -void eor_b_dd_das_dfm(); -void eor_b_dd_dais_dfm(); -void eor_b_dd_adr16_dfm(); -void eor_b_dd_adr32_dfm(); -void eor_w_dd_ds_dfm(); -void cmpm_w_aips_aipd_dfm(); -void eor_w_dd_ais_dfm(); -void eor_w_dd_aips_dfm(); -void eor_w_dd_pais_dfm(); -void eor_w_dd_das_dfm(); -void eor_w_dd_dais_dfm(); -void eor_w_dd_adr16_dfm(); -void eor_w_dd_adr32_dfm(); -void eor_l_dd_ds_dfm(); -void cmpm_l_aips_aipd_dfm(); -void eor_l_dd_ais_dfm(); -void eor_l_dd_aips_dfm(); -void eor_l_dd_pais_dfm(); -void eor_l_dd_das_dfm(); -void eor_l_dd_dais_dfm(); -void eor_l_dd_adr16_dfm(); -void eor_l_dd_adr32_dfm(); -void cmpa_l_ds_ad_dfm(); -void cmpa_l_as_ad_dfm(); -void cmpa_l_ais_ad_dfm(); -void cmpa_l_aips_ad_dfm(); -void cmpa_l_pais_ad_dfm(); -void cmpa_l_das_ad_dfm(); -void cmpa_l_dais_ad_dfm(); -void cmpa_l_adr16_ad_dfm(); -void cmpa_l_adr32_ad_dfm(); -void cmpa_l_dpc_ad_dfm(); -void cmpa_l_dpci_ad_dfm(); -void cmpa_l_imm32_ad_dfm(); -void and_b_ds_dd_dfm(); -void and_b_ais_dd_dfm(); -void and_b_aips_dd_dfm(); -void and_b_pais_dd_dfm(); -void and_b_das_dd_dfm(); -void and_b_dais_dd_dfm(); -void and_b_adr16_dd_dfm(); -void and_b_adr32_dd_dfm(); -void and_b_dpc_dd_dfm(); -void and_b_dpci_dd_dfm(); -void and_b_imm8_dd_dfm(); -void and_w_ds_dd_dfm(); -void and_w_ais_dd_dfm(); -void and_w_aips_dd_dfm(); -void and_w_pais_dd_dfm(); -void and_w_das_dd_dfm(); -void and_w_dais_dd_dfm(); -void and_w_adr16_dd_dfm(); -void and_w_adr32_dd_dfm(); -void and_w_dpc_dd_dfm(); -void and_w_dpci_dd_dfm(); -void and_w_imm16_dd_dfm(); -void and_l_ds_dd_dfm(); -void and_l_ais_dd_dfm(); -void and_l_aips_dd_dfm(); -void and_l_pais_dd_dfm(); -void and_l_das_dd_dfm(); -void and_l_dais_dd_dfm(); -void and_l_adr16_dd_dfm(); -void and_l_adr32_dd_dfm(); -void and_l_dpc_dd_dfm(); -void and_l_dpci_dd_dfm(); -void and_l_imm32_dd_dfm(); -void mulu_w_ds_dd_dfm(); -void mulu_w_ais_dd_dfm(); -void mulu_w_aips_dd_dfm(); -void mulu_w_pais_dd_dfm(); -void mulu_w_das_dd_dfm(); -void mulu_w_dais_dd_dfm(); -void mulu_w_adr16_dd_dfm(); -void mulu_w_adr32_dd_dfm(); -void mulu_w_dpc_dd_dfm(); -void mulu_w_dpci_dd_dfm(); -void mulu_w_imm16_dd_dfm(); -void abcd_ds_dd_dfm(); -void abcd_pais_paid_dfm(); -void and_b_dd_ais_dfm(); -void and_b_dd_aips_dfm(); -void and_b_dd_pais_dfm(); -void and_b_dd_das_dfm(); -void and_b_dd_dais_dfm(); -void and_b_dd_adr16_dfm(); -void and_b_dd_adr32_dfm(); -void exg_dd_ds_dfm(); -void exg_ad_as_dfm(); -void and_w_dd_ais_dfm(); -void and_w_dd_aips_dfm(); -void and_w_dd_pais_dfm(); -void and_w_dd_das_dfm(); -void and_w_dd_dais_dfm(); -void and_w_dd_adr16_dfm(); -void and_w_dd_adr32_dfm(); -void exg_dd_as_dfm(); -void and_l_dd_ais_dfm(); -void and_l_dd_aips_dfm(); -void and_l_dd_pais_dfm(); -void and_l_dd_das_dfm(); -void and_l_dd_dais_dfm(); -void and_l_dd_adr16_dfm(); -void and_l_dd_adr32_dfm(); -void muls_w_ds_dd_dfm(); -void muls_w_ais_dd_dfm(); -void muls_w_aips_dd_dfm(); -void muls_w_pais_dd_dfm(); -void muls_w_das_dd_dfm(); -void muls_w_dais_dd_dfm(); -void muls_w_adr16_dd_dfm(); -void muls_w_adr32_dd_dfm(); -void muls_w_dpc_dd_dfm(); -void muls_w_dpci_dd_dfm(); -void muls_w_imm16_dd_dfm(); -void add_b_ds_dd_dfm(); -void add_b_ais_dd_dfm(); -void add_b_aips_dd_dfm(); -void add_b_pais_dd_dfm(); -void add_b_das_dd_dfm(); -void add_b_dais_dd_dfm(); -void add_b_adr16_dd_dfm(); -void add_b_adr32_dd_dfm(); -void add_b_dpc_dd_dfm(); -void add_b_dpci_dd_dfm(); -void add_b_imm8_dd_dfm(); -void add_w_ds_dd_dfm(); -void add_w_as_dd_dfm(); -void add_w_ais_dd_dfm(); -void add_w_aips_dd_dfm(); -void add_w_pais_dd_dfm(); -void add_w_das_dd_dfm(); -void add_w_dais_dd_dfm(); -void add_w_adr16_dd_dfm(); -void add_w_adr32_dd_dfm(); -void add_w_dpc_dd_dfm(); -void add_w_dpci_dd_dfm(); -void add_w_imm16_dd_dfm(); -void add_l_ds_dd_dfm(); -void add_l_as_dd_dfm(); -void add_l_ais_dd_dfm(); -void add_l_aips_dd_dfm(); -void add_l_pais_dd_dfm(); -void add_l_das_dd_dfm(); -void add_l_dais_dd_dfm(); -void add_l_adr16_dd_dfm(); -void add_l_adr32_dd_dfm(); -void add_l_dpc_dd_dfm(); -void add_l_dpci_dd_dfm(); -void add_l_imm32_dd_dfm(); -void adda_w_ds_ad_dfm(); -void adda_w_as_ad_dfm(); -void adda_w_ais_ad_dfm(); -void adda_w_aips_ad_dfm(); -void adda_w_pais_ad_dfm(); -void adda_w_das_ad_dfm(); -void adda_w_dais_ad_dfm(); -void adda_w_adr16_ad_dfm(); -void adda_w_adr32_ad_dfm(); -void adda_w_dpc_ad_dfm(); -void adda_w_dpci_ad_dfm(); -void adda_w_imm16_ad_dfm(); -void addx_b_ds_dd_dfm(); -void addx_b_pais_paid_dfm(); -void add_b_dd_ais_dfm(); -void add_b_dd_aips_dfm(); -void add_b_dd_pais_dfm(); -void add_b_dd_das_dfm(); -void add_b_dd_dais_dfm(); -void add_b_dd_adr16_dfm(); -void add_b_dd_adr32_dfm(); -void addx_w_ds_dd_dfm(); -void addx_w_pais_paid_dfm(); -void add_w_dd_ais_dfm(); -void add_w_dd_aips_dfm(); -void add_w_dd_pais_dfm(); -void add_w_dd_das_dfm(); -void add_w_dd_dais_dfm(); -void add_w_dd_adr16_dfm(); -void add_w_dd_adr32_dfm(); -void addx_l_ds_dd_dfm(); -void addx_l_pais_paid_dfm(); -void add_l_dd_ais_dfm(); -void add_l_dd_aips_dfm(); -void add_l_dd_pais_dfm(); -void add_l_dd_das_dfm(); -void add_l_dd_dais_dfm(); -void add_l_dd_adr16_dfm(); -void add_l_dd_adr32_dfm(); -void adda_l_ds_ad_dfm(); -void adda_l_as_ad_dfm(); -void adda_l_ais_ad_dfm(); -void adda_l_aips_ad_dfm(); -void adda_l_pais_ad_dfm(); -void adda_l_das_ad_dfm(); -void adda_l_dais_ad_dfm(); -void adda_l_adr16_ad_dfm(); -void adda_l_adr32_ad_dfm(); -void adda_l_dpc_ad_dfm(); -void adda_l_dpci_ad_dfm(); -void adda_l_imm32_ad_dfm(); -void asr_b_imm3_ds_dfm(); -void lsr_b_imm3_ds_dfm(); -void roxr_b_imm3_ds_dfm(); -void ror_b_imm3_ds_dfm(); -void asr_b_dd_ds_dfm(); -void lsr_b_dd_ds_dfm(); -void roxr_b_dd_ds_dfm(); -void ror_b_dd_ds_dfm(); -void asr_w_imm3_ds_dfm(); -void lsr_w_imm3_ds_dfm(); -void roxr_w_imm3_ds_dfm(); -void ror_w_imm3_ds_dfm(); -void asr_w_dd_ds_dfm(); -void lsr_w_dd_ds_dfm(); -void roxr_w_dd_ds_dfm(); -void ror_w_dd_ds_dfm(); -void asr_l_imm3_ds_dfm(); -void lsr_l_imm3_ds_dfm(); -void roxr_l_imm3_ds_dfm(); -void ror_l_imm3_ds_dfm(); -void asr_l_dd_ds_dfm(); -void lsr_l_dd_ds_dfm(); -void roxr_l_dd_ds_dfm(); -void ror_l_dd_ds_dfm(); -void asr_ais_dfm(); -void asr_aips_dfm(); -void asr_pais_dfm(); -void asr_das_dfm(); -void asr_dais_dfm(); -void asr_adr16_dfm(); -void asr_adr32_dfm(); -void asl_b_imm3_ds_dfm(); -void lsl_b_imm3_ds_dfm(); -void roxl_b_imm3_ds_dfm(); -void rol_b_imm3_ds_dfm(); -void asl_b_dd_ds_dfm(); -void lsl_b_dd_ds_dfm(); -void roxl_b_dd_ds_dfm(); -void rol_b_dd_ds_dfm(); -void asl_w_imm3_ds_dfm(); -void lsl_w_imm3_ds_dfm(); -void roxl_w_imm3_ds_dfm(); -void rol_w_imm3_ds_dfm(); -void asl_w_dd_ds_dfm(); -void lsl_w_dd_ds_dfm(); -void roxl_w_dd_ds_dfm(); -void rol_w_dd_ds_dfm(); -void asl_l_imm3_ds_dfm(); -void lsl_l_imm3_ds_dfm(); -void roxl_l_imm3_ds_dfm(); -void rol_l_imm3_ds_dfm(); -void asl_l_dd_ds_dfm(); -void lsl_l_dd_ds_dfm(); -void roxl_l_dd_ds_dfm(); -void rol_l_dd_ds_dfm(); -void asl_ais_dfm(); -void asl_aips_dfm(); -void asl_pais_dfm(); -void asl_das_dfm(); -void asl_dais_dfm(); -void asl_adr16_dfm(); -void asl_adr32_dfm(); -void lsr_ais_dfm(); -void lsr_aips_dfm(); -void lsr_pais_dfm(); -void lsr_das_dfm(); -void lsr_dais_dfm(); -void lsr_adr16_dfm(); -void lsr_adr32_dfm(); -void lsl_ais_dfm(); -void lsl_aips_dfm(); -void lsl_pais_dfm(); -void lsl_das_dfm(); -void lsl_dais_dfm(); -void lsl_adr16_dfm(); -void lsl_adr32_dfm(); -void roxr_ais_dfm(); -void roxr_aips_dfm(); -void roxr_pais_dfm(); -void roxr_das_dfm(); -void roxr_dais_dfm(); -void roxr_adr16_dfm(); -void roxr_adr32_dfm(); -void roxl_ais_dfm(); -void roxl_aips_dfm(); -void roxl_pais_dfm(); -void roxl_das_dfm(); -void roxl_dais_dfm(); -void roxl_adr16_dfm(); -void roxl_adr32_dfm(); -void ror_ais_dfm(); -void ror_aips_dfm(); -void ror_pais_dfm(); -void ror_das_dfm(); -void ror_dais_dfm(); -void ror_adr16_dfm(); -void ror_adr32_dfm(); -void rol_ais_dfm(); -void rol_aips_dfm(); -void rol_pais_dfm(); -void rol_das_dfm(); -void rol_dais_dfm(); -void rol_adr16_dfm(); -void rol_adr32_dfm(); -void state_reset_ifm(); -void state_bus_error_ifm(); -void state_address_error_ifm(); -void state_double_fault_ifm(); -void state_illegal_ifm(); -void state_priviledge_ifm(); -void state_trace_ifm(); -void state_linea_ifm(); -void state_linef_ifm(); -void state_interrupt_ifm(); -void ori_b_imm8_ds_ifm(); -void ori_b_imm8_ais_ifm(); -void ori_b_imm8_aips_ifm(); -void ori_b_imm8_pais_ifm(); -void ori_b_imm8_das_ifm(); -void ori_b_imm8_dais_ifm(); -void ori_b_imm8_adr16_ifm(); -void ori_b_imm8_adr32_ifm(); -void ori_imm8_ccr_ifm(); -void ori_w_imm16_ds_ifm(); -void ori_w_imm16_ais_ifm(); -void ori_w_imm16_aips_ifm(); -void ori_w_imm16_pais_ifm(); -void ori_w_imm16_das_ifm(); -void ori_w_imm16_dais_ifm(); -void ori_w_imm16_adr16_ifm(); -void ori_w_imm16_adr32_ifm(); -void ori_i16u_sr_ifm(); -void ori_l_imm32_ds_ifm(); -void ori_l_imm32_ais_ifm(); -void ori_l_imm32_aips_ifm(); -void ori_l_imm32_pais_ifm(); -void ori_l_imm32_das_ifm(); -void ori_l_imm32_dais_ifm(); -void ori_l_imm32_adr16_ifm(); -void ori_l_imm32_adr32_ifm(); -void btst_dd_ds_ifm(); -void movep_w_das_dd_ifm(); -void btst_dd_ais_ifm(); -void btst_dd_aips_ifm(); -void btst_dd_pais_ifm(); -void btst_dd_das_ifm(); -void btst_dd_dais_ifm(); -void btst_dd_adr16_ifm(); -void btst_dd_adr32_ifm(); -void btst_dd_dpc_ifm(); -void btst_dd_dpci_ifm(); -void btst_dd_imm_ifm(); -void bchg_dd_ds_ifm(); -void movep_l_das_dd_ifm(); -void bchg_dd_ais_ifm(); -void bchg_dd_aips_ifm(); -void bchg_dd_pais_ifm(); -void bchg_dd_das_ifm(); -void bchg_dd_dais_ifm(); -void bchg_dd_adr16_ifm(); -void bchg_dd_adr32_ifm(); -void bclr_dd_ds_ifm(); -void movep_w_dd_das_ifm(); -void bclr_dd_ais_ifm(); -void bclr_dd_aips_ifm(); -void bclr_dd_pais_ifm(); -void bclr_dd_das_ifm(); -void bclr_dd_dais_ifm(); -void bclr_dd_adr16_ifm(); -void bclr_dd_adr32_ifm(); -void bset_dd_ds_ifm(); -void movep_l_dd_das_ifm(); -void bset_dd_ais_ifm(); -void bset_dd_aips_ifm(); -void bset_dd_pais_ifm(); -void bset_dd_das_ifm(); -void bset_dd_dais_ifm(); -void bset_dd_adr16_ifm(); -void bset_dd_adr32_ifm(); -void andi_b_imm8_ds_ifm(); -void andi_b_imm8_ais_ifm(); -void andi_b_imm8_aips_ifm(); -void andi_b_imm8_pais_ifm(); -void andi_b_imm8_das_ifm(); -void andi_b_imm8_dais_ifm(); -void andi_b_imm8_adr16_ifm(); -void andi_b_imm8_adr32_ifm(); -void andi_imm8_ccr_ifm(); -void andi_w_imm16_ds_ifm(); -void andi_w_imm16_ais_ifm(); -void andi_w_imm16_aips_ifm(); -void andi_w_imm16_pais_ifm(); -void andi_w_imm16_das_ifm(); -void andi_w_imm16_dais_ifm(); -void andi_w_imm16_adr16_ifm(); -void andi_w_imm16_adr32_ifm(); -void andi_i16u_sr_ifm(); -void andi_l_imm32_ds_ifm(); -void andi_l_imm32_ais_ifm(); -void andi_l_imm32_aips_ifm(); -void andi_l_imm32_pais_ifm(); -void andi_l_imm32_das_ifm(); -void andi_l_imm32_dais_ifm(); -void andi_l_imm32_adr16_ifm(); -void andi_l_imm32_adr32_ifm(); -void subi_b_imm8_ds_ifm(); -void subi_b_imm8_ais_ifm(); -void subi_b_imm8_aips_ifm(); -void subi_b_imm8_pais_ifm(); -void subi_b_imm8_das_ifm(); -void subi_b_imm8_dais_ifm(); -void subi_b_imm8_adr16_ifm(); -void subi_b_imm8_adr32_ifm(); -void subi_w_imm16_ds_ifm(); -void subi_w_imm16_ais_ifm(); -void subi_w_imm16_aips_ifm(); -void subi_w_imm16_pais_ifm(); -void subi_w_imm16_das_ifm(); -void subi_w_imm16_dais_ifm(); -void subi_w_imm16_adr16_ifm(); -void subi_w_imm16_adr32_ifm(); -void subi_l_imm32_ds_ifm(); -void subi_l_imm32_ais_ifm(); -void subi_l_imm32_aips_ifm(); -void subi_l_imm32_pais_ifm(); -void subi_l_imm32_das_ifm(); -void subi_l_imm32_dais_ifm(); -void subi_l_imm32_adr16_ifm(); -void subi_l_imm32_adr32_ifm(); -void addi_b_imm8_ds_ifm(); -void addi_b_imm8_ais_ifm(); -void addi_b_imm8_aips_ifm(); -void addi_b_imm8_pais_ifm(); -void addi_b_imm8_das_ifm(); -void addi_b_imm8_dais_ifm(); -void addi_b_imm8_adr16_ifm(); -void addi_b_imm8_adr32_ifm(); -void addi_w_imm16_ds_ifm(); -void addi_w_imm16_ais_ifm(); -void addi_w_imm16_aips_ifm(); -void addi_w_imm16_pais_ifm(); -void addi_w_imm16_das_ifm(); -void addi_w_imm16_dais_ifm(); -void addi_w_imm16_adr16_ifm(); -void addi_w_imm16_adr32_ifm(); -void addi_l_imm32_ds_ifm(); -void addi_l_imm32_ais_ifm(); -void addi_l_imm32_aips_ifm(); -void addi_l_imm32_pais_ifm(); -void addi_l_imm32_das_ifm(); -void addi_l_imm32_dais_ifm(); -void addi_l_imm32_adr16_ifm(); -void addi_l_imm32_adr32_ifm(); -void btst_imm8_ds_ifm(); -void btst_imm8_ais_ifm(); -void btst_imm8_aips_ifm(); -void btst_imm8_pais_ifm(); -void btst_imm8_das_ifm(); -void btst_imm8_dais_ifm(); -void btst_imm8_adr16_ifm(); -void btst_imm8_adr32_ifm(); -void btst_imm8_dpc_ifm(); -void btst_imm8_dpci_ifm(); -void bchg_imm8_ds_ifm(); -void bchg_imm8_ais_ifm(); -void bchg_imm8_aips_ifm(); -void bchg_imm8_pais_ifm(); -void bchg_imm8_das_ifm(); -void bchg_imm8_dais_ifm(); -void bchg_imm8_adr16_ifm(); -void bchg_imm8_adr32_ifm(); -void bclr_imm8_ds_ifm(); -void bclr_imm8_ais_ifm(); -void bclr_imm8_aips_ifm(); -void bclr_imm8_pais_ifm(); -void bclr_imm8_das_ifm(); -void bclr_imm8_dais_ifm(); -void bclr_imm8_adr16_ifm(); -void bclr_imm8_adr32_ifm(); -void bset_imm8_ds_ifm(); -void bset_imm8_ais_ifm(); -void bset_imm8_aips_ifm(); -void bset_imm8_pais_ifm(); -void bset_imm8_das_ifm(); -void bset_imm8_dais_ifm(); -void bset_imm8_adr16_ifm(); -void bset_imm8_adr32_ifm(); -void eori_b_imm8_ds_ifm(); -void eori_b_imm8_ais_ifm(); -void eori_b_imm8_aips_ifm(); -void eori_b_imm8_pais_ifm(); -void eori_b_imm8_das_ifm(); -void eori_b_imm8_dais_ifm(); -void eori_b_imm8_adr16_ifm(); -void eori_b_imm8_adr32_ifm(); -void eori_imm8_ccr_ifm(); -void eori_w_imm16_ds_ifm(); -void eori_w_imm16_ais_ifm(); -void eori_w_imm16_aips_ifm(); -void eori_w_imm16_pais_ifm(); -void eori_w_imm16_das_ifm(); -void eori_w_imm16_dais_ifm(); -void eori_w_imm16_adr16_ifm(); -void eori_w_imm16_adr32_ifm(); -void eori_i16u_sr_ifm(); -void eori_l_imm32_ds_ifm(); -void eori_l_imm32_ais_ifm(); -void eori_l_imm32_aips_ifm(); -void eori_l_imm32_pais_ifm(); -void eori_l_imm32_das_ifm(); -void eori_l_imm32_dais_ifm(); -void eori_l_imm32_adr16_ifm(); -void eori_l_imm32_adr32_ifm(); -void cmpi_b_imm8_ds_ifm(); -void cmpi_b_imm8_ais_ifm(); -void cmpi_b_imm8_aips_ifm(); -void cmpi_b_imm8_pais_ifm(); -void cmpi_b_imm8_das_ifm(); -void cmpi_b_imm8_dais_ifm(); -void cmpi_b_imm8_adr16_ifm(); -void cmpi_b_imm8_adr32_ifm(); -void cmpi_w_imm16_ds_ifm(); -void cmpi_w_imm16_ais_ifm(); -void cmpi_w_imm16_aips_ifm(); -void cmpi_w_imm16_pais_ifm(); -void cmpi_w_imm16_das_ifm(); -void cmpi_w_imm16_dais_ifm(); -void cmpi_w_imm16_adr16_ifm(); -void cmpi_w_imm16_adr32_ifm(); -void cmpi_l_imm32_ds_ifm(); -void cmpi_l_imm32_ais_ifm(); -void cmpi_l_imm32_aips_ifm(); -void cmpi_l_imm32_pais_ifm(); -void cmpi_l_imm32_das_ifm(); -void cmpi_l_imm32_dais_ifm(); -void cmpi_l_imm32_adr16_ifm(); -void cmpi_l_imm32_adr32_ifm(); -void move_b_ds_dd_ifm(); -void move_b_ais_dd_ifm(); -void move_b_aips_dd_ifm(); -void move_b_pais_dd_ifm(); -void move_b_das_dd_ifm(); -void move_b_dais_dd_ifm(); -void move_b_adr16_dd_ifm(); -void move_b_adr32_dd_ifm(); -void move_b_dpc_dd_ifm(); -void move_b_dpci_dd_ifm(); -void move_b_imm8_dd_ifm(); -void move_b_ds_aid_ifm(); -void move_b_ais_aid_ifm(); -void move_b_aips_aid_ifm(); -void move_b_pais_aid_ifm(); -void move_b_das_aid_ifm(); -void move_b_dais_aid_ifm(); -void move_b_adr16_aid_ifm(); -void move_b_adr32_aid_ifm(); -void move_b_dpc_aid_ifm(); -void move_b_dpci_aid_ifm(); -void move_b_imm8_aid_ifm(); -void move_b_ds_aipd_ifm(); -void move_b_ais_aipd_ifm(); -void move_b_aips_aipd_ifm(); -void move_b_pais_aipd_ifm(); -void move_b_das_aipd_ifm(); -void move_b_dais_aipd_ifm(); -void move_b_adr16_aipd_ifm(); -void move_b_adr32_aipd_ifm(); -void move_b_dpc_aipd_ifm(); -void move_b_dpci_aipd_ifm(); -void move_b_imm8_aipd_ifm(); -void move_b_ds_paid_ifm(); -void move_b_ais_paid_ifm(); -void move_b_aips_paid_ifm(); -void move_b_pais_paid_ifm(); -void move_b_das_paid_ifm(); -void move_b_dais_paid_ifm(); -void move_b_adr16_paid_ifm(); -void move_b_adr32_paid_ifm(); -void move_b_dpc_paid_ifm(); -void move_b_dpci_paid_ifm(); -void move_b_imm8_paid_ifm(); -void move_b_ds_dad_ifm(); -void move_b_ais_dad_ifm(); -void move_b_aips_dad_ifm(); -void move_b_pais_dad_ifm(); -void move_b_das_dad_ifm(); -void move_b_dais_dad_ifm(); -void move_b_adr16_dad_ifm(); -void move_b_adr32_dad_ifm(); -void move_b_dpc_dad_ifm(); -void move_b_dpci_dad_ifm(); -void move_b_imm8_dad_ifm(); -void move_b_ds_daid_ifm(); -void move_b_ais_daid_ifm(); -void move_b_aips_daid_ifm(); -void move_b_pais_daid_ifm(); -void move_b_das_daid_ifm(); -void move_b_dais_daid_ifm(); -void move_b_adr16_daid_ifm(); -void move_b_adr32_daid_ifm(); -void move_b_dpc_daid_ifm(); -void move_b_dpci_daid_ifm(); -void move_b_imm8_daid_ifm(); -void move_b_ds_adr16_ifm(); -void move_b_ais_adr16_ifm(); -void move_b_aips_adr16_ifm(); -void move_b_pais_adr16_ifm(); -void move_b_das_adr16_ifm(); -void move_b_dais_adr16_ifm(); -void move_b_adr16_adr16_ifm(); -void move_b_adr32_adr16_ifm(); -void move_b_dpc_adr16_ifm(); -void move_b_dpci_adr16_ifm(); -void move_b_imm8_adr16_ifm(); -void move_b_ds_adr32_ifm(); -void move_b_ais_adr32_ifm(); -void move_b_aips_adr32_ifm(); -void move_b_pais_adr32_ifm(); -void move_b_das_adr32_ifm(); -void move_b_dais_adr32_ifm(); -void move_b_adr16_adr32_ifm(); -void move_b_adr32_adr32_ifm(); -void move_b_dpc_adr32_ifm(); -void move_b_dpci_adr32_ifm(); -void move_b_imm8_adr32_ifm(); -void move_l_ds_dd_ifm(); -void move_l_as_dd_ifm(); -void move_l_ais_dd_ifm(); -void move_l_aips_dd_ifm(); -void move_l_pais_dd_ifm(); -void move_l_das_dd_ifm(); -void move_l_dais_dd_ifm(); -void move_l_adr16_dd_ifm(); -void move_l_adr32_dd_ifm(); -void move_l_dpc_dd_ifm(); -void move_l_dpci_dd_ifm(); -void move_l_imm32_dd_ifm(); -void movea_l_ds_ad_ifm(); -void movea_l_as_ad_ifm(); -void movea_l_ais_ad_ifm(); -void movea_l_aips_ad_ifm(); -void movea_l_pais_ad_ifm(); -void movea_l_das_ad_ifm(); -void movea_l_dais_ad_ifm(); -void movea_l_adr16_ad_ifm(); -void movea_l_adr32_ad_ifm(); -void movea_l_dpc_ad_ifm(); -void movea_l_dpci_ad_ifm(); -void movea_l_imm32_ad_ifm(); -void move_l_ds_aid_ifm(); -void move_l_as_aid_ifm(); -void move_l_ais_aid_ifm(); -void move_l_aips_aid_ifm(); -void move_l_pais_aid_ifm(); -void move_l_das_aid_ifm(); -void move_l_dais_aid_ifm(); -void move_l_adr16_aid_ifm(); -void move_l_adr32_aid_ifm(); -void move_l_dpc_aid_ifm(); -void move_l_dpci_aid_ifm(); -void move_l_imm32_aid_ifm(); -void move_l_ds_aipd_ifm(); -void move_l_as_aipd_ifm(); -void move_l_ais_aipd_ifm(); -void move_l_aips_aipd_ifm(); -void move_l_pais_aipd_ifm(); -void move_l_das_aipd_ifm(); -void move_l_dais_aipd_ifm(); -void move_l_adr16_aipd_ifm(); -void move_l_adr32_aipd_ifm(); -void move_l_dpc_aipd_ifm(); -void move_l_dpci_aipd_ifm(); -void move_l_imm32_aipd_ifm(); -void move_l_ds_paid_ifm(); -void move_l_as_paid_ifm(); -void move_l_ais_paid_ifm(); -void move_l_aips_paid_ifm(); -void move_l_pais_paid_ifm(); -void move_l_das_paid_ifm(); -void move_l_dais_paid_ifm(); -void move_l_adr16_paid_ifm(); -void move_l_adr32_paid_ifm(); -void move_l_dpc_paid_ifm(); -void move_l_dpci_paid_ifm(); -void move_l_imm32_paid_ifm(); -void move_l_ds_dad_ifm(); -void move_l_as_dad_ifm(); -void move_l_ais_dad_ifm(); -void move_l_aips_dad_ifm(); -void move_l_pais_dad_ifm(); -void move_l_das_dad_ifm(); -void move_l_dais_dad_ifm(); -void move_l_adr16_dad_ifm(); -void move_l_adr32_dad_ifm(); -void move_l_dpc_dad_ifm(); -void move_l_dpci_dad_ifm(); -void move_l_imm32_dad_ifm(); -void move_l_ds_daid_ifm(); -void move_l_as_daid_ifm(); -void move_l_ais_daid_ifm(); -void move_l_aips_daid_ifm(); -void move_l_pais_daid_ifm(); -void move_l_das_daid_ifm(); -void move_l_dais_daid_ifm(); -void move_l_adr16_daid_ifm(); -void move_l_adr32_daid_ifm(); -void move_l_dpc_daid_ifm(); -void move_l_dpci_daid_ifm(); -void move_l_imm32_daid_ifm(); -void move_l_ds_adr16_ifm(); -void move_l_as_adr16_ifm(); -void move_l_ais_adr16_ifm(); -void move_l_aips_adr16_ifm(); -void move_l_pais_adr16_ifm(); -void move_l_das_adr16_ifm(); -void move_l_dais_adr16_ifm(); -void move_l_adr16_adr16_ifm(); -void move_l_adr32_adr16_ifm(); -void move_l_dpc_adr16_ifm(); -void move_l_dpci_adr16_ifm(); -void move_l_imm32_adr16_ifm(); -void move_l_ds_adr32_ifm(); -void move_l_as_adr32_ifm(); -void move_l_ais_adr32_ifm(); -void move_l_aips_adr32_ifm(); -void move_l_pais_adr32_ifm(); -void move_l_das_adr32_ifm(); -void move_l_dais_adr32_ifm(); -void move_l_adr16_adr32_ifm(); -void move_l_adr32_adr32_ifm(); -void move_l_dpc_adr32_ifm(); -void move_l_dpci_adr32_ifm(); -void move_l_imm32_adr32_ifm(); -void move_w_ds_dd_ifm(); -void move_w_as_dd_ifm(); -void move_w_ais_dd_ifm(); -void move_w_aips_dd_ifm(); -void move_w_pais_dd_ifm(); -void move_w_das_dd_ifm(); -void move_w_dais_dd_ifm(); -void move_w_adr16_dd_ifm(); -void move_w_adr32_dd_ifm(); -void move_w_dpc_dd_ifm(); -void move_w_dpci_dd_ifm(); -void move_w_imm16_dd_ifm(); -void movea_w_ds_ad_ifm(); -void movea_w_as_ad_ifm(); -void movea_w_ais_ad_ifm(); -void movea_w_aips_ad_ifm(); -void movea_w_pais_ad_ifm(); -void movea_w_das_ad_ifm(); -void movea_w_dais_ad_ifm(); -void movea_w_adr16_ad_ifm(); -void movea_w_adr32_ad_ifm(); -void movea_w_dpc_ad_ifm(); -void movea_w_dpci_ad_ifm(); -void movea_w_imm16_ad_ifm(); -void move_w_ds_aid_ifm(); -void move_w_as_aid_ifm(); -void move_w_ais_aid_ifm(); -void move_w_aips_aid_ifm(); -void move_w_pais_aid_ifm(); -void move_w_das_aid_ifm(); -void move_w_dais_aid_ifm(); -void move_w_adr16_aid_ifm(); -void move_w_adr32_aid_ifm(); -void move_w_dpc_aid_ifm(); -void move_w_dpci_aid_ifm(); -void move_w_imm16_aid_ifm(); -void move_w_ds_aipd_ifm(); -void move_w_as_aipd_ifm(); -void move_w_ais_aipd_ifm(); -void move_w_aips_aipd_ifm(); -void move_w_pais_aipd_ifm(); -void move_w_das_aipd_ifm(); -void move_w_dais_aipd_ifm(); -void move_w_adr16_aipd_ifm(); -void move_w_adr32_aipd_ifm(); -void move_w_dpc_aipd_ifm(); -void move_w_dpci_aipd_ifm(); -void move_w_imm16_aipd_ifm(); -void move_w_ds_paid_ifm(); -void move_w_as_paid_ifm(); -void move_w_ais_paid_ifm(); -void move_w_aips_paid_ifm(); -void move_w_pais_paid_ifm(); -void move_w_das_paid_ifm(); -void move_w_dais_paid_ifm(); -void move_w_adr16_paid_ifm(); -void move_w_adr32_paid_ifm(); -void move_w_dpc_paid_ifm(); -void move_w_dpci_paid_ifm(); -void move_w_imm16_paid_ifm(); -void move_w_ds_dad_ifm(); -void move_w_as_dad_ifm(); -void move_w_ais_dad_ifm(); -void move_w_aips_dad_ifm(); -void move_w_pais_dad_ifm(); -void move_w_das_dad_ifm(); -void move_w_dais_dad_ifm(); -void move_w_adr16_dad_ifm(); -void move_w_adr32_dad_ifm(); -void move_w_dpc_dad_ifm(); -void move_w_dpci_dad_ifm(); -void move_w_imm16_dad_ifm(); -void move_w_ds_daid_ifm(); -void move_w_as_daid_ifm(); -void move_w_ais_daid_ifm(); -void move_w_aips_daid_ifm(); -void move_w_pais_daid_ifm(); -void move_w_das_daid_ifm(); -void move_w_dais_daid_ifm(); -void move_w_adr16_daid_ifm(); -void move_w_adr32_daid_ifm(); -void move_w_dpc_daid_ifm(); -void move_w_dpci_daid_ifm(); -void move_w_imm16_daid_ifm(); -void move_w_ds_adr16_ifm(); -void move_w_as_adr16_ifm(); -void move_w_ais_adr16_ifm(); -void move_w_aips_adr16_ifm(); -void move_w_pais_adr16_ifm(); -void move_w_das_adr16_ifm(); -void move_w_dais_adr16_ifm(); -void move_w_adr16_adr16_ifm(); -void move_w_adr32_adr16_ifm(); -void move_w_dpc_adr16_ifm(); -void move_w_dpci_adr16_ifm(); -void move_w_imm16_adr16_ifm(); -void move_w_ds_adr32_ifm(); -void move_w_as_adr32_ifm(); -void move_w_ais_adr32_ifm(); -void move_w_aips_adr32_ifm(); -void move_w_pais_adr32_ifm(); -void move_w_das_adr32_ifm(); -void move_w_dais_adr32_ifm(); -void move_w_adr16_adr32_ifm(); -void move_w_adr32_adr32_ifm(); -void move_w_dpc_adr32_ifm(); -void move_w_dpci_adr32_ifm(); -void move_w_imm16_adr32_ifm(); -void negx_b_ds_ifm(); -void negx_b_ais_ifm(); -void negx_b_aips_ifm(); -void negx_b_pais_ifm(); -void negx_b_das_ifm(); -void negx_b_dais_ifm(); -void negx_b_adr16_ifm(); -void negx_b_adr32_ifm(); -void negx_w_ds_ifm(); -void negx_w_ais_ifm(); -void negx_w_aips_ifm(); -void negx_w_pais_ifm(); -void negx_w_das_ifm(); -void negx_w_dais_ifm(); -void negx_w_adr16_ifm(); -void negx_w_adr32_ifm(); -void negx_l_ds_ifm(); -void negx_l_ais_ifm(); -void negx_l_aips_ifm(); -void negx_l_pais_ifm(); -void negx_l_das_ifm(); -void negx_l_dais_ifm(); -void negx_l_adr16_ifm(); -void negx_l_adr32_ifm(); -void move_sr_ds_ifm(); -void move_sr_ais_ifm(); -void move_sr_aips_ifm(); -void move_sr_pais_ifm(); -void move_sr_das_ifm(); -void move_sr_dais_ifm(); -void move_sr_adr16_ifm(); -void move_sr_adr32_ifm(); -void chk_w_ds_dd_ifm(); -void chk_w_ais_dd_ifm(); -void chk_w_aips_dd_ifm(); -void chk_w_pais_dd_ifm(); -void chk_w_das_dd_ifm(); -void chk_w_dais_dd_ifm(); -void chk_w_adr16_dd_ifm(); -void chk_w_adr32_dd_ifm(); -void chk_w_dpc_dd_ifm(); -void chk_w_dpci_dd_ifm(); -void chk_w_imm16_dd_ifm(); -void lea_ais_ad_ifm(); -void lea_das_ad_ifm(); -void lea_dais_ad_ifm(); -void lea_adr16_ad_ifm(); -void lea_adr32_ad_ifm(); -void lea_dpc_ad_ifm(); -void lea_dpci_ad_ifm(); -void clr_b_ds_ifm(); -void clr_b_ais_ifm(); -void clr_b_aips_ifm(); -void clr_b_pais_ifm(); -void clr_b_das_ifm(); -void clr_b_dais_ifm(); -void clr_b_adr16_ifm(); -void clr_b_adr32_ifm(); -void clr_w_ds_ifm(); -void clr_w_ais_ifm(); -void clr_w_aips_ifm(); -void clr_w_pais_ifm(); -void clr_w_das_ifm(); -void clr_w_dais_ifm(); -void clr_w_adr16_ifm(); -void clr_w_adr32_ifm(); -void clr_l_ds_ifm(); -void clr_l_ais_ifm(); -void clr_l_aips_ifm(); -void clr_l_pais_ifm(); -void clr_l_das_ifm(); -void clr_l_dais_ifm(); -void clr_l_adr16_ifm(); -void clr_l_adr32_ifm(); -void neg_b_ds_ifm(); -void neg_b_ais_ifm(); -void neg_b_aips_ifm(); -void neg_b_pais_ifm(); -void neg_b_das_ifm(); -void neg_b_dais_ifm(); -void neg_b_adr16_ifm(); -void neg_b_adr32_ifm(); -void neg_w_ds_ifm(); -void neg_w_ais_ifm(); -void neg_w_aips_ifm(); -void neg_w_pais_ifm(); -void neg_w_das_ifm(); -void neg_w_dais_ifm(); -void neg_w_adr16_ifm(); -void neg_w_adr32_ifm(); -void neg_l_ds_ifm(); -void neg_l_ais_ifm(); -void neg_l_aips_ifm(); -void neg_l_pais_ifm(); -void neg_l_das_ifm(); -void neg_l_dais_ifm(); -void neg_l_adr16_ifm(); -void neg_l_adr32_ifm(); -void move_ds_ccr_ifm(); -void move_ais_ccr_ifm(); -void move_aips_ccr_ifm(); -void move_pais_ccr_ifm(); -void move_das_ccr_ifm(); -void move_dais_ccr_ifm(); -void move_adr16_ccr_ifm(); -void move_adr32_ccr_ifm(); -void move_dpc_ccr_ifm(); -void move_dpci_ccr_ifm(); -void move_imm8_ccr_ifm(); -void not_b_ds_ifm(); -void not_b_ais_ifm(); -void not_b_aips_ifm(); -void not_b_pais_ifm(); -void not_b_das_ifm(); -void not_b_dais_ifm(); -void not_b_adr16_ifm(); -void not_b_adr32_ifm(); -void not_w_ds_ifm(); -void not_w_ais_ifm(); -void not_w_aips_ifm(); -void not_w_pais_ifm(); -void not_w_das_ifm(); -void not_w_dais_ifm(); -void not_w_adr16_ifm(); -void not_w_adr32_ifm(); -void not_l_ds_ifm(); -void not_l_ais_ifm(); -void not_l_aips_ifm(); -void not_l_pais_ifm(); -void not_l_das_ifm(); -void not_l_dais_ifm(); -void not_l_adr16_ifm(); -void not_l_adr32_ifm(); -void move_ds_sr_ifm(); -void move_ais_sr_ifm(); -void move_aips_sr_ifm(); -void move_pais_sr_ifm(); -void move_das_sr_ifm(); -void move_dais_sr_ifm(); -void move_adr16_sr_ifm(); -void move_adr32_sr_ifm(); -void move_dpc_sr_ifm(); -void move_dpci_sr_ifm(); -void move_i16u_sr_ifm(); -void nbcd_b_ds_ifm(); -void nbcd_b_ais_ifm(); -void nbcd_b_aips_ifm(); -void nbcd_b_pais_ifm(); -void nbcd_b_das_ifm(); -void nbcd_b_dais_ifm(); -void nbcd_b_adr16_ifm(); -void nbcd_b_adr32_ifm(); -void swap_ds_ifm(); -void pea_ais_ifm(); -void pea_das_ifm(); -void pea_dais_ifm(); -void pea_adr16_ifm(); -void pea_adr32_ifm(); -void pea_dpc_ifm(); -void pea_dpci_ifm(); -void ext_w_ds_ifm(); -void movem_w_list_ais_ifm(); -void movem_w_listp_pais_ifm(); -void movem_w_list_das_ifm(); -void movem_w_list_dais_ifm(); -void movem_w_list_adr16_ifm(); -void movem_w_list_adr32_ifm(); -void ext_l_ds_ifm(); -void movem_l_list_ais_ifm(); -void movem_l_listp_pais_ifm(); -void movem_l_list_das_ifm(); -void movem_l_list_dais_ifm(); -void movem_l_list_adr16_ifm(); -void movem_l_list_adr32_ifm(); -void tst_b_ds_ifm(); -void tst_b_ais_ifm(); -void tst_b_aips_ifm(); -void tst_b_pais_ifm(); -void tst_b_das_ifm(); -void tst_b_dais_ifm(); -void tst_b_adr16_ifm(); -void tst_b_adr32_ifm(); -void tst_w_ds_ifm(); -void tst_w_ais_ifm(); -void tst_w_aips_ifm(); -void tst_w_pais_ifm(); -void tst_w_das_ifm(); -void tst_w_dais_ifm(); -void tst_w_adr16_ifm(); -void tst_w_adr32_ifm(); -void tst_l_ds_ifm(); -void tst_l_ais_ifm(); -void tst_l_aips_ifm(); -void tst_l_pais_ifm(); -void tst_l_das_ifm(); -void tst_l_dais_ifm(); -void tst_l_adr16_ifm(); -void tst_l_adr32_ifm(); -void tas_ds_ifm(); -void tas_ais_ifm(); -void tas_aips_ifm(); -void tas_pais_ifm(); -void tas_das_ifm(); -void tas_dais_ifm(); -void tas_adr16_ifm(); -void tas_adr32_ifm(); -void movem_w_ais_list_ifm(); -void movem_w_aips_list_ifm(); -void movem_w_das_list_ifm(); -void movem_w_dais_list_ifm(); -void movem_w_adr16_list_ifm(); -void movem_w_adr32_list_ifm(); -void movem_w_dpc_list_ifm(); -void movem_w_dpci_list_ifm(); -void movem_l_ais_list_ifm(); -void movem_l_aips_list_ifm(); -void movem_l_das_list_ifm(); -void movem_l_dais_list_ifm(); -void movem_l_adr16_list_ifm(); -void movem_l_adr32_list_ifm(); -void movem_l_dpc_list_ifm(); -void movem_l_dpci_list_ifm(); -void trap_imm4_ifm(); -void link_as_imm16_ifm(); -void unlk_as_ifm(); -void move_as_usp_ifm(); -void move_usp_as_ifm(); -void reset_ifm(); -void nop_ifm(); -void stop_i16u_ifm(); -void rte_ifm(); -void rts_ifm(); -void trapv_ifm(); -void rtr_ifm(); -void jsr_ais_ifm(); -void jsr_das_ifm(); -void jsr_dais_ifm(); -void jsr_adr16_ifm(); -void jsr_adr32_ifm(); -void jsr_dpc_ifm(); -void jsr_dpci_ifm(); -void jmp_ais_ifm(); -void jmp_das_ifm(); -void jmp_dais_ifm(); -void jmp_adr16_ifm(); -void jmp_adr32_ifm(); -void jmp_dpc_ifm(); -void jmp_dpci_ifm(); -void addq_b_imm3_ds_ifm(); -void addq_b_imm3_ais_ifm(); -void addq_b_imm3_aips_ifm(); -void addq_b_imm3_pais_ifm(); -void addq_b_imm3_das_ifm(); -void addq_b_imm3_dais_ifm(); -void addq_b_imm3_adr16_ifm(); -void addq_b_imm3_adr32_ifm(); -void addq_w_imm3_ds_ifm(); -void addq_w_imm3_as_ifm(); -void addq_w_imm3_ais_ifm(); -void addq_w_imm3_aips_ifm(); -void addq_w_imm3_pais_ifm(); -void addq_w_imm3_das_ifm(); -void addq_w_imm3_dais_ifm(); -void addq_w_imm3_adr16_ifm(); -void addq_w_imm3_adr32_ifm(); -void addq_l_imm3_ds_ifm(); -void addq_l_imm3_as_ifm(); -void addq_l_imm3_ais_ifm(); -void addq_l_imm3_aips_ifm(); -void addq_l_imm3_pais_ifm(); -void addq_l_imm3_das_ifm(); -void addq_l_imm3_dais_ifm(); -void addq_l_imm3_adr16_ifm(); -void addq_l_imm3_adr32_ifm(); -void st_ds_ifm(); -void dbt_ds_rel16_ifm(); -void st_ais_ifm(); -void st_aips_ifm(); -void st_pais_ifm(); -void st_das_ifm(); -void st_dais_ifm(); -void st_adr16_ifm(); -void st_adr32_ifm(); -void subq_b_imm3_ds_ifm(); -void subq_b_imm3_ais_ifm(); -void subq_b_imm3_aips_ifm(); -void subq_b_imm3_pais_ifm(); -void subq_b_imm3_das_ifm(); -void subq_b_imm3_dais_ifm(); -void subq_b_imm3_adr16_ifm(); -void subq_b_imm3_adr32_ifm(); -void subq_w_imm3_ds_ifm(); -void subq_w_imm3_as_ifm(); -void subq_w_imm3_ais_ifm(); -void subq_w_imm3_aips_ifm(); -void subq_w_imm3_pais_ifm(); -void subq_w_imm3_das_ifm(); -void subq_w_imm3_dais_ifm(); -void subq_w_imm3_adr16_ifm(); -void subq_w_imm3_adr32_ifm(); -void subq_l_imm3_ds_ifm(); -void subq_l_imm3_as_ifm(); -void subq_l_imm3_ais_ifm(); -void subq_l_imm3_aips_ifm(); -void subq_l_imm3_pais_ifm(); -void subq_l_imm3_das_ifm(); -void subq_l_imm3_dais_ifm(); -void subq_l_imm3_adr16_ifm(); -void subq_l_imm3_adr32_ifm(); -void sf_ds_ifm(); -void dbra_ds_rel16_ifm(); -void sf_ais_ifm(); -void sf_aips_ifm(); -void sf_pais_ifm(); -void sf_das_ifm(); -void sf_dais_ifm(); -void sf_adr16_ifm(); -void sf_adr32_ifm(); -void shi_ds_ifm(); -void dbhi_ds_rel16_ifm(); -void shi_ais_ifm(); -void shi_aips_ifm(); -void shi_pais_ifm(); -void shi_das_ifm(); -void shi_dais_ifm(); -void shi_adr16_ifm(); -void shi_adr32_ifm(); -void sls_ds_ifm(); -void dbls_ds_rel16_ifm(); -void sls_ais_ifm(); -void sls_aips_ifm(); -void sls_pais_ifm(); -void sls_das_ifm(); -void sls_dais_ifm(); -void sls_adr16_ifm(); -void sls_adr32_ifm(); -void scc_ds_ifm(); -void dbcc_ds_rel16_ifm(); -void scc_ais_ifm(); -void scc_aips_ifm(); -void scc_pais_ifm(); -void scc_das_ifm(); -void scc_dais_ifm(); -void scc_adr16_ifm(); -void scc_adr32_ifm(); -void scs_ds_ifm(); -void dbcs_ds_rel16_ifm(); -void scs_ais_ifm(); -void scs_aips_ifm(); -void scs_pais_ifm(); -void scs_das_ifm(); -void scs_dais_ifm(); -void scs_adr16_ifm(); -void scs_adr32_ifm(); -void sne_ds_ifm(); -void dbne_ds_rel16_ifm(); -void sne_ais_ifm(); -void sne_aips_ifm(); -void sne_pais_ifm(); -void sne_das_ifm(); -void sne_dais_ifm(); -void sne_adr16_ifm(); -void sne_adr32_ifm(); -void seq_ds_ifm(); -void dbeq_ds_rel16_ifm(); -void seq_ais_ifm(); -void seq_aips_ifm(); -void seq_pais_ifm(); -void seq_das_ifm(); -void seq_dais_ifm(); -void seq_adr16_ifm(); -void seq_adr32_ifm(); -void svc_ds_ifm(); -void dbvc_ds_rel16_ifm(); -void svc_ais_ifm(); -void svc_aips_ifm(); -void svc_pais_ifm(); -void svc_das_ifm(); -void svc_dais_ifm(); -void svc_adr16_ifm(); -void svc_adr32_ifm(); -void svs_ds_ifm(); -void dbvs_ds_rel16_ifm(); -void svs_ais_ifm(); -void svs_aips_ifm(); -void svs_pais_ifm(); -void svs_das_ifm(); -void svs_dais_ifm(); -void svs_adr16_ifm(); -void svs_adr32_ifm(); -void spl_ds_ifm(); -void dbpl_ds_rel16_ifm(); -void spl_ais_ifm(); -void spl_aips_ifm(); -void spl_pais_ifm(); -void spl_das_ifm(); -void spl_dais_ifm(); -void spl_adr16_ifm(); -void spl_adr32_ifm(); -void smi_ds_ifm(); -void dbmi_ds_rel16_ifm(); -void smi_ais_ifm(); -void smi_aips_ifm(); -void smi_pais_ifm(); -void smi_das_ifm(); -void smi_dais_ifm(); -void smi_adr16_ifm(); -void smi_adr32_ifm(); -void sge_ds_ifm(); -void dbge_ds_rel16_ifm(); -void sge_ais_ifm(); -void sge_aips_ifm(); -void sge_pais_ifm(); -void sge_das_ifm(); -void sge_dais_ifm(); -void sge_adr16_ifm(); -void sge_adr32_ifm(); -void slt_ds_ifm(); -void dblt_ds_rel16_ifm(); -void slt_ais_ifm(); -void slt_aips_ifm(); -void slt_pais_ifm(); -void slt_das_ifm(); -void slt_dais_ifm(); -void slt_adr16_ifm(); -void slt_adr32_ifm(); -void sgt_ds_ifm(); -void dbgt_ds_rel16_ifm(); -void sgt_ais_ifm(); -void sgt_aips_ifm(); -void sgt_pais_ifm(); -void sgt_das_ifm(); -void sgt_dais_ifm(); -void sgt_adr16_ifm(); -void sgt_adr32_ifm(); -void sle_ds_ifm(); -void dble_ds_rel16_ifm(); -void sle_ais_ifm(); -void sle_aips_ifm(); -void sle_pais_ifm(); -void sle_das_ifm(); -void sle_dais_ifm(); -void sle_adr16_ifm(); -void sle_adr32_ifm(); -void bra_rel16_ifm(); -void bra_rel8_ifm(); -void bsr_rel16_ifm(); -void bsr_rel8_ifm(); -void bhi_rel16_ifm(); -void bhi_rel8_ifm(); -void bls_rel16_ifm(); -void bls_rel8_ifm(); -void bcc_rel16_ifm(); -void bcc_rel8_ifm(); -void bcs_rel16_ifm(); -void bcs_rel8_ifm(); -void bne_rel16_ifm(); -void bne_rel8_ifm(); -void beq_rel16_ifm(); -void beq_rel8_ifm(); -void bvc_rel16_ifm(); -void bvc_rel8_ifm(); -void bvs_rel16_ifm(); -void bvs_rel8_ifm(); -void bpl_rel16_ifm(); -void bpl_rel8_ifm(); -void bmi_rel16_ifm(); -void bmi_rel8_ifm(); -void bge_rel16_ifm(); -void bge_rel8_ifm(); -void blt_rel16_ifm(); -void blt_rel8_ifm(); -void bgt_rel16_ifm(); -void bgt_rel8_ifm(); -void ble_rel16_ifm(); -void ble_rel8_ifm(); -void moveq_imm8o_dd_ifm(); -void or_b_ds_dd_ifm(); -void or_b_ais_dd_ifm(); -void or_b_aips_dd_ifm(); -void or_b_pais_dd_ifm(); -void or_b_das_dd_ifm(); -void or_b_dais_dd_ifm(); -void or_b_adr16_dd_ifm(); -void or_b_adr32_dd_ifm(); -void or_b_dpc_dd_ifm(); -void or_b_dpci_dd_ifm(); -void or_b_imm8_dd_ifm(); -void or_w_ds_dd_ifm(); -void or_w_ais_dd_ifm(); -void or_w_aips_dd_ifm(); -void or_w_pais_dd_ifm(); -void or_w_das_dd_ifm(); -void or_w_dais_dd_ifm(); -void or_w_adr16_dd_ifm(); -void or_w_adr32_dd_ifm(); -void or_w_dpc_dd_ifm(); -void or_w_dpci_dd_ifm(); -void or_w_imm16_dd_ifm(); -void or_l_ds_dd_ifm(); -void or_l_ais_dd_ifm(); -void or_l_aips_dd_ifm(); -void or_l_pais_dd_ifm(); -void or_l_das_dd_ifm(); -void or_l_dais_dd_ifm(); -void or_l_adr16_dd_ifm(); -void or_l_adr32_dd_ifm(); -void or_l_dpc_dd_ifm(); -void or_l_dpci_dd_ifm(); -void or_l_imm32_dd_ifm(); -void divu_w_ds_dd_ifm(); -void divu_w_ais_dd_ifm(); -void divu_w_aips_dd_ifm(); -void divu_w_pais_dd_ifm(); -void divu_w_das_dd_ifm(); -void divu_w_dais_dd_ifm(); -void divu_w_adr16_dd_ifm(); -void divu_w_adr32_dd_ifm(); -void divu_w_dpc_dd_ifm(); -void divu_w_dpci_dd_ifm(); -void divu_w_imm16_dd_ifm(); -void sbcd_ds_dd_ifm(); -void sbcd_pais_paid_ifm(); -void or_b_dd_ais_ifm(); -void or_b_dd_aips_ifm(); -void or_b_dd_pais_ifm(); -void or_b_dd_das_ifm(); -void or_b_dd_dais_ifm(); -void or_b_dd_adr16_ifm(); -void or_b_dd_adr32_ifm(); -void or_w_dd_ais_ifm(); -void or_w_dd_aips_ifm(); -void or_w_dd_pais_ifm(); -void or_w_dd_das_ifm(); -void or_w_dd_dais_ifm(); -void or_w_dd_adr16_ifm(); -void or_w_dd_adr32_ifm(); -void or_l_dd_ais_ifm(); -void or_l_dd_aips_ifm(); -void or_l_dd_pais_ifm(); -void or_l_dd_das_ifm(); -void or_l_dd_dais_ifm(); -void or_l_dd_adr16_ifm(); -void or_l_dd_adr32_ifm(); -void divs_w_ds_dd_ifm(); -void divs_w_ais_dd_ifm(); -void divs_w_aips_dd_ifm(); -void divs_w_pais_dd_ifm(); -void divs_w_das_dd_ifm(); -void divs_w_dais_dd_ifm(); -void divs_w_adr16_dd_ifm(); -void divs_w_adr32_dd_ifm(); -void divs_w_dpc_dd_ifm(); -void divs_w_dpci_dd_ifm(); -void divs_w_imm16_dd_ifm(); -void sub_b_ds_dd_ifm(); -void sub_b_ais_dd_ifm(); -void sub_b_aips_dd_ifm(); -void sub_b_pais_dd_ifm(); -void sub_b_das_dd_ifm(); -void sub_b_dais_dd_ifm(); -void sub_b_adr16_dd_ifm(); -void sub_b_adr32_dd_ifm(); -void sub_b_dpc_dd_ifm(); -void sub_b_dpci_dd_ifm(); -void sub_b_imm8_dd_ifm(); -void sub_w_ds_dd_ifm(); -void sub_w_as_dd_ifm(); -void sub_w_ais_dd_ifm(); -void sub_w_aips_dd_ifm(); -void sub_w_pais_dd_ifm(); -void sub_w_das_dd_ifm(); -void sub_w_dais_dd_ifm(); -void sub_w_adr16_dd_ifm(); -void sub_w_adr32_dd_ifm(); -void sub_w_dpc_dd_ifm(); -void sub_w_dpci_dd_ifm(); -void sub_w_imm16_dd_ifm(); -void sub_l_ds_dd_ifm(); -void sub_l_as_dd_ifm(); -void sub_l_ais_dd_ifm(); -void sub_l_aips_dd_ifm(); -void sub_l_pais_dd_ifm(); -void sub_l_das_dd_ifm(); -void sub_l_dais_dd_ifm(); -void sub_l_adr16_dd_ifm(); -void sub_l_adr32_dd_ifm(); -void sub_l_dpc_dd_ifm(); -void sub_l_dpci_dd_ifm(); -void sub_l_imm32_dd_ifm(); -void suba_w_ds_ad_ifm(); -void suba_w_as_ad_ifm(); -void suba_w_ais_ad_ifm(); -void suba_w_aips_ad_ifm(); -void suba_w_pais_ad_ifm(); -void suba_w_das_ad_ifm(); -void suba_w_dais_ad_ifm(); -void suba_w_adr16_ad_ifm(); -void suba_w_adr32_ad_ifm(); -void suba_w_dpc_ad_ifm(); -void suba_w_dpci_ad_ifm(); -void suba_w_imm16_ad_ifm(); -void subx_b_ds_dd_ifm(); -void subx_b_pais_paid_ifm(); -void sub_b_dd_ais_ifm(); -void sub_b_dd_aips_ifm(); -void sub_b_dd_pais_ifm(); -void sub_b_dd_das_ifm(); -void sub_b_dd_dais_ifm(); -void sub_b_dd_adr16_ifm(); -void sub_b_dd_adr32_ifm(); -void subx_w_ds_dd_ifm(); -void subx_w_pais_paid_ifm(); -void sub_w_dd_ais_ifm(); -void sub_w_dd_aips_ifm(); -void sub_w_dd_pais_ifm(); -void sub_w_dd_das_ifm(); -void sub_w_dd_dais_ifm(); -void sub_w_dd_adr16_ifm(); -void sub_w_dd_adr32_ifm(); -void subx_l_ds_dd_ifm(); -void subx_l_pais_paid_ifm(); -void sub_l_dd_ais_ifm(); -void sub_l_dd_aips_ifm(); -void sub_l_dd_pais_ifm(); -void sub_l_dd_das_ifm(); -void sub_l_dd_dais_ifm(); -void sub_l_dd_adr16_ifm(); -void sub_l_dd_adr32_ifm(); -void suba_l_ds_ad_ifm(); -void suba_l_as_ad_ifm(); -void suba_l_ais_ad_ifm(); -void suba_l_aips_ad_ifm(); -void suba_l_pais_ad_ifm(); -void suba_l_das_ad_ifm(); -void suba_l_dais_ad_ifm(); -void suba_l_adr16_ad_ifm(); -void suba_l_adr32_ad_ifm(); -void suba_l_dpc_ad_ifm(); -void suba_l_dpci_ad_ifm(); -void suba_l_imm32_ad_ifm(); -void cmp_b_ds_dd_ifm(); -void cmp_b_ais_dd_ifm(); -void cmp_b_aips_dd_ifm(); -void cmp_b_pais_dd_ifm(); -void cmp_b_das_dd_ifm(); -void cmp_b_dais_dd_ifm(); -void cmp_b_adr16_dd_ifm(); -void cmp_b_adr32_dd_ifm(); -void cmp_b_dpc_dd_ifm(); -void cmp_b_dpci_dd_ifm(); -void cmp_b_imm8_dd_ifm(); -void cmp_w_ds_dd_ifm(); -void cmp_w_as_dd_ifm(); -void cmp_w_ais_dd_ifm(); -void cmp_w_aips_dd_ifm(); -void cmp_w_pais_dd_ifm(); -void cmp_w_das_dd_ifm(); -void cmp_w_dais_dd_ifm(); -void cmp_w_adr16_dd_ifm(); -void cmp_w_adr32_dd_ifm(); -void cmp_w_dpc_dd_ifm(); -void cmp_w_dpci_dd_ifm(); -void cmp_w_imm16_dd_ifm(); -void cmp_l_ds_dd_ifm(); -void cmp_l_as_dd_ifm(); -void cmp_l_ais_dd_ifm(); -void cmp_l_aips_dd_ifm(); -void cmp_l_pais_dd_ifm(); -void cmp_l_das_dd_ifm(); -void cmp_l_dais_dd_ifm(); -void cmp_l_adr16_dd_ifm(); -void cmp_l_adr32_dd_ifm(); -void cmp_l_dpc_dd_ifm(); -void cmp_l_dpci_dd_ifm(); -void cmp_l_imm32_dd_ifm(); -void cmpa_w_ds_ad_ifm(); -void cmpa_w_as_ad_ifm(); -void cmpa_w_ais_ad_ifm(); -void cmpa_w_aips_ad_ifm(); -void cmpa_w_pais_ad_ifm(); -void cmpa_w_das_ad_ifm(); -void cmpa_w_dais_ad_ifm(); -void cmpa_w_adr16_ad_ifm(); -void cmpa_w_adr32_ad_ifm(); -void cmpa_w_dpc_ad_ifm(); -void cmpa_w_dpci_ad_ifm(); -void cmpa_w_imm16_ad_ifm(); -void eor_b_dd_ds_ifm(); -void cmpm_b_aips_aipd_ifm(); -void eor_b_dd_ais_ifm(); -void eor_b_dd_aips_ifm(); -void eor_b_dd_pais_ifm(); -void eor_b_dd_das_ifm(); -void eor_b_dd_dais_ifm(); -void eor_b_dd_adr16_ifm(); -void eor_b_dd_adr32_ifm(); -void eor_w_dd_ds_ifm(); -void cmpm_w_aips_aipd_ifm(); -void eor_w_dd_ais_ifm(); -void eor_w_dd_aips_ifm(); -void eor_w_dd_pais_ifm(); -void eor_w_dd_das_ifm(); -void eor_w_dd_dais_ifm(); -void eor_w_dd_adr16_ifm(); -void eor_w_dd_adr32_ifm(); -void eor_l_dd_ds_ifm(); -void cmpm_l_aips_aipd_ifm(); -void eor_l_dd_ais_ifm(); -void eor_l_dd_aips_ifm(); -void eor_l_dd_pais_ifm(); -void eor_l_dd_das_ifm(); -void eor_l_dd_dais_ifm(); -void eor_l_dd_adr16_ifm(); -void eor_l_dd_adr32_ifm(); -void cmpa_l_ds_ad_ifm(); -void cmpa_l_as_ad_ifm(); -void cmpa_l_ais_ad_ifm(); -void cmpa_l_aips_ad_ifm(); -void cmpa_l_pais_ad_ifm(); -void cmpa_l_das_ad_ifm(); -void cmpa_l_dais_ad_ifm(); -void cmpa_l_adr16_ad_ifm(); -void cmpa_l_adr32_ad_ifm(); -void cmpa_l_dpc_ad_ifm(); -void cmpa_l_dpci_ad_ifm(); -void cmpa_l_imm32_ad_ifm(); -void and_b_ds_dd_ifm(); -void and_b_ais_dd_ifm(); -void and_b_aips_dd_ifm(); -void and_b_pais_dd_ifm(); -void and_b_das_dd_ifm(); -void and_b_dais_dd_ifm(); -void and_b_adr16_dd_ifm(); -void and_b_adr32_dd_ifm(); -void and_b_dpc_dd_ifm(); -void and_b_dpci_dd_ifm(); -void and_b_imm8_dd_ifm(); -void and_w_ds_dd_ifm(); -void and_w_ais_dd_ifm(); -void and_w_aips_dd_ifm(); -void and_w_pais_dd_ifm(); -void and_w_das_dd_ifm(); -void and_w_dais_dd_ifm(); -void and_w_adr16_dd_ifm(); -void and_w_adr32_dd_ifm(); -void and_w_dpc_dd_ifm(); -void and_w_dpci_dd_ifm(); -void and_w_imm16_dd_ifm(); -void and_l_ds_dd_ifm(); -void and_l_ais_dd_ifm(); -void and_l_aips_dd_ifm(); -void and_l_pais_dd_ifm(); -void and_l_das_dd_ifm(); -void and_l_dais_dd_ifm(); -void and_l_adr16_dd_ifm(); -void and_l_adr32_dd_ifm(); -void and_l_dpc_dd_ifm(); -void and_l_dpci_dd_ifm(); -void and_l_imm32_dd_ifm(); -void mulu_w_ds_dd_ifm(); -void mulu_w_ais_dd_ifm(); -void mulu_w_aips_dd_ifm(); -void mulu_w_pais_dd_ifm(); -void mulu_w_das_dd_ifm(); -void mulu_w_dais_dd_ifm(); -void mulu_w_adr16_dd_ifm(); -void mulu_w_adr32_dd_ifm(); -void mulu_w_dpc_dd_ifm(); -void mulu_w_dpci_dd_ifm(); -void mulu_w_imm16_dd_ifm(); -void abcd_ds_dd_ifm(); -void abcd_pais_paid_ifm(); -void and_b_dd_ais_ifm(); -void and_b_dd_aips_ifm(); -void and_b_dd_pais_ifm(); -void and_b_dd_das_ifm(); -void and_b_dd_dais_ifm(); -void and_b_dd_adr16_ifm(); -void and_b_dd_adr32_ifm(); -void exg_dd_ds_ifm(); -void exg_ad_as_ifm(); -void and_w_dd_ais_ifm(); -void and_w_dd_aips_ifm(); -void and_w_dd_pais_ifm(); -void and_w_dd_das_ifm(); -void and_w_dd_dais_ifm(); -void and_w_dd_adr16_ifm(); -void and_w_dd_adr32_ifm(); -void exg_dd_as_ifm(); -void and_l_dd_ais_ifm(); -void and_l_dd_aips_ifm(); -void and_l_dd_pais_ifm(); -void and_l_dd_das_ifm(); -void and_l_dd_dais_ifm(); -void and_l_dd_adr16_ifm(); -void and_l_dd_adr32_ifm(); -void muls_w_ds_dd_ifm(); -void muls_w_ais_dd_ifm(); -void muls_w_aips_dd_ifm(); -void muls_w_pais_dd_ifm(); -void muls_w_das_dd_ifm(); -void muls_w_dais_dd_ifm(); -void muls_w_adr16_dd_ifm(); -void muls_w_adr32_dd_ifm(); -void muls_w_dpc_dd_ifm(); -void muls_w_dpci_dd_ifm(); -void muls_w_imm16_dd_ifm(); -void add_b_ds_dd_ifm(); -void add_b_ais_dd_ifm(); -void add_b_aips_dd_ifm(); -void add_b_pais_dd_ifm(); -void add_b_das_dd_ifm(); -void add_b_dais_dd_ifm(); -void add_b_adr16_dd_ifm(); -void add_b_adr32_dd_ifm(); -void add_b_dpc_dd_ifm(); -void add_b_dpci_dd_ifm(); -void add_b_imm8_dd_ifm(); -void add_w_ds_dd_ifm(); -void add_w_as_dd_ifm(); -void add_w_ais_dd_ifm(); -void add_w_aips_dd_ifm(); -void add_w_pais_dd_ifm(); -void add_w_das_dd_ifm(); -void add_w_dais_dd_ifm(); -void add_w_adr16_dd_ifm(); -void add_w_adr32_dd_ifm(); -void add_w_dpc_dd_ifm(); -void add_w_dpci_dd_ifm(); -void add_w_imm16_dd_ifm(); -void add_l_ds_dd_ifm(); -void add_l_as_dd_ifm(); -void add_l_ais_dd_ifm(); -void add_l_aips_dd_ifm(); -void add_l_pais_dd_ifm(); -void add_l_das_dd_ifm(); -void add_l_dais_dd_ifm(); -void add_l_adr16_dd_ifm(); -void add_l_adr32_dd_ifm(); -void add_l_dpc_dd_ifm(); -void add_l_dpci_dd_ifm(); -void add_l_imm32_dd_ifm(); -void adda_w_ds_ad_ifm(); -void adda_w_as_ad_ifm(); -void adda_w_ais_ad_ifm(); -void adda_w_aips_ad_ifm(); -void adda_w_pais_ad_ifm(); -void adda_w_das_ad_ifm(); -void adda_w_dais_ad_ifm(); -void adda_w_adr16_ad_ifm(); -void adda_w_adr32_ad_ifm(); -void adda_w_dpc_ad_ifm(); -void adda_w_dpci_ad_ifm(); -void adda_w_imm16_ad_ifm(); -void addx_b_ds_dd_ifm(); -void addx_b_pais_paid_ifm(); -void add_b_dd_ais_ifm(); -void add_b_dd_aips_ifm(); -void add_b_dd_pais_ifm(); -void add_b_dd_das_ifm(); -void add_b_dd_dais_ifm(); -void add_b_dd_adr16_ifm(); -void add_b_dd_adr32_ifm(); -void addx_w_ds_dd_ifm(); -void addx_w_pais_paid_ifm(); -void add_w_dd_ais_ifm(); -void add_w_dd_aips_ifm(); -void add_w_dd_pais_ifm(); -void add_w_dd_das_ifm(); -void add_w_dd_dais_ifm(); -void add_w_dd_adr16_ifm(); -void add_w_dd_adr32_ifm(); -void addx_l_ds_dd_ifm(); -void addx_l_pais_paid_ifm(); -void add_l_dd_ais_ifm(); -void add_l_dd_aips_ifm(); -void add_l_dd_pais_ifm(); -void add_l_dd_das_ifm(); -void add_l_dd_dais_ifm(); -void add_l_dd_adr16_ifm(); -void add_l_dd_adr32_ifm(); -void adda_l_ds_ad_ifm(); -void adda_l_as_ad_ifm(); -void adda_l_ais_ad_ifm(); -void adda_l_aips_ad_ifm(); -void adda_l_pais_ad_ifm(); -void adda_l_das_ad_ifm(); -void adda_l_dais_ad_ifm(); -void adda_l_adr16_ad_ifm(); -void adda_l_adr32_ad_ifm(); -void adda_l_dpc_ad_ifm(); -void adda_l_dpci_ad_ifm(); -void adda_l_imm32_ad_ifm(); -void asr_b_imm3_ds_ifm(); -void lsr_b_imm3_ds_ifm(); -void roxr_b_imm3_ds_ifm(); -void ror_b_imm3_ds_ifm(); -void asr_b_dd_ds_ifm(); -void lsr_b_dd_ds_ifm(); -void roxr_b_dd_ds_ifm(); -void ror_b_dd_ds_ifm(); -void asr_w_imm3_ds_ifm(); -void lsr_w_imm3_ds_ifm(); -void roxr_w_imm3_ds_ifm(); -void ror_w_imm3_ds_ifm(); -void asr_w_dd_ds_ifm(); -void lsr_w_dd_ds_ifm(); -void roxr_w_dd_ds_ifm(); -void ror_w_dd_ds_ifm(); -void asr_l_imm3_ds_ifm(); -void lsr_l_imm3_ds_ifm(); -void roxr_l_imm3_ds_ifm(); -void ror_l_imm3_ds_ifm(); -void asr_l_dd_ds_ifm(); -void lsr_l_dd_ds_ifm(); -void roxr_l_dd_ds_ifm(); -void ror_l_dd_ds_ifm(); -void asr_ais_ifm(); -void asr_aips_ifm(); -void asr_pais_ifm(); -void asr_das_ifm(); -void asr_dais_ifm(); -void asr_adr16_ifm(); -void asr_adr32_ifm(); -void asl_b_imm3_ds_ifm(); -void lsl_b_imm3_ds_ifm(); -void roxl_b_imm3_ds_ifm(); -void rol_b_imm3_ds_ifm(); -void asl_b_dd_ds_ifm(); -void lsl_b_dd_ds_ifm(); -void roxl_b_dd_ds_ifm(); -void rol_b_dd_ds_ifm(); -void asl_w_imm3_ds_ifm(); -void lsl_w_imm3_ds_ifm(); -void roxl_w_imm3_ds_ifm(); -void rol_w_imm3_ds_ifm(); -void asl_w_dd_ds_ifm(); -void lsl_w_dd_ds_ifm(); -void roxl_w_dd_ds_ifm(); -void rol_w_dd_ds_ifm(); -void asl_l_imm3_ds_ifm(); -void lsl_l_imm3_ds_ifm(); -void roxl_l_imm3_ds_ifm(); -void rol_l_imm3_ds_ifm(); -void asl_l_dd_ds_ifm(); -void lsl_l_dd_ds_ifm(); -void roxl_l_dd_ds_ifm(); -void rol_l_dd_ds_ifm(); -void asl_ais_ifm(); -void asl_aips_ifm(); -void asl_pais_ifm(); -void asl_das_ifm(); -void asl_dais_ifm(); -void asl_adr16_ifm(); -void asl_adr32_ifm(); -void lsr_ais_ifm(); -void lsr_aips_ifm(); -void lsr_pais_ifm(); -void lsr_das_ifm(); -void lsr_dais_ifm(); -void lsr_adr16_ifm(); -void lsr_adr32_ifm(); -void lsl_ais_ifm(); -void lsl_aips_ifm(); -void lsl_pais_ifm(); -void lsl_das_ifm(); -void lsl_dais_ifm(); -void lsl_adr16_ifm(); -void lsl_adr32_ifm(); -void roxr_ais_ifm(); -void roxr_aips_ifm(); -void roxr_pais_ifm(); -void roxr_das_ifm(); -void roxr_dais_ifm(); -void roxr_adr16_ifm(); -void roxr_adr32_ifm(); -void roxl_ais_ifm(); -void roxl_aips_ifm(); -void roxl_pais_ifm(); -void roxl_das_ifm(); -void roxl_dais_ifm(); -void roxl_adr16_ifm(); -void roxl_adr32_ifm(); -void ror_ais_ifm(); -void ror_aips_ifm(); -void ror_pais_ifm(); -void ror_das_ifm(); -void ror_dais_ifm(); -void ror_adr16_ifm(); -void ror_adr32_ifm(); -void rol_ais_ifm(); -void rol_aips_ifm(); -void rol_pais_ifm(); -void rol_das_ifm(); -void rol_dais_ifm(); -void rol_adr16_ifm(); -void rol_adr32_ifm(); -void state_reset_dpm(); -void state_bus_error_dpm(); -void state_address_error_dpm(); -void state_double_fault_dpm(); -void state_illegal_dpm(); -void state_priviledge_dpm(); -void state_trace_dpm(); -void state_linea_dpm(); -void state_linef_dpm(); -void state_interrupt_dpm(); -void ori_b_imm8_ds_dpm(); -void ori_b_imm8_ais_dpm(); -void ori_b_imm8_aips_dpm(); -void ori_b_imm8_pais_dpm(); -void ori_b_imm8_das_dpm(); -void ori_b_imm8_dais_dpm(); -void ori_b_imm8_adr16_dpm(); -void ori_b_imm8_adr32_dpm(); -void ori_imm8_ccr_dpm(); -void ori_w_imm16_ds_dpm(); -void ori_w_imm16_ais_dpm(); -void ori_w_imm16_aips_dpm(); -void ori_w_imm16_pais_dpm(); -void ori_w_imm16_das_dpm(); -void ori_w_imm16_dais_dpm(); -void ori_w_imm16_adr16_dpm(); -void ori_w_imm16_adr32_dpm(); -void ori_i16u_sr_dpm(); -void ori_l_imm32_ds_dpm(); -void ori_l_imm32_ais_dpm(); -void ori_l_imm32_aips_dpm(); -void ori_l_imm32_pais_dpm(); -void ori_l_imm32_das_dpm(); -void ori_l_imm32_dais_dpm(); -void ori_l_imm32_adr16_dpm(); -void ori_l_imm32_adr32_dpm(); -void btst_dd_ds_dpm(); -void movep_w_das_dd_dpm(); -void btst_dd_ais_dpm(); -void btst_dd_aips_dpm(); -void btst_dd_pais_dpm(); -void btst_dd_das_dpm(); -void btst_dd_dais_dpm(); -void btst_dd_adr16_dpm(); -void btst_dd_adr32_dpm(); -void btst_dd_dpc_dpm(); -void btst_dd_dpci_dpm(); -void btst_dd_imm_dpm(); -void bchg_dd_ds_dpm(); -void movep_l_das_dd_dpm(); -void bchg_dd_ais_dpm(); -void bchg_dd_aips_dpm(); -void bchg_dd_pais_dpm(); -void bchg_dd_das_dpm(); -void bchg_dd_dais_dpm(); -void bchg_dd_adr16_dpm(); -void bchg_dd_adr32_dpm(); -void bclr_dd_ds_dpm(); -void movep_w_dd_das_dpm(); -void bclr_dd_ais_dpm(); -void bclr_dd_aips_dpm(); -void bclr_dd_pais_dpm(); -void bclr_dd_das_dpm(); -void bclr_dd_dais_dpm(); -void bclr_dd_adr16_dpm(); -void bclr_dd_adr32_dpm(); -void bset_dd_ds_dpm(); -void movep_l_dd_das_dpm(); -void bset_dd_ais_dpm(); -void bset_dd_aips_dpm(); -void bset_dd_pais_dpm(); -void bset_dd_das_dpm(); -void bset_dd_dais_dpm(); -void bset_dd_adr16_dpm(); -void bset_dd_adr32_dpm(); -void andi_b_imm8_ds_dpm(); -void andi_b_imm8_ais_dpm(); -void andi_b_imm8_aips_dpm(); -void andi_b_imm8_pais_dpm(); -void andi_b_imm8_das_dpm(); -void andi_b_imm8_dais_dpm(); -void andi_b_imm8_adr16_dpm(); -void andi_b_imm8_adr32_dpm(); -void andi_imm8_ccr_dpm(); -void andi_w_imm16_ds_dpm(); -void andi_w_imm16_ais_dpm(); -void andi_w_imm16_aips_dpm(); -void andi_w_imm16_pais_dpm(); -void andi_w_imm16_das_dpm(); -void andi_w_imm16_dais_dpm(); -void andi_w_imm16_adr16_dpm(); -void andi_w_imm16_adr32_dpm(); -void andi_i16u_sr_dpm(); -void andi_l_imm32_ds_dpm(); -void andi_l_imm32_ais_dpm(); -void andi_l_imm32_aips_dpm(); -void andi_l_imm32_pais_dpm(); -void andi_l_imm32_das_dpm(); -void andi_l_imm32_dais_dpm(); -void andi_l_imm32_adr16_dpm(); -void andi_l_imm32_adr32_dpm(); -void subi_b_imm8_ds_dpm(); -void subi_b_imm8_ais_dpm(); -void subi_b_imm8_aips_dpm(); -void subi_b_imm8_pais_dpm(); -void subi_b_imm8_das_dpm(); -void subi_b_imm8_dais_dpm(); -void subi_b_imm8_adr16_dpm(); -void subi_b_imm8_adr32_dpm(); -void subi_w_imm16_ds_dpm(); -void subi_w_imm16_ais_dpm(); -void subi_w_imm16_aips_dpm(); -void subi_w_imm16_pais_dpm(); -void subi_w_imm16_das_dpm(); -void subi_w_imm16_dais_dpm(); -void subi_w_imm16_adr16_dpm(); -void subi_w_imm16_adr32_dpm(); -void subi_l_imm32_ds_dpm(); -void subi_l_imm32_ais_dpm(); -void subi_l_imm32_aips_dpm(); -void subi_l_imm32_pais_dpm(); -void subi_l_imm32_das_dpm(); -void subi_l_imm32_dais_dpm(); -void subi_l_imm32_adr16_dpm(); -void subi_l_imm32_adr32_dpm(); -void addi_b_imm8_ds_dpm(); -void addi_b_imm8_ais_dpm(); -void addi_b_imm8_aips_dpm(); -void addi_b_imm8_pais_dpm(); -void addi_b_imm8_das_dpm(); -void addi_b_imm8_dais_dpm(); -void addi_b_imm8_adr16_dpm(); -void addi_b_imm8_adr32_dpm(); -void addi_w_imm16_ds_dpm(); -void addi_w_imm16_ais_dpm(); -void addi_w_imm16_aips_dpm(); -void addi_w_imm16_pais_dpm(); -void addi_w_imm16_das_dpm(); -void addi_w_imm16_dais_dpm(); -void addi_w_imm16_adr16_dpm(); -void addi_w_imm16_adr32_dpm(); -void addi_l_imm32_ds_dpm(); -void addi_l_imm32_ais_dpm(); -void addi_l_imm32_aips_dpm(); -void addi_l_imm32_pais_dpm(); -void addi_l_imm32_das_dpm(); -void addi_l_imm32_dais_dpm(); -void addi_l_imm32_adr16_dpm(); -void addi_l_imm32_adr32_dpm(); -void btst_imm8_ds_dpm(); -void btst_imm8_ais_dpm(); -void btst_imm8_aips_dpm(); -void btst_imm8_pais_dpm(); -void btst_imm8_das_dpm(); -void btst_imm8_dais_dpm(); -void btst_imm8_adr16_dpm(); -void btst_imm8_adr32_dpm(); -void btst_imm8_dpc_dpm(); -void btst_imm8_dpci_dpm(); -void bchg_imm8_ds_dpm(); -void bchg_imm8_ais_dpm(); -void bchg_imm8_aips_dpm(); -void bchg_imm8_pais_dpm(); -void bchg_imm8_das_dpm(); -void bchg_imm8_dais_dpm(); -void bchg_imm8_adr16_dpm(); -void bchg_imm8_adr32_dpm(); -void bclr_imm8_ds_dpm(); -void bclr_imm8_ais_dpm(); -void bclr_imm8_aips_dpm(); -void bclr_imm8_pais_dpm(); -void bclr_imm8_das_dpm(); -void bclr_imm8_dais_dpm(); -void bclr_imm8_adr16_dpm(); -void bclr_imm8_adr32_dpm(); -void bset_imm8_ds_dpm(); -void bset_imm8_ais_dpm(); -void bset_imm8_aips_dpm(); -void bset_imm8_pais_dpm(); -void bset_imm8_das_dpm(); -void bset_imm8_dais_dpm(); -void bset_imm8_adr16_dpm(); -void bset_imm8_adr32_dpm(); -void eori_b_imm8_ds_dpm(); -void eori_b_imm8_ais_dpm(); -void eori_b_imm8_aips_dpm(); -void eori_b_imm8_pais_dpm(); -void eori_b_imm8_das_dpm(); -void eori_b_imm8_dais_dpm(); -void eori_b_imm8_adr16_dpm(); -void eori_b_imm8_adr32_dpm(); -void eori_imm8_ccr_dpm(); -void eori_w_imm16_ds_dpm(); -void eori_w_imm16_ais_dpm(); -void eori_w_imm16_aips_dpm(); -void eori_w_imm16_pais_dpm(); -void eori_w_imm16_das_dpm(); -void eori_w_imm16_dais_dpm(); -void eori_w_imm16_adr16_dpm(); -void eori_w_imm16_adr32_dpm(); -void eori_i16u_sr_dpm(); -void eori_l_imm32_ds_dpm(); -void eori_l_imm32_ais_dpm(); -void eori_l_imm32_aips_dpm(); -void eori_l_imm32_pais_dpm(); -void eori_l_imm32_das_dpm(); -void eori_l_imm32_dais_dpm(); -void eori_l_imm32_adr16_dpm(); -void eori_l_imm32_adr32_dpm(); -void cmpi_b_imm8_ds_dpm(); -void cmpi_b_imm8_ais_dpm(); -void cmpi_b_imm8_aips_dpm(); -void cmpi_b_imm8_pais_dpm(); -void cmpi_b_imm8_das_dpm(); -void cmpi_b_imm8_dais_dpm(); -void cmpi_b_imm8_adr16_dpm(); -void cmpi_b_imm8_adr32_dpm(); -void cmpi_w_imm16_ds_dpm(); -void cmpi_w_imm16_ais_dpm(); -void cmpi_w_imm16_aips_dpm(); -void cmpi_w_imm16_pais_dpm(); -void cmpi_w_imm16_das_dpm(); -void cmpi_w_imm16_dais_dpm(); -void cmpi_w_imm16_adr16_dpm(); -void cmpi_w_imm16_adr32_dpm(); -void cmpi_l_imm32_ds_dpm(); -void cmpi_l_imm32_ais_dpm(); -void cmpi_l_imm32_aips_dpm(); -void cmpi_l_imm32_pais_dpm(); -void cmpi_l_imm32_das_dpm(); -void cmpi_l_imm32_dais_dpm(); -void cmpi_l_imm32_adr16_dpm(); -void cmpi_l_imm32_adr32_dpm(); -void move_b_ds_dd_dpm(); -void move_b_ais_dd_dpm(); -void move_b_aips_dd_dpm(); -void move_b_pais_dd_dpm(); -void move_b_das_dd_dpm(); -void move_b_dais_dd_dpm(); -void move_b_adr16_dd_dpm(); -void move_b_adr32_dd_dpm(); -void move_b_dpc_dd_dpm(); -void move_b_dpci_dd_dpm(); -void move_b_imm8_dd_dpm(); -void move_b_ds_aid_dpm(); -void move_b_ais_aid_dpm(); -void move_b_aips_aid_dpm(); -void move_b_pais_aid_dpm(); -void move_b_das_aid_dpm(); -void move_b_dais_aid_dpm(); -void move_b_adr16_aid_dpm(); -void move_b_adr32_aid_dpm(); -void move_b_dpc_aid_dpm(); -void move_b_dpci_aid_dpm(); -void move_b_imm8_aid_dpm(); -void move_b_ds_aipd_dpm(); -void move_b_ais_aipd_dpm(); -void move_b_aips_aipd_dpm(); -void move_b_pais_aipd_dpm(); -void move_b_das_aipd_dpm(); -void move_b_dais_aipd_dpm(); -void move_b_adr16_aipd_dpm(); -void move_b_adr32_aipd_dpm(); -void move_b_dpc_aipd_dpm(); -void move_b_dpci_aipd_dpm(); -void move_b_imm8_aipd_dpm(); -void move_b_ds_paid_dpm(); -void move_b_ais_paid_dpm(); -void move_b_aips_paid_dpm(); -void move_b_pais_paid_dpm(); -void move_b_das_paid_dpm(); -void move_b_dais_paid_dpm(); -void move_b_adr16_paid_dpm(); -void move_b_adr32_paid_dpm(); -void move_b_dpc_paid_dpm(); -void move_b_dpci_paid_dpm(); -void move_b_imm8_paid_dpm(); -void move_b_ds_dad_dpm(); -void move_b_ais_dad_dpm(); -void move_b_aips_dad_dpm(); -void move_b_pais_dad_dpm(); -void move_b_das_dad_dpm(); -void move_b_dais_dad_dpm(); -void move_b_adr16_dad_dpm(); -void move_b_adr32_dad_dpm(); -void move_b_dpc_dad_dpm(); -void move_b_dpci_dad_dpm(); -void move_b_imm8_dad_dpm(); -void move_b_ds_daid_dpm(); -void move_b_ais_daid_dpm(); -void move_b_aips_daid_dpm(); -void move_b_pais_daid_dpm(); -void move_b_das_daid_dpm(); -void move_b_dais_daid_dpm(); -void move_b_adr16_daid_dpm(); -void move_b_adr32_daid_dpm(); -void move_b_dpc_daid_dpm(); -void move_b_dpci_daid_dpm(); -void move_b_imm8_daid_dpm(); -void move_b_ds_adr16_dpm(); -void move_b_ais_adr16_dpm(); -void move_b_aips_adr16_dpm(); -void move_b_pais_adr16_dpm(); -void move_b_das_adr16_dpm(); -void move_b_dais_adr16_dpm(); -void move_b_adr16_adr16_dpm(); -void move_b_adr32_adr16_dpm(); -void move_b_dpc_adr16_dpm(); -void move_b_dpci_adr16_dpm(); -void move_b_imm8_adr16_dpm(); -void move_b_ds_adr32_dpm(); -void move_b_ais_adr32_dpm(); -void move_b_aips_adr32_dpm(); -void move_b_pais_adr32_dpm(); -void move_b_das_adr32_dpm(); -void move_b_dais_adr32_dpm(); -void move_b_adr16_adr32_dpm(); -void move_b_adr32_adr32_dpm(); -void move_b_dpc_adr32_dpm(); -void move_b_dpci_adr32_dpm(); -void move_b_imm8_adr32_dpm(); -void move_l_ds_dd_dpm(); -void move_l_as_dd_dpm(); -void move_l_ais_dd_dpm(); -void move_l_aips_dd_dpm(); -void move_l_pais_dd_dpm(); -void move_l_das_dd_dpm(); -void move_l_dais_dd_dpm(); -void move_l_adr16_dd_dpm(); -void move_l_adr32_dd_dpm(); -void move_l_dpc_dd_dpm(); -void move_l_dpci_dd_dpm(); -void move_l_imm32_dd_dpm(); -void movea_l_ds_ad_dpm(); -void movea_l_as_ad_dpm(); -void movea_l_ais_ad_dpm(); -void movea_l_aips_ad_dpm(); -void movea_l_pais_ad_dpm(); -void movea_l_das_ad_dpm(); -void movea_l_dais_ad_dpm(); -void movea_l_adr16_ad_dpm(); -void movea_l_adr32_ad_dpm(); -void movea_l_dpc_ad_dpm(); -void movea_l_dpci_ad_dpm(); -void movea_l_imm32_ad_dpm(); -void move_l_ds_aid_dpm(); -void move_l_as_aid_dpm(); -void move_l_ais_aid_dpm(); -void move_l_aips_aid_dpm(); -void move_l_pais_aid_dpm(); -void move_l_das_aid_dpm(); -void move_l_dais_aid_dpm(); -void move_l_adr16_aid_dpm(); -void move_l_adr32_aid_dpm(); -void move_l_dpc_aid_dpm(); -void move_l_dpci_aid_dpm(); -void move_l_imm32_aid_dpm(); -void move_l_ds_aipd_dpm(); -void move_l_as_aipd_dpm(); -void move_l_ais_aipd_dpm(); -void move_l_aips_aipd_dpm(); -void move_l_pais_aipd_dpm(); -void move_l_das_aipd_dpm(); -void move_l_dais_aipd_dpm(); -void move_l_adr16_aipd_dpm(); -void move_l_adr32_aipd_dpm(); -void move_l_dpc_aipd_dpm(); -void move_l_dpci_aipd_dpm(); -void move_l_imm32_aipd_dpm(); -void move_l_ds_paid_dpm(); -void move_l_as_paid_dpm(); -void move_l_ais_paid_dpm(); -void move_l_aips_paid_dpm(); -void move_l_pais_paid_dpm(); -void move_l_das_paid_dpm(); -void move_l_dais_paid_dpm(); -void move_l_adr16_paid_dpm(); -void move_l_adr32_paid_dpm(); -void move_l_dpc_paid_dpm(); -void move_l_dpci_paid_dpm(); -void move_l_imm32_paid_dpm(); -void move_l_ds_dad_dpm(); -void move_l_as_dad_dpm(); -void move_l_ais_dad_dpm(); -void move_l_aips_dad_dpm(); -void move_l_pais_dad_dpm(); -void move_l_das_dad_dpm(); -void move_l_dais_dad_dpm(); -void move_l_adr16_dad_dpm(); -void move_l_adr32_dad_dpm(); -void move_l_dpc_dad_dpm(); -void move_l_dpci_dad_dpm(); -void move_l_imm32_dad_dpm(); -void move_l_ds_daid_dpm(); -void move_l_as_daid_dpm(); -void move_l_ais_daid_dpm(); -void move_l_aips_daid_dpm(); -void move_l_pais_daid_dpm(); -void move_l_das_daid_dpm(); -void move_l_dais_daid_dpm(); -void move_l_adr16_daid_dpm(); -void move_l_adr32_daid_dpm(); -void move_l_dpc_daid_dpm(); -void move_l_dpci_daid_dpm(); -void move_l_imm32_daid_dpm(); -void move_l_ds_adr16_dpm(); -void move_l_as_adr16_dpm(); -void move_l_ais_adr16_dpm(); -void move_l_aips_adr16_dpm(); -void move_l_pais_adr16_dpm(); -void move_l_das_adr16_dpm(); -void move_l_dais_adr16_dpm(); -void move_l_adr16_adr16_dpm(); -void move_l_adr32_adr16_dpm(); -void move_l_dpc_adr16_dpm(); -void move_l_dpci_adr16_dpm(); -void move_l_imm32_adr16_dpm(); -void move_l_ds_adr32_dpm(); -void move_l_as_adr32_dpm(); -void move_l_ais_adr32_dpm(); -void move_l_aips_adr32_dpm(); -void move_l_pais_adr32_dpm(); -void move_l_das_adr32_dpm(); -void move_l_dais_adr32_dpm(); -void move_l_adr16_adr32_dpm(); -void move_l_adr32_adr32_dpm(); -void move_l_dpc_adr32_dpm(); -void move_l_dpci_adr32_dpm(); -void move_l_imm32_adr32_dpm(); -void move_w_ds_dd_dpm(); -void move_w_as_dd_dpm(); -void move_w_ais_dd_dpm(); -void move_w_aips_dd_dpm(); -void move_w_pais_dd_dpm(); -void move_w_das_dd_dpm(); -void move_w_dais_dd_dpm(); -void move_w_adr16_dd_dpm(); -void move_w_adr32_dd_dpm(); -void move_w_dpc_dd_dpm(); -void move_w_dpci_dd_dpm(); -void move_w_imm16_dd_dpm(); -void movea_w_ds_ad_dpm(); -void movea_w_as_ad_dpm(); -void movea_w_ais_ad_dpm(); -void movea_w_aips_ad_dpm(); -void movea_w_pais_ad_dpm(); -void movea_w_das_ad_dpm(); -void movea_w_dais_ad_dpm(); -void movea_w_adr16_ad_dpm(); -void movea_w_adr32_ad_dpm(); -void movea_w_dpc_ad_dpm(); -void movea_w_dpci_ad_dpm(); -void movea_w_imm16_ad_dpm(); -void move_w_ds_aid_dpm(); -void move_w_as_aid_dpm(); -void move_w_ais_aid_dpm(); -void move_w_aips_aid_dpm(); -void move_w_pais_aid_dpm(); -void move_w_das_aid_dpm(); -void move_w_dais_aid_dpm(); -void move_w_adr16_aid_dpm(); -void move_w_adr32_aid_dpm(); -void move_w_dpc_aid_dpm(); -void move_w_dpci_aid_dpm(); -void move_w_imm16_aid_dpm(); -void move_w_ds_aipd_dpm(); -void move_w_as_aipd_dpm(); -void move_w_ais_aipd_dpm(); -void move_w_aips_aipd_dpm(); -void move_w_pais_aipd_dpm(); -void move_w_das_aipd_dpm(); -void move_w_dais_aipd_dpm(); -void move_w_adr16_aipd_dpm(); -void move_w_adr32_aipd_dpm(); -void move_w_dpc_aipd_dpm(); -void move_w_dpci_aipd_dpm(); -void move_w_imm16_aipd_dpm(); -void move_w_ds_paid_dpm(); -void move_w_as_paid_dpm(); -void move_w_ais_paid_dpm(); -void move_w_aips_paid_dpm(); -void move_w_pais_paid_dpm(); -void move_w_das_paid_dpm(); -void move_w_dais_paid_dpm(); -void move_w_adr16_paid_dpm(); -void move_w_adr32_paid_dpm(); -void move_w_dpc_paid_dpm(); -void move_w_dpci_paid_dpm(); -void move_w_imm16_paid_dpm(); -void move_w_ds_dad_dpm(); -void move_w_as_dad_dpm(); -void move_w_ais_dad_dpm(); -void move_w_aips_dad_dpm(); -void move_w_pais_dad_dpm(); -void move_w_das_dad_dpm(); -void move_w_dais_dad_dpm(); -void move_w_adr16_dad_dpm(); -void move_w_adr32_dad_dpm(); -void move_w_dpc_dad_dpm(); -void move_w_dpci_dad_dpm(); -void move_w_imm16_dad_dpm(); -void move_w_ds_daid_dpm(); -void move_w_as_daid_dpm(); -void move_w_ais_daid_dpm(); -void move_w_aips_daid_dpm(); -void move_w_pais_daid_dpm(); -void move_w_das_daid_dpm(); -void move_w_dais_daid_dpm(); -void move_w_adr16_daid_dpm(); -void move_w_adr32_daid_dpm(); -void move_w_dpc_daid_dpm(); -void move_w_dpci_daid_dpm(); -void move_w_imm16_daid_dpm(); -void move_w_ds_adr16_dpm(); -void move_w_as_adr16_dpm(); -void move_w_ais_adr16_dpm(); -void move_w_aips_adr16_dpm(); -void move_w_pais_adr16_dpm(); -void move_w_das_adr16_dpm(); -void move_w_dais_adr16_dpm(); -void move_w_adr16_adr16_dpm(); -void move_w_adr32_adr16_dpm(); -void move_w_dpc_adr16_dpm(); -void move_w_dpci_adr16_dpm(); -void move_w_imm16_adr16_dpm(); -void move_w_ds_adr32_dpm(); -void move_w_as_adr32_dpm(); -void move_w_ais_adr32_dpm(); -void move_w_aips_adr32_dpm(); -void move_w_pais_adr32_dpm(); -void move_w_das_adr32_dpm(); -void move_w_dais_adr32_dpm(); -void move_w_adr16_adr32_dpm(); -void move_w_adr32_adr32_dpm(); -void move_w_dpc_adr32_dpm(); -void move_w_dpci_adr32_dpm(); -void move_w_imm16_adr32_dpm(); -void negx_b_ds_dpm(); -void negx_b_ais_dpm(); -void negx_b_aips_dpm(); -void negx_b_pais_dpm(); -void negx_b_das_dpm(); -void negx_b_dais_dpm(); -void negx_b_adr16_dpm(); -void negx_b_adr32_dpm(); -void negx_w_ds_dpm(); -void negx_w_ais_dpm(); -void negx_w_aips_dpm(); -void negx_w_pais_dpm(); -void negx_w_das_dpm(); -void negx_w_dais_dpm(); -void negx_w_adr16_dpm(); -void negx_w_adr32_dpm(); -void negx_l_ds_dpm(); -void negx_l_ais_dpm(); -void negx_l_aips_dpm(); -void negx_l_pais_dpm(); -void negx_l_das_dpm(); -void negx_l_dais_dpm(); -void negx_l_adr16_dpm(); -void negx_l_adr32_dpm(); -void move_sr_ds_dpm(); -void move_sr_ais_dpm(); -void move_sr_aips_dpm(); -void move_sr_pais_dpm(); -void move_sr_das_dpm(); -void move_sr_dais_dpm(); -void move_sr_adr16_dpm(); -void move_sr_adr32_dpm(); -void chk_w_ds_dd_dpm(); -void chk_w_ais_dd_dpm(); -void chk_w_aips_dd_dpm(); -void chk_w_pais_dd_dpm(); -void chk_w_das_dd_dpm(); -void chk_w_dais_dd_dpm(); -void chk_w_adr16_dd_dpm(); -void chk_w_adr32_dd_dpm(); -void chk_w_dpc_dd_dpm(); -void chk_w_dpci_dd_dpm(); -void chk_w_imm16_dd_dpm(); -void lea_ais_ad_dpm(); -void lea_das_ad_dpm(); -void lea_dais_ad_dpm(); -void lea_adr16_ad_dpm(); -void lea_adr32_ad_dpm(); -void lea_dpc_ad_dpm(); -void lea_dpci_ad_dpm(); -void clr_b_ds_dpm(); -void clr_b_ais_dpm(); -void clr_b_aips_dpm(); -void clr_b_pais_dpm(); -void clr_b_das_dpm(); -void clr_b_dais_dpm(); -void clr_b_adr16_dpm(); -void clr_b_adr32_dpm(); -void clr_w_ds_dpm(); -void clr_w_ais_dpm(); -void clr_w_aips_dpm(); -void clr_w_pais_dpm(); -void clr_w_das_dpm(); -void clr_w_dais_dpm(); -void clr_w_adr16_dpm(); -void clr_w_adr32_dpm(); -void clr_l_ds_dpm(); -void clr_l_ais_dpm(); -void clr_l_aips_dpm(); -void clr_l_pais_dpm(); -void clr_l_das_dpm(); -void clr_l_dais_dpm(); -void clr_l_adr16_dpm(); -void clr_l_adr32_dpm(); -void neg_b_ds_dpm(); -void neg_b_ais_dpm(); -void neg_b_aips_dpm(); -void neg_b_pais_dpm(); -void neg_b_das_dpm(); -void neg_b_dais_dpm(); -void neg_b_adr16_dpm(); -void neg_b_adr32_dpm(); -void neg_w_ds_dpm(); -void neg_w_ais_dpm(); -void neg_w_aips_dpm(); -void neg_w_pais_dpm(); -void neg_w_das_dpm(); -void neg_w_dais_dpm(); -void neg_w_adr16_dpm(); -void neg_w_adr32_dpm(); -void neg_l_ds_dpm(); -void neg_l_ais_dpm(); -void neg_l_aips_dpm(); -void neg_l_pais_dpm(); -void neg_l_das_dpm(); -void neg_l_dais_dpm(); -void neg_l_adr16_dpm(); -void neg_l_adr32_dpm(); -void move_ds_ccr_dpm(); -void move_ais_ccr_dpm(); -void move_aips_ccr_dpm(); -void move_pais_ccr_dpm(); -void move_das_ccr_dpm(); -void move_dais_ccr_dpm(); -void move_adr16_ccr_dpm(); -void move_adr32_ccr_dpm(); -void move_dpc_ccr_dpm(); -void move_dpci_ccr_dpm(); -void move_imm8_ccr_dpm(); -void not_b_ds_dpm(); -void not_b_ais_dpm(); -void not_b_aips_dpm(); -void not_b_pais_dpm(); -void not_b_das_dpm(); -void not_b_dais_dpm(); -void not_b_adr16_dpm(); -void not_b_adr32_dpm(); -void not_w_ds_dpm(); -void not_w_ais_dpm(); -void not_w_aips_dpm(); -void not_w_pais_dpm(); -void not_w_das_dpm(); -void not_w_dais_dpm(); -void not_w_adr16_dpm(); -void not_w_adr32_dpm(); -void not_l_ds_dpm(); -void not_l_ais_dpm(); -void not_l_aips_dpm(); -void not_l_pais_dpm(); -void not_l_das_dpm(); -void not_l_dais_dpm(); -void not_l_adr16_dpm(); -void not_l_adr32_dpm(); -void move_ds_sr_dpm(); -void move_ais_sr_dpm(); -void move_aips_sr_dpm(); -void move_pais_sr_dpm(); -void move_das_sr_dpm(); -void move_dais_sr_dpm(); -void move_adr16_sr_dpm(); -void move_adr32_sr_dpm(); -void move_dpc_sr_dpm(); -void move_dpci_sr_dpm(); -void move_i16u_sr_dpm(); -void nbcd_b_ds_dpm(); -void nbcd_b_ais_dpm(); -void nbcd_b_aips_dpm(); -void nbcd_b_pais_dpm(); -void nbcd_b_das_dpm(); -void nbcd_b_dais_dpm(); -void nbcd_b_adr16_dpm(); -void nbcd_b_adr32_dpm(); -void swap_ds_dpm(); -void pea_ais_dpm(); -void pea_das_dpm(); -void pea_dais_dpm(); -void pea_adr16_dpm(); -void pea_adr32_dpm(); -void pea_dpc_dpm(); -void pea_dpci_dpm(); -void ext_w_ds_dpm(); -void movem_w_list_ais_dpm(); -void movem_w_listp_pais_dpm(); -void movem_w_list_das_dpm(); -void movem_w_list_dais_dpm(); -void movem_w_list_adr16_dpm(); -void movem_w_list_adr32_dpm(); -void ext_l_ds_dpm(); -void movem_l_list_ais_dpm(); -void movem_l_listp_pais_dpm(); -void movem_l_list_das_dpm(); -void movem_l_list_dais_dpm(); -void movem_l_list_adr16_dpm(); -void movem_l_list_adr32_dpm(); -void tst_b_ds_dpm(); -void tst_b_ais_dpm(); -void tst_b_aips_dpm(); -void tst_b_pais_dpm(); -void tst_b_das_dpm(); -void tst_b_dais_dpm(); -void tst_b_adr16_dpm(); -void tst_b_adr32_dpm(); -void tst_w_ds_dpm(); -void tst_w_ais_dpm(); -void tst_w_aips_dpm(); -void tst_w_pais_dpm(); -void tst_w_das_dpm(); -void tst_w_dais_dpm(); -void tst_w_adr16_dpm(); -void tst_w_adr32_dpm(); -void tst_l_ds_dpm(); -void tst_l_ais_dpm(); -void tst_l_aips_dpm(); -void tst_l_pais_dpm(); -void tst_l_das_dpm(); -void tst_l_dais_dpm(); -void tst_l_adr16_dpm(); -void tst_l_adr32_dpm(); -void tas_ds_dpm(); -void tas_ais_dpm(); -void tas_aips_dpm(); -void tas_pais_dpm(); -void tas_das_dpm(); -void tas_dais_dpm(); -void tas_adr16_dpm(); -void tas_adr32_dpm(); -void movem_w_ais_list_dpm(); -void movem_w_aips_list_dpm(); -void movem_w_das_list_dpm(); -void movem_w_dais_list_dpm(); -void movem_w_adr16_list_dpm(); -void movem_w_adr32_list_dpm(); -void movem_w_dpc_list_dpm(); -void movem_w_dpci_list_dpm(); -void movem_l_ais_list_dpm(); -void movem_l_aips_list_dpm(); -void movem_l_das_list_dpm(); -void movem_l_dais_list_dpm(); -void movem_l_adr16_list_dpm(); -void movem_l_adr32_list_dpm(); -void movem_l_dpc_list_dpm(); -void movem_l_dpci_list_dpm(); -void trap_imm4_dpm(); -void link_as_imm16_dpm(); -void unlk_as_dpm(); -void move_as_usp_dpm(); -void move_usp_as_dpm(); -void reset_dpm(); -void nop_dpm(); -void stop_i16u_dpm(); -void rte_dpm(); -void rts_dpm(); -void trapv_dpm(); -void rtr_dpm(); -void jsr_ais_dpm(); -void jsr_das_dpm(); -void jsr_dais_dpm(); -void jsr_adr16_dpm(); -void jsr_adr32_dpm(); -void jsr_dpc_dpm(); -void jsr_dpci_dpm(); -void jmp_ais_dpm(); -void jmp_das_dpm(); -void jmp_dais_dpm(); -void jmp_adr16_dpm(); -void jmp_adr32_dpm(); -void jmp_dpc_dpm(); -void jmp_dpci_dpm(); -void addq_b_imm3_ds_dpm(); -void addq_b_imm3_ais_dpm(); -void addq_b_imm3_aips_dpm(); -void addq_b_imm3_pais_dpm(); -void addq_b_imm3_das_dpm(); -void addq_b_imm3_dais_dpm(); -void addq_b_imm3_adr16_dpm(); -void addq_b_imm3_adr32_dpm(); -void addq_w_imm3_ds_dpm(); -void addq_w_imm3_as_dpm(); -void addq_w_imm3_ais_dpm(); -void addq_w_imm3_aips_dpm(); -void addq_w_imm3_pais_dpm(); -void addq_w_imm3_das_dpm(); -void addq_w_imm3_dais_dpm(); -void addq_w_imm3_adr16_dpm(); -void addq_w_imm3_adr32_dpm(); -void addq_l_imm3_ds_dpm(); -void addq_l_imm3_as_dpm(); -void addq_l_imm3_ais_dpm(); -void addq_l_imm3_aips_dpm(); -void addq_l_imm3_pais_dpm(); -void addq_l_imm3_das_dpm(); -void addq_l_imm3_dais_dpm(); -void addq_l_imm3_adr16_dpm(); -void addq_l_imm3_adr32_dpm(); -void st_ds_dpm(); -void dbt_ds_rel16_dpm(); -void st_ais_dpm(); -void st_aips_dpm(); -void st_pais_dpm(); -void st_das_dpm(); -void st_dais_dpm(); -void st_adr16_dpm(); -void st_adr32_dpm(); -void subq_b_imm3_ds_dpm(); -void subq_b_imm3_ais_dpm(); -void subq_b_imm3_aips_dpm(); -void subq_b_imm3_pais_dpm(); -void subq_b_imm3_das_dpm(); -void subq_b_imm3_dais_dpm(); -void subq_b_imm3_adr16_dpm(); -void subq_b_imm3_adr32_dpm(); -void subq_w_imm3_ds_dpm(); -void subq_w_imm3_as_dpm(); -void subq_w_imm3_ais_dpm(); -void subq_w_imm3_aips_dpm(); -void subq_w_imm3_pais_dpm(); -void subq_w_imm3_das_dpm(); -void subq_w_imm3_dais_dpm(); -void subq_w_imm3_adr16_dpm(); -void subq_w_imm3_adr32_dpm(); -void subq_l_imm3_ds_dpm(); -void subq_l_imm3_as_dpm(); -void subq_l_imm3_ais_dpm(); -void subq_l_imm3_aips_dpm(); -void subq_l_imm3_pais_dpm(); -void subq_l_imm3_das_dpm(); -void subq_l_imm3_dais_dpm(); -void subq_l_imm3_adr16_dpm(); -void subq_l_imm3_adr32_dpm(); -void sf_ds_dpm(); -void dbra_ds_rel16_dpm(); -void sf_ais_dpm(); -void sf_aips_dpm(); -void sf_pais_dpm(); -void sf_das_dpm(); -void sf_dais_dpm(); -void sf_adr16_dpm(); -void sf_adr32_dpm(); -void shi_ds_dpm(); -void dbhi_ds_rel16_dpm(); -void shi_ais_dpm(); -void shi_aips_dpm(); -void shi_pais_dpm(); -void shi_das_dpm(); -void shi_dais_dpm(); -void shi_adr16_dpm(); -void shi_adr32_dpm(); -void sls_ds_dpm(); -void dbls_ds_rel16_dpm(); -void sls_ais_dpm(); -void sls_aips_dpm(); -void sls_pais_dpm(); -void sls_das_dpm(); -void sls_dais_dpm(); -void sls_adr16_dpm(); -void sls_adr32_dpm(); -void scc_ds_dpm(); -void dbcc_ds_rel16_dpm(); -void scc_ais_dpm(); -void scc_aips_dpm(); -void scc_pais_dpm(); -void scc_das_dpm(); -void scc_dais_dpm(); -void scc_adr16_dpm(); -void scc_adr32_dpm(); -void scs_ds_dpm(); -void dbcs_ds_rel16_dpm(); -void scs_ais_dpm(); -void scs_aips_dpm(); -void scs_pais_dpm(); -void scs_das_dpm(); -void scs_dais_dpm(); -void scs_adr16_dpm(); -void scs_adr32_dpm(); -void sne_ds_dpm(); -void dbne_ds_rel16_dpm(); -void sne_ais_dpm(); -void sne_aips_dpm(); -void sne_pais_dpm(); -void sne_das_dpm(); -void sne_dais_dpm(); -void sne_adr16_dpm(); -void sne_adr32_dpm(); -void seq_ds_dpm(); -void dbeq_ds_rel16_dpm(); -void seq_ais_dpm(); -void seq_aips_dpm(); -void seq_pais_dpm(); -void seq_das_dpm(); -void seq_dais_dpm(); -void seq_adr16_dpm(); -void seq_adr32_dpm(); -void svc_ds_dpm(); -void dbvc_ds_rel16_dpm(); -void svc_ais_dpm(); -void svc_aips_dpm(); -void svc_pais_dpm(); -void svc_das_dpm(); -void svc_dais_dpm(); -void svc_adr16_dpm(); -void svc_adr32_dpm(); -void svs_ds_dpm(); -void dbvs_ds_rel16_dpm(); -void svs_ais_dpm(); -void svs_aips_dpm(); -void svs_pais_dpm(); -void svs_das_dpm(); -void svs_dais_dpm(); -void svs_adr16_dpm(); -void svs_adr32_dpm(); -void spl_ds_dpm(); -void dbpl_ds_rel16_dpm(); -void spl_ais_dpm(); -void spl_aips_dpm(); -void spl_pais_dpm(); -void spl_das_dpm(); -void spl_dais_dpm(); -void spl_adr16_dpm(); -void spl_adr32_dpm(); -void smi_ds_dpm(); -void dbmi_ds_rel16_dpm(); -void smi_ais_dpm(); -void smi_aips_dpm(); -void smi_pais_dpm(); -void smi_das_dpm(); -void smi_dais_dpm(); -void smi_adr16_dpm(); -void smi_adr32_dpm(); -void sge_ds_dpm(); -void dbge_ds_rel16_dpm(); -void sge_ais_dpm(); -void sge_aips_dpm(); -void sge_pais_dpm(); -void sge_das_dpm(); -void sge_dais_dpm(); -void sge_adr16_dpm(); -void sge_adr32_dpm(); -void slt_ds_dpm(); -void dblt_ds_rel16_dpm(); -void slt_ais_dpm(); -void slt_aips_dpm(); -void slt_pais_dpm(); -void slt_das_dpm(); -void slt_dais_dpm(); -void slt_adr16_dpm(); -void slt_adr32_dpm(); -void sgt_ds_dpm(); -void dbgt_ds_rel16_dpm(); -void sgt_ais_dpm(); -void sgt_aips_dpm(); -void sgt_pais_dpm(); -void sgt_das_dpm(); -void sgt_dais_dpm(); -void sgt_adr16_dpm(); -void sgt_adr32_dpm(); -void sle_ds_dpm(); -void dble_ds_rel16_dpm(); -void sle_ais_dpm(); -void sle_aips_dpm(); -void sle_pais_dpm(); -void sle_das_dpm(); -void sle_dais_dpm(); -void sle_adr16_dpm(); -void sle_adr32_dpm(); -void bra_rel16_dpm(); -void bra_rel8_dpm(); -void bsr_rel16_dpm(); -void bsr_rel8_dpm(); -void bhi_rel16_dpm(); -void bhi_rel8_dpm(); -void bls_rel16_dpm(); -void bls_rel8_dpm(); -void bcc_rel16_dpm(); -void bcc_rel8_dpm(); -void bcs_rel16_dpm(); -void bcs_rel8_dpm(); -void bne_rel16_dpm(); -void bne_rel8_dpm(); -void beq_rel16_dpm(); -void beq_rel8_dpm(); -void bvc_rel16_dpm(); -void bvc_rel8_dpm(); -void bvs_rel16_dpm(); -void bvs_rel8_dpm(); -void bpl_rel16_dpm(); -void bpl_rel8_dpm(); -void bmi_rel16_dpm(); -void bmi_rel8_dpm(); -void bge_rel16_dpm(); -void bge_rel8_dpm(); -void blt_rel16_dpm(); -void blt_rel8_dpm(); -void bgt_rel16_dpm(); -void bgt_rel8_dpm(); -void ble_rel16_dpm(); -void ble_rel8_dpm(); -void moveq_imm8o_dd_dpm(); -void or_b_ds_dd_dpm(); -void or_b_ais_dd_dpm(); -void or_b_aips_dd_dpm(); -void or_b_pais_dd_dpm(); -void or_b_das_dd_dpm(); -void or_b_dais_dd_dpm(); -void or_b_adr16_dd_dpm(); -void or_b_adr32_dd_dpm(); -void or_b_dpc_dd_dpm(); -void or_b_dpci_dd_dpm(); -void or_b_imm8_dd_dpm(); -void or_w_ds_dd_dpm(); -void or_w_ais_dd_dpm(); -void or_w_aips_dd_dpm(); -void or_w_pais_dd_dpm(); -void or_w_das_dd_dpm(); -void or_w_dais_dd_dpm(); -void or_w_adr16_dd_dpm(); -void or_w_adr32_dd_dpm(); -void or_w_dpc_dd_dpm(); -void or_w_dpci_dd_dpm(); -void or_w_imm16_dd_dpm(); -void or_l_ds_dd_dpm(); -void or_l_ais_dd_dpm(); -void or_l_aips_dd_dpm(); -void or_l_pais_dd_dpm(); -void or_l_das_dd_dpm(); -void or_l_dais_dd_dpm(); -void or_l_adr16_dd_dpm(); -void or_l_adr32_dd_dpm(); -void or_l_dpc_dd_dpm(); -void or_l_dpci_dd_dpm(); -void or_l_imm32_dd_dpm(); -void divu_w_ds_dd_dpm(); -void divu_w_ais_dd_dpm(); -void divu_w_aips_dd_dpm(); -void divu_w_pais_dd_dpm(); -void divu_w_das_dd_dpm(); -void divu_w_dais_dd_dpm(); -void divu_w_adr16_dd_dpm(); -void divu_w_adr32_dd_dpm(); -void divu_w_dpc_dd_dpm(); -void divu_w_dpci_dd_dpm(); -void divu_w_imm16_dd_dpm(); -void sbcd_ds_dd_dpm(); -void sbcd_pais_paid_dpm(); -void or_b_dd_ais_dpm(); -void or_b_dd_aips_dpm(); -void or_b_dd_pais_dpm(); -void or_b_dd_das_dpm(); -void or_b_dd_dais_dpm(); -void or_b_dd_adr16_dpm(); -void or_b_dd_adr32_dpm(); -void or_w_dd_ais_dpm(); -void or_w_dd_aips_dpm(); -void or_w_dd_pais_dpm(); -void or_w_dd_das_dpm(); -void or_w_dd_dais_dpm(); -void or_w_dd_adr16_dpm(); -void or_w_dd_adr32_dpm(); -void or_l_dd_ais_dpm(); -void or_l_dd_aips_dpm(); -void or_l_dd_pais_dpm(); -void or_l_dd_das_dpm(); -void or_l_dd_dais_dpm(); -void or_l_dd_adr16_dpm(); -void or_l_dd_adr32_dpm(); -void divs_w_ds_dd_dpm(); -void divs_w_ais_dd_dpm(); -void divs_w_aips_dd_dpm(); -void divs_w_pais_dd_dpm(); -void divs_w_das_dd_dpm(); -void divs_w_dais_dd_dpm(); -void divs_w_adr16_dd_dpm(); -void divs_w_adr32_dd_dpm(); -void divs_w_dpc_dd_dpm(); -void divs_w_dpci_dd_dpm(); -void divs_w_imm16_dd_dpm(); -void sub_b_ds_dd_dpm(); -void sub_b_ais_dd_dpm(); -void sub_b_aips_dd_dpm(); -void sub_b_pais_dd_dpm(); -void sub_b_das_dd_dpm(); -void sub_b_dais_dd_dpm(); -void sub_b_adr16_dd_dpm(); -void sub_b_adr32_dd_dpm(); -void sub_b_dpc_dd_dpm(); -void sub_b_dpci_dd_dpm(); -void sub_b_imm8_dd_dpm(); -void sub_w_ds_dd_dpm(); -void sub_w_as_dd_dpm(); -void sub_w_ais_dd_dpm(); -void sub_w_aips_dd_dpm(); -void sub_w_pais_dd_dpm(); -void sub_w_das_dd_dpm(); -void sub_w_dais_dd_dpm(); -void sub_w_adr16_dd_dpm(); -void sub_w_adr32_dd_dpm(); -void sub_w_dpc_dd_dpm(); -void sub_w_dpci_dd_dpm(); -void sub_w_imm16_dd_dpm(); -void sub_l_ds_dd_dpm(); -void sub_l_as_dd_dpm(); -void sub_l_ais_dd_dpm(); -void sub_l_aips_dd_dpm(); -void sub_l_pais_dd_dpm(); -void sub_l_das_dd_dpm(); -void sub_l_dais_dd_dpm(); -void sub_l_adr16_dd_dpm(); -void sub_l_adr32_dd_dpm(); -void sub_l_dpc_dd_dpm(); -void sub_l_dpci_dd_dpm(); -void sub_l_imm32_dd_dpm(); -void suba_w_ds_ad_dpm(); -void suba_w_as_ad_dpm(); -void suba_w_ais_ad_dpm(); -void suba_w_aips_ad_dpm(); -void suba_w_pais_ad_dpm(); -void suba_w_das_ad_dpm(); -void suba_w_dais_ad_dpm(); -void suba_w_adr16_ad_dpm(); -void suba_w_adr32_ad_dpm(); -void suba_w_dpc_ad_dpm(); -void suba_w_dpci_ad_dpm(); -void suba_w_imm16_ad_dpm(); -void subx_b_ds_dd_dpm(); -void subx_b_pais_paid_dpm(); -void sub_b_dd_ais_dpm(); -void sub_b_dd_aips_dpm(); -void sub_b_dd_pais_dpm(); -void sub_b_dd_das_dpm(); -void sub_b_dd_dais_dpm(); -void sub_b_dd_adr16_dpm(); -void sub_b_dd_adr32_dpm(); -void subx_w_ds_dd_dpm(); -void subx_w_pais_paid_dpm(); -void sub_w_dd_ais_dpm(); -void sub_w_dd_aips_dpm(); -void sub_w_dd_pais_dpm(); -void sub_w_dd_das_dpm(); -void sub_w_dd_dais_dpm(); -void sub_w_dd_adr16_dpm(); -void sub_w_dd_adr32_dpm(); -void subx_l_ds_dd_dpm(); -void subx_l_pais_paid_dpm(); -void sub_l_dd_ais_dpm(); -void sub_l_dd_aips_dpm(); -void sub_l_dd_pais_dpm(); -void sub_l_dd_das_dpm(); -void sub_l_dd_dais_dpm(); -void sub_l_dd_adr16_dpm(); -void sub_l_dd_adr32_dpm(); -void suba_l_ds_ad_dpm(); -void suba_l_as_ad_dpm(); -void suba_l_ais_ad_dpm(); -void suba_l_aips_ad_dpm(); -void suba_l_pais_ad_dpm(); -void suba_l_das_ad_dpm(); -void suba_l_dais_ad_dpm(); -void suba_l_adr16_ad_dpm(); -void suba_l_adr32_ad_dpm(); -void suba_l_dpc_ad_dpm(); -void suba_l_dpci_ad_dpm(); -void suba_l_imm32_ad_dpm(); -void cmp_b_ds_dd_dpm(); -void cmp_b_ais_dd_dpm(); -void cmp_b_aips_dd_dpm(); -void cmp_b_pais_dd_dpm(); -void cmp_b_das_dd_dpm(); -void cmp_b_dais_dd_dpm(); -void cmp_b_adr16_dd_dpm(); -void cmp_b_adr32_dd_dpm(); -void cmp_b_dpc_dd_dpm(); -void cmp_b_dpci_dd_dpm(); -void cmp_b_imm8_dd_dpm(); -void cmp_w_ds_dd_dpm(); -void cmp_w_as_dd_dpm(); -void cmp_w_ais_dd_dpm(); -void cmp_w_aips_dd_dpm(); -void cmp_w_pais_dd_dpm(); -void cmp_w_das_dd_dpm(); -void cmp_w_dais_dd_dpm(); -void cmp_w_adr16_dd_dpm(); -void cmp_w_adr32_dd_dpm(); -void cmp_w_dpc_dd_dpm(); -void cmp_w_dpci_dd_dpm(); -void cmp_w_imm16_dd_dpm(); -void cmp_l_ds_dd_dpm(); -void cmp_l_as_dd_dpm(); -void cmp_l_ais_dd_dpm(); -void cmp_l_aips_dd_dpm(); -void cmp_l_pais_dd_dpm(); -void cmp_l_das_dd_dpm(); -void cmp_l_dais_dd_dpm(); -void cmp_l_adr16_dd_dpm(); -void cmp_l_adr32_dd_dpm(); -void cmp_l_dpc_dd_dpm(); -void cmp_l_dpci_dd_dpm(); -void cmp_l_imm32_dd_dpm(); -void cmpa_w_ds_ad_dpm(); -void cmpa_w_as_ad_dpm(); -void cmpa_w_ais_ad_dpm(); -void cmpa_w_aips_ad_dpm(); -void cmpa_w_pais_ad_dpm(); -void cmpa_w_das_ad_dpm(); -void cmpa_w_dais_ad_dpm(); -void cmpa_w_adr16_ad_dpm(); -void cmpa_w_adr32_ad_dpm(); -void cmpa_w_dpc_ad_dpm(); -void cmpa_w_dpci_ad_dpm(); -void cmpa_w_imm16_ad_dpm(); -void eor_b_dd_ds_dpm(); -void cmpm_b_aips_aipd_dpm(); -void eor_b_dd_ais_dpm(); -void eor_b_dd_aips_dpm(); -void eor_b_dd_pais_dpm(); -void eor_b_dd_das_dpm(); -void eor_b_dd_dais_dpm(); -void eor_b_dd_adr16_dpm(); -void eor_b_dd_adr32_dpm(); -void eor_w_dd_ds_dpm(); -void cmpm_w_aips_aipd_dpm(); -void eor_w_dd_ais_dpm(); -void eor_w_dd_aips_dpm(); -void eor_w_dd_pais_dpm(); -void eor_w_dd_das_dpm(); -void eor_w_dd_dais_dpm(); -void eor_w_dd_adr16_dpm(); -void eor_w_dd_adr32_dpm(); -void eor_l_dd_ds_dpm(); -void cmpm_l_aips_aipd_dpm(); -void eor_l_dd_ais_dpm(); -void eor_l_dd_aips_dpm(); -void eor_l_dd_pais_dpm(); -void eor_l_dd_das_dpm(); -void eor_l_dd_dais_dpm(); -void eor_l_dd_adr16_dpm(); -void eor_l_dd_adr32_dpm(); -void cmpa_l_ds_ad_dpm(); -void cmpa_l_as_ad_dpm(); -void cmpa_l_ais_ad_dpm(); -void cmpa_l_aips_ad_dpm(); -void cmpa_l_pais_ad_dpm(); -void cmpa_l_das_ad_dpm(); -void cmpa_l_dais_ad_dpm(); -void cmpa_l_adr16_ad_dpm(); -void cmpa_l_adr32_ad_dpm(); -void cmpa_l_dpc_ad_dpm(); -void cmpa_l_dpci_ad_dpm(); -void cmpa_l_imm32_ad_dpm(); -void and_b_ds_dd_dpm(); -void and_b_ais_dd_dpm(); -void and_b_aips_dd_dpm(); -void and_b_pais_dd_dpm(); -void and_b_das_dd_dpm(); -void and_b_dais_dd_dpm(); -void and_b_adr16_dd_dpm(); -void and_b_adr32_dd_dpm(); -void and_b_dpc_dd_dpm(); -void and_b_dpci_dd_dpm(); -void and_b_imm8_dd_dpm(); -void and_w_ds_dd_dpm(); -void and_w_ais_dd_dpm(); -void and_w_aips_dd_dpm(); -void and_w_pais_dd_dpm(); -void and_w_das_dd_dpm(); -void and_w_dais_dd_dpm(); -void and_w_adr16_dd_dpm(); -void and_w_adr32_dd_dpm(); -void and_w_dpc_dd_dpm(); -void and_w_dpci_dd_dpm(); -void and_w_imm16_dd_dpm(); -void and_l_ds_dd_dpm(); -void and_l_ais_dd_dpm(); -void and_l_aips_dd_dpm(); -void and_l_pais_dd_dpm(); -void and_l_das_dd_dpm(); -void and_l_dais_dd_dpm(); -void and_l_adr16_dd_dpm(); -void and_l_adr32_dd_dpm(); -void and_l_dpc_dd_dpm(); -void and_l_dpci_dd_dpm(); -void and_l_imm32_dd_dpm(); -void mulu_w_ds_dd_dpm(); -void mulu_w_ais_dd_dpm(); -void mulu_w_aips_dd_dpm(); -void mulu_w_pais_dd_dpm(); -void mulu_w_das_dd_dpm(); -void mulu_w_dais_dd_dpm(); -void mulu_w_adr16_dd_dpm(); -void mulu_w_adr32_dd_dpm(); -void mulu_w_dpc_dd_dpm(); -void mulu_w_dpci_dd_dpm(); -void mulu_w_imm16_dd_dpm(); -void abcd_ds_dd_dpm(); -void abcd_pais_paid_dpm(); -void and_b_dd_ais_dpm(); -void and_b_dd_aips_dpm(); -void and_b_dd_pais_dpm(); -void and_b_dd_das_dpm(); -void and_b_dd_dais_dpm(); -void and_b_dd_adr16_dpm(); -void and_b_dd_adr32_dpm(); -void exg_dd_ds_dpm(); -void exg_ad_as_dpm(); -void and_w_dd_ais_dpm(); -void and_w_dd_aips_dpm(); -void and_w_dd_pais_dpm(); -void and_w_dd_das_dpm(); -void and_w_dd_dais_dpm(); -void and_w_dd_adr16_dpm(); -void and_w_dd_adr32_dpm(); -void exg_dd_as_dpm(); -void and_l_dd_ais_dpm(); -void and_l_dd_aips_dpm(); -void and_l_dd_pais_dpm(); -void and_l_dd_das_dpm(); -void and_l_dd_dais_dpm(); -void and_l_dd_adr16_dpm(); -void and_l_dd_adr32_dpm(); -void muls_w_ds_dd_dpm(); -void muls_w_ais_dd_dpm(); -void muls_w_aips_dd_dpm(); -void muls_w_pais_dd_dpm(); -void muls_w_das_dd_dpm(); -void muls_w_dais_dd_dpm(); -void muls_w_adr16_dd_dpm(); -void muls_w_adr32_dd_dpm(); -void muls_w_dpc_dd_dpm(); -void muls_w_dpci_dd_dpm(); -void muls_w_imm16_dd_dpm(); -void add_b_ds_dd_dpm(); -void add_b_ais_dd_dpm(); -void add_b_aips_dd_dpm(); -void add_b_pais_dd_dpm(); -void add_b_das_dd_dpm(); -void add_b_dais_dd_dpm(); -void add_b_adr16_dd_dpm(); -void add_b_adr32_dd_dpm(); -void add_b_dpc_dd_dpm(); -void add_b_dpci_dd_dpm(); -void add_b_imm8_dd_dpm(); -void add_w_ds_dd_dpm(); -void add_w_as_dd_dpm(); -void add_w_ais_dd_dpm(); -void add_w_aips_dd_dpm(); -void add_w_pais_dd_dpm(); -void add_w_das_dd_dpm(); -void add_w_dais_dd_dpm(); -void add_w_adr16_dd_dpm(); -void add_w_adr32_dd_dpm(); -void add_w_dpc_dd_dpm(); -void add_w_dpci_dd_dpm(); -void add_w_imm16_dd_dpm(); -void add_l_ds_dd_dpm(); -void add_l_as_dd_dpm(); -void add_l_ais_dd_dpm(); -void add_l_aips_dd_dpm(); -void add_l_pais_dd_dpm(); -void add_l_das_dd_dpm(); -void add_l_dais_dd_dpm(); -void add_l_adr16_dd_dpm(); -void add_l_adr32_dd_dpm(); -void add_l_dpc_dd_dpm(); -void add_l_dpci_dd_dpm(); -void add_l_imm32_dd_dpm(); -void adda_w_ds_ad_dpm(); -void adda_w_as_ad_dpm(); -void adda_w_ais_ad_dpm(); -void adda_w_aips_ad_dpm(); -void adda_w_pais_ad_dpm(); -void adda_w_das_ad_dpm(); -void adda_w_dais_ad_dpm(); -void adda_w_adr16_ad_dpm(); -void adda_w_adr32_ad_dpm(); -void adda_w_dpc_ad_dpm(); -void adda_w_dpci_ad_dpm(); -void adda_w_imm16_ad_dpm(); -void addx_b_ds_dd_dpm(); -void addx_b_pais_paid_dpm(); -void add_b_dd_ais_dpm(); -void add_b_dd_aips_dpm(); -void add_b_dd_pais_dpm(); -void add_b_dd_das_dpm(); -void add_b_dd_dais_dpm(); -void add_b_dd_adr16_dpm(); -void add_b_dd_adr32_dpm(); -void addx_w_ds_dd_dpm(); -void addx_w_pais_paid_dpm(); -void add_w_dd_ais_dpm(); -void add_w_dd_aips_dpm(); -void add_w_dd_pais_dpm(); -void add_w_dd_das_dpm(); -void add_w_dd_dais_dpm(); -void add_w_dd_adr16_dpm(); -void add_w_dd_adr32_dpm(); -void addx_l_ds_dd_dpm(); -void addx_l_pais_paid_dpm(); -void add_l_dd_ais_dpm(); -void add_l_dd_aips_dpm(); -void add_l_dd_pais_dpm(); -void add_l_dd_das_dpm(); -void add_l_dd_dais_dpm(); -void add_l_dd_adr16_dpm(); -void add_l_dd_adr32_dpm(); -void adda_l_ds_ad_dpm(); -void adda_l_as_ad_dpm(); -void adda_l_ais_ad_dpm(); -void adda_l_aips_ad_dpm(); -void adda_l_pais_ad_dpm(); -void adda_l_das_ad_dpm(); -void adda_l_dais_ad_dpm(); -void adda_l_adr16_ad_dpm(); -void adda_l_adr32_ad_dpm(); -void adda_l_dpc_ad_dpm(); -void adda_l_dpci_ad_dpm(); -void adda_l_imm32_ad_dpm(); -void asr_b_imm3_ds_dpm(); -void lsr_b_imm3_ds_dpm(); -void roxr_b_imm3_ds_dpm(); -void ror_b_imm3_ds_dpm(); -void asr_b_dd_ds_dpm(); -void lsr_b_dd_ds_dpm(); -void roxr_b_dd_ds_dpm(); -void ror_b_dd_ds_dpm(); -void asr_w_imm3_ds_dpm(); -void lsr_w_imm3_ds_dpm(); -void roxr_w_imm3_ds_dpm(); -void ror_w_imm3_ds_dpm(); -void asr_w_dd_ds_dpm(); -void lsr_w_dd_ds_dpm(); -void roxr_w_dd_ds_dpm(); -void ror_w_dd_ds_dpm(); -void asr_l_imm3_ds_dpm(); -void lsr_l_imm3_ds_dpm(); -void roxr_l_imm3_ds_dpm(); -void ror_l_imm3_ds_dpm(); -void asr_l_dd_ds_dpm(); -void lsr_l_dd_ds_dpm(); -void roxr_l_dd_ds_dpm(); -void ror_l_dd_ds_dpm(); -void asr_ais_dpm(); -void asr_aips_dpm(); -void asr_pais_dpm(); -void asr_das_dpm(); -void asr_dais_dpm(); -void asr_adr16_dpm(); -void asr_adr32_dpm(); -void asl_b_imm3_ds_dpm(); -void lsl_b_imm3_ds_dpm(); -void roxl_b_imm3_ds_dpm(); -void rol_b_imm3_ds_dpm(); -void asl_b_dd_ds_dpm(); -void lsl_b_dd_ds_dpm(); -void roxl_b_dd_ds_dpm(); -void rol_b_dd_ds_dpm(); -void asl_w_imm3_ds_dpm(); -void lsl_w_imm3_ds_dpm(); -void roxl_w_imm3_ds_dpm(); -void rol_w_imm3_ds_dpm(); -void asl_w_dd_ds_dpm(); -void lsl_w_dd_ds_dpm(); -void roxl_w_dd_ds_dpm(); -void rol_w_dd_ds_dpm(); -void asl_l_imm3_ds_dpm(); -void lsl_l_imm3_ds_dpm(); -void roxl_l_imm3_ds_dpm(); -void rol_l_imm3_ds_dpm(); -void asl_l_dd_ds_dpm(); -void lsl_l_dd_ds_dpm(); -void roxl_l_dd_ds_dpm(); -void rol_l_dd_ds_dpm(); -void asl_ais_dpm(); -void asl_aips_dpm(); -void asl_pais_dpm(); -void asl_das_dpm(); -void asl_dais_dpm(); -void asl_adr16_dpm(); -void asl_adr32_dpm(); -void lsr_ais_dpm(); -void lsr_aips_dpm(); -void lsr_pais_dpm(); -void lsr_das_dpm(); -void lsr_dais_dpm(); -void lsr_adr16_dpm(); -void lsr_adr32_dpm(); -void lsl_ais_dpm(); -void lsl_aips_dpm(); -void lsl_pais_dpm(); -void lsl_das_dpm(); -void lsl_dais_dpm(); -void lsl_adr16_dpm(); -void lsl_adr32_dpm(); -void roxr_ais_dpm(); -void roxr_aips_dpm(); -void roxr_pais_dpm(); -void roxr_das_dpm(); -void roxr_dais_dpm(); -void roxr_adr16_dpm(); -void roxr_adr32_dpm(); -void roxl_ais_dpm(); -void roxl_aips_dpm(); -void roxl_pais_dpm(); -void roxl_das_dpm(); -void roxl_dais_dpm(); -void roxl_adr16_dpm(); -void roxl_adr32_dpm(); -void ror_ais_dpm(); -void ror_aips_dpm(); -void ror_pais_dpm(); -void ror_das_dpm(); -void ror_dais_dpm(); -void ror_adr16_dpm(); -void ror_adr32_dpm(); -void rol_ais_dpm(); -void rol_aips_dpm(); -void rol_pais_dpm(); -void rol_das_dpm(); -void rol_dais_dpm(); -void rol_adr16_dpm(); -void rol_adr32_dpm(); -void state_reset_ipm(); -void state_bus_error_ipm(); -void state_address_error_ipm(); -void state_double_fault_ipm(); -void state_illegal_ipm(); -void state_priviledge_ipm(); -void state_trace_ipm(); -void state_linea_ipm(); -void state_linef_ipm(); -void state_interrupt_ipm(); -void ori_b_imm8_ds_ipm(); -void ori_b_imm8_ais_ipm(); -void ori_b_imm8_aips_ipm(); -void ori_b_imm8_pais_ipm(); -void ori_b_imm8_das_ipm(); -void ori_b_imm8_dais_ipm(); -void ori_b_imm8_adr16_ipm(); -void ori_b_imm8_adr32_ipm(); -void ori_imm8_ccr_ipm(); -void ori_w_imm16_ds_ipm(); -void ori_w_imm16_ais_ipm(); -void ori_w_imm16_aips_ipm(); -void ori_w_imm16_pais_ipm(); -void ori_w_imm16_das_ipm(); -void ori_w_imm16_dais_ipm(); -void ori_w_imm16_adr16_ipm(); -void ori_w_imm16_adr32_ipm(); -void ori_i16u_sr_ipm(); -void ori_l_imm32_ds_ipm(); -void ori_l_imm32_ais_ipm(); -void ori_l_imm32_aips_ipm(); -void ori_l_imm32_pais_ipm(); -void ori_l_imm32_das_ipm(); -void ori_l_imm32_dais_ipm(); -void ori_l_imm32_adr16_ipm(); -void ori_l_imm32_adr32_ipm(); -void btst_dd_ds_ipm(); -void movep_w_das_dd_ipm(); -void btst_dd_ais_ipm(); -void btst_dd_aips_ipm(); -void btst_dd_pais_ipm(); -void btst_dd_das_ipm(); -void btst_dd_dais_ipm(); -void btst_dd_adr16_ipm(); -void btst_dd_adr32_ipm(); -void btst_dd_dpc_ipm(); -void btst_dd_dpci_ipm(); -void btst_dd_imm_ipm(); -void bchg_dd_ds_ipm(); -void movep_l_das_dd_ipm(); -void bchg_dd_ais_ipm(); -void bchg_dd_aips_ipm(); -void bchg_dd_pais_ipm(); -void bchg_dd_das_ipm(); -void bchg_dd_dais_ipm(); -void bchg_dd_adr16_ipm(); -void bchg_dd_adr32_ipm(); -void bclr_dd_ds_ipm(); -void movep_w_dd_das_ipm(); -void bclr_dd_ais_ipm(); -void bclr_dd_aips_ipm(); -void bclr_dd_pais_ipm(); -void bclr_dd_das_ipm(); -void bclr_dd_dais_ipm(); -void bclr_dd_adr16_ipm(); -void bclr_dd_adr32_ipm(); -void bset_dd_ds_ipm(); -void movep_l_dd_das_ipm(); -void bset_dd_ais_ipm(); -void bset_dd_aips_ipm(); -void bset_dd_pais_ipm(); -void bset_dd_das_ipm(); -void bset_dd_dais_ipm(); -void bset_dd_adr16_ipm(); -void bset_dd_adr32_ipm(); -void andi_b_imm8_ds_ipm(); -void andi_b_imm8_ais_ipm(); -void andi_b_imm8_aips_ipm(); -void andi_b_imm8_pais_ipm(); -void andi_b_imm8_das_ipm(); -void andi_b_imm8_dais_ipm(); -void andi_b_imm8_adr16_ipm(); -void andi_b_imm8_adr32_ipm(); -void andi_imm8_ccr_ipm(); -void andi_w_imm16_ds_ipm(); -void andi_w_imm16_ais_ipm(); -void andi_w_imm16_aips_ipm(); -void andi_w_imm16_pais_ipm(); -void andi_w_imm16_das_ipm(); -void andi_w_imm16_dais_ipm(); -void andi_w_imm16_adr16_ipm(); -void andi_w_imm16_adr32_ipm(); -void andi_i16u_sr_ipm(); -void andi_l_imm32_ds_ipm(); -void andi_l_imm32_ais_ipm(); -void andi_l_imm32_aips_ipm(); -void andi_l_imm32_pais_ipm(); -void andi_l_imm32_das_ipm(); -void andi_l_imm32_dais_ipm(); -void andi_l_imm32_adr16_ipm(); -void andi_l_imm32_adr32_ipm(); -void subi_b_imm8_ds_ipm(); -void subi_b_imm8_ais_ipm(); -void subi_b_imm8_aips_ipm(); -void subi_b_imm8_pais_ipm(); -void subi_b_imm8_das_ipm(); -void subi_b_imm8_dais_ipm(); -void subi_b_imm8_adr16_ipm(); -void subi_b_imm8_adr32_ipm(); -void subi_w_imm16_ds_ipm(); -void subi_w_imm16_ais_ipm(); -void subi_w_imm16_aips_ipm(); -void subi_w_imm16_pais_ipm(); -void subi_w_imm16_das_ipm(); -void subi_w_imm16_dais_ipm(); -void subi_w_imm16_adr16_ipm(); -void subi_w_imm16_adr32_ipm(); -void subi_l_imm32_ds_ipm(); -void subi_l_imm32_ais_ipm(); -void subi_l_imm32_aips_ipm(); -void subi_l_imm32_pais_ipm(); -void subi_l_imm32_das_ipm(); -void subi_l_imm32_dais_ipm(); -void subi_l_imm32_adr16_ipm(); -void subi_l_imm32_adr32_ipm(); -void addi_b_imm8_ds_ipm(); -void addi_b_imm8_ais_ipm(); -void addi_b_imm8_aips_ipm(); -void addi_b_imm8_pais_ipm(); -void addi_b_imm8_das_ipm(); -void addi_b_imm8_dais_ipm(); -void addi_b_imm8_adr16_ipm(); -void addi_b_imm8_adr32_ipm(); -void addi_w_imm16_ds_ipm(); -void addi_w_imm16_ais_ipm(); -void addi_w_imm16_aips_ipm(); -void addi_w_imm16_pais_ipm(); -void addi_w_imm16_das_ipm(); -void addi_w_imm16_dais_ipm(); -void addi_w_imm16_adr16_ipm(); -void addi_w_imm16_adr32_ipm(); -void addi_l_imm32_ds_ipm(); -void addi_l_imm32_ais_ipm(); -void addi_l_imm32_aips_ipm(); -void addi_l_imm32_pais_ipm(); -void addi_l_imm32_das_ipm(); -void addi_l_imm32_dais_ipm(); -void addi_l_imm32_adr16_ipm(); -void addi_l_imm32_adr32_ipm(); -void btst_imm8_ds_ipm(); -void btst_imm8_ais_ipm(); -void btst_imm8_aips_ipm(); -void btst_imm8_pais_ipm(); -void btst_imm8_das_ipm(); -void btst_imm8_dais_ipm(); -void btst_imm8_adr16_ipm(); -void btst_imm8_adr32_ipm(); -void btst_imm8_dpc_ipm(); -void btst_imm8_dpci_ipm(); -void bchg_imm8_ds_ipm(); -void bchg_imm8_ais_ipm(); -void bchg_imm8_aips_ipm(); -void bchg_imm8_pais_ipm(); -void bchg_imm8_das_ipm(); -void bchg_imm8_dais_ipm(); -void bchg_imm8_adr16_ipm(); -void bchg_imm8_adr32_ipm(); -void bclr_imm8_ds_ipm(); -void bclr_imm8_ais_ipm(); -void bclr_imm8_aips_ipm(); -void bclr_imm8_pais_ipm(); -void bclr_imm8_das_ipm(); -void bclr_imm8_dais_ipm(); -void bclr_imm8_adr16_ipm(); -void bclr_imm8_adr32_ipm(); -void bset_imm8_ds_ipm(); -void bset_imm8_ais_ipm(); -void bset_imm8_aips_ipm(); -void bset_imm8_pais_ipm(); -void bset_imm8_das_ipm(); -void bset_imm8_dais_ipm(); -void bset_imm8_adr16_ipm(); -void bset_imm8_adr32_ipm(); -void eori_b_imm8_ds_ipm(); -void eori_b_imm8_ais_ipm(); -void eori_b_imm8_aips_ipm(); -void eori_b_imm8_pais_ipm(); -void eori_b_imm8_das_ipm(); -void eori_b_imm8_dais_ipm(); -void eori_b_imm8_adr16_ipm(); -void eori_b_imm8_adr32_ipm(); -void eori_imm8_ccr_ipm(); -void eori_w_imm16_ds_ipm(); -void eori_w_imm16_ais_ipm(); -void eori_w_imm16_aips_ipm(); -void eori_w_imm16_pais_ipm(); -void eori_w_imm16_das_ipm(); -void eori_w_imm16_dais_ipm(); -void eori_w_imm16_adr16_ipm(); -void eori_w_imm16_adr32_ipm(); -void eori_i16u_sr_ipm(); -void eori_l_imm32_ds_ipm(); -void eori_l_imm32_ais_ipm(); -void eori_l_imm32_aips_ipm(); -void eori_l_imm32_pais_ipm(); -void eori_l_imm32_das_ipm(); -void eori_l_imm32_dais_ipm(); -void eori_l_imm32_adr16_ipm(); -void eori_l_imm32_adr32_ipm(); -void cmpi_b_imm8_ds_ipm(); -void cmpi_b_imm8_ais_ipm(); -void cmpi_b_imm8_aips_ipm(); -void cmpi_b_imm8_pais_ipm(); -void cmpi_b_imm8_das_ipm(); -void cmpi_b_imm8_dais_ipm(); -void cmpi_b_imm8_adr16_ipm(); -void cmpi_b_imm8_adr32_ipm(); -void cmpi_w_imm16_ds_ipm(); -void cmpi_w_imm16_ais_ipm(); -void cmpi_w_imm16_aips_ipm(); -void cmpi_w_imm16_pais_ipm(); -void cmpi_w_imm16_das_ipm(); -void cmpi_w_imm16_dais_ipm(); -void cmpi_w_imm16_adr16_ipm(); -void cmpi_w_imm16_adr32_ipm(); -void cmpi_l_imm32_ds_ipm(); -void cmpi_l_imm32_ais_ipm(); -void cmpi_l_imm32_aips_ipm(); -void cmpi_l_imm32_pais_ipm(); -void cmpi_l_imm32_das_ipm(); -void cmpi_l_imm32_dais_ipm(); -void cmpi_l_imm32_adr16_ipm(); -void cmpi_l_imm32_adr32_ipm(); -void move_b_ds_dd_ipm(); -void move_b_ais_dd_ipm(); -void move_b_aips_dd_ipm(); -void move_b_pais_dd_ipm(); -void move_b_das_dd_ipm(); -void move_b_dais_dd_ipm(); -void move_b_adr16_dd_ipm(); -void move_b_adr32_dd_ipm(); -void move_b_dpc_dd_ipm(); -void move_b_dpci_dd_ipm(); -void move_b_imm8_dd_ipm(); -void move_b_ds_aid_ipm(); -void move_b_ais_aid_ipm(); -void move_b_aips_aid_ipm(); -void move_b_pais_aid_ipm(); -void move_b_das_aid_ipm(); -void move_b_dais_aid_ipm(); -void move_b_adr16_aid_ipm(); -void move_b_adr32_aid_ipm(); -void move_b_dpc_aid_ipm(); -void move_b_dpci_aid_ipm(); -void move_b_imm8_aid_ipm(); -void move_b_ds_aipd_ipm(); -void move_b_ais_aipd_ipm(); -void move_b_aips_aipd_ipm(); -void move_b_pais_aipd_ipm(); -void move_b_das_aipd_ipm(); -void move_b_dais_aipd_ipm(); -void move_b_adr16_aipd_ipm(); -void move_b_adr32_aipd_ipm(); -void move_b_dpc_aipd_ipm(); -void move_b_dpci_aipd_ipm(); -void move_b_imm8_aipd_ipm(); -void move_b_ds_paid_ipm(); -void move_b_ais_paid_ipm(); -void move_b_aips_paid_ipm(); -void move_b_pais_paid_ipm(); -void move_b_das_paid_ipm(); -void move_b_dais_paid_ipm(); -void move_b_adr16_paid_ipm(); -void move_b_adr32_paid_ipm(); -void move_b_dpc_paid_ipm(); -void move_b_dpci_paid_ipm(); -void move_b_imm8_paid_ipm(); -void move_b_ds_dad_ipm(); -void move_b_ais_dad_ipm(); -void move_b_aips_dad_ipm(); -void move_b_pais_dad_ipm(); -void move_b_das_dad_ipm(); -void move_b_dais_dad_ipm(); -void move_b_adr16_dad_ipm(); -void move_b_adr32_dad_ipm(); -void move_b_dpc_dad_ipm(); -void move_b_dpci_dad_ipm(); -void move_b_imm8_dad_ipm(); -void move_b_ds_daid_ipm(); -void move_b_ais_daid_ipm(); -void move_b_aips_daid_ipm(); -void move_b_pais_daid_ipm(); -void move_b_das_daid_ipm(); -void move_b_dais_daid_ipm(); -void move_b_adr16_daid_ipm(); -void move_b_adr32_daid_ipm(); -void move_b_dpc_daid_ipm(); -void move_b_dpci_daid_ipm(); -void move_b_imm8_daid_ipm(); -void move_b_ds_adr16_ipm(); -void move_b_ais_adr16_ipm(); -void move_b_aips_adr16_ipm(); -void move_b_pais_adr16_ipm(); -void move_b_das_adr16_ipm(); -void move_b_dais_adr16_ipm(); -void move_b_adr16_adr16_ipm(); -void move_b_adr32_adr16_ipm(); -void move_b_dpc_adr16_ipm(); -void move_b_dpci_adr16_ipm(); -void move_b_imm8_adr16_ipm(); -void move_b_ds_adr32_ipm(); -void move_b_ais_adr32_ipm(); -void move_b_aips_adr32_ipm(); -void move_b_pais_adr32_ipm(); -void move_b_das_adr32_ipm(); -void move_b_dais_adr32_ipm(); -void move_b_adr16_adr32_ipm(); -void move_b_adr32_adr32_ipm(); -void move_b_dpc_adr32_ipm(); -void move_b_dpci_adr32_ipm(); -void move_b_imm8_adr32_ipm(); -void move_l_ds_dd_ipm(); -void move_l_as_dd_ipm(); -void move_l_ais_dd_ipm(); -void move_l_aips_dd_ipm(); -void move_l_pais_dd_ipm(); -void move_l_das_dd_ipm(); -void move_l_dais_dd_ipm(); -void move_l_adr16_dd_ipm(); -void move_l_adr32_dd_ipm(); -void move_l_dpc_dd_ipm(); -void move_l_dpci_dd_ipm(); -void move_l_imm32_dd_ipm(); -void movea_l_ds_ad_ipm(); -void movea_l_as_ad_ipm(); -void movea_l_ais_ad_ipm(); -void movea_l_aips_ad_ipm(); -void movea_l_pais_ad_ipm(); -void movea_l_das_ad_ipm(); -void movea_l_dais_ad_ipm(); -void movea_l_adr16_ad_ipm(); -void movea_l_adr32_ad_ipm(); -void movea_l_dpc_ad_ipm(); -void movea_l_dpci_ad_ipm(); -void movea_l_imm32_ad_ipm(); -void move_l_ds_aid_ipm(); -void move_l_as_aid_ipm(); -void move_l_ais_aid_ipm(); -void move_l_aips_aid_ipm(); -void move_l_pais_aid_ipm(); -void move_l_das_aid_ipm(); -void move_l_dais_aid_ipm(); -void move_l_adr16_aid_ipm(); -void move_l_adr32_aid_ipm(); -void move_l_dpc_aid_ipm(); -void move_l_dpci_aid_ipm(); -void move_l_imm32_aid_ipm(); -void move_l_ds_aipd_ipm(); -void move_l_as_aipd_ipm(); -void move_l_ais_aipd_ipm(); -void move_l_aips_aipd_ipm(); -void move_l_pais_aipd_ipm(); -void move_l_das_aipd_ipm(); -void move_l_dais_aipd_ipm(); -void move_l_adr16_aipd_ipm(); -void move_l_adr32_aipd_ipm(); -void move_l_dpc_aipd_ipm(); -void move_l_dpci_aipd_ipm(); -void move_l_imm32_aipd_ipm(); -void move_l_ds_paid_ipm(); -void move_l_as_paid_ipm(); -void move_l_ais_paid_ipm(); -void move_l_aips_paid_ipm(); -void move_l_pais_paid_ipm(); -void move_l_das_paid_ipm(); -void move_l_dais_paid_ipm(); -void move_l_adr16_paid_ipm(); -void move_l_adr32_paid_ipm(); -void move_l_dpc_paid_ipm(); -void move_l_dpci_paid_ipm(); -void move_l_imm32_paid_ipm(); -void move_l_ds_dad_ipm(); -void move_l_as_dad_ipm(); -void move_l_ais_dad_ipm(); -void move_l_aips_dad_ipm(); -void move_l_pais_dad_ipm(); -void move_l_das_dad_ipm(); -void move_l_dais_dad_ipm(); -void move_l_adr16_dad_ipm(); -void move_l_adr32_dad_ipm(); -void move_l_dpc_dad_ipm(); -void move_l_dpci_dad_ipm(); -void move_l_imm32_dad_ipm(); -void move_l_ds_daid_ipm(); -void move_l_as_daid_ipm(); -void move_l_ais_daid_ipm(); -void move_l_aips_daid_ipm(); -void move_l_pais_daid_ipm(); -void move_l_das_daid_ipm(); -void move_l_dais_daid_ipm(); -void move_l_adr16_daid_ipm(); -void move_l_adr32_daid_ipm(); -void move_l_dpc_daid_ipm(); -void move_l_dpci_daid_ipm(); -void move_l_imm32_daid_ipm(); -void move_l_ds_adr16_ipm(); -void move_l_as_adr16_ipm(); -void move_l_ais_adr16_ipm(); -void move_l_aips_adr16_ipm(); -void move_l_pais_adr16_ipm(); -void move_l_das_adr16_ipm(); -void move_l_dais_adr16_ipm(); -void move_l_adr16_adr16_ipm(); -void move_l_adr32_adr16_ipm(); -void move_l_dpc_adr16_ipm(); -void move_l_dpci_adr16_ipm(); -void move_l_imm32_adr16_ipm(); -void move_l_ds_adr32_ipm(); -void move_l_as_adr32_ipm(); -void move_l_ais_adr32_ipm(); -void move_l_aips_adr32_ipm(); -void move_l_pais_adr32_ipm(); -void move_l_das_adr32_ipm(); -void move_l_dais_adr32_ipm(); -void move_l_adr16_adr32_ipm(); -void move_l_adr32_adr32_ipm(); -void move_l_dpc_adr32_ipm(); -void move_l_dpci_adr32_ipm(); -void move_l_imm32_adr32_ipm(); -void move_w_ds_dd_ipm(); -void move_w_as_dd_ipm(); -void move_w_ais_dd_ipm(); -void move_w_aips_dd_ipm(); -void move_w_pais_dd_ipm(); -void move_w_das_dd_ipm(); -void move_w_dais_dd_ipm(); -void move_w_adr16_dd_ipm(); -void move_w_adr32_dd_ipm(); -void move_w_dpc_dd_ipm(); -void move_w_dpci_dd_ipm(); -void move_w_imm16_dd_ipm(); -void movea_w_ds_ad_ipm(); -void movea_w_as_ad_ipm(); -void movea_w_ais_ad_ipm(); -void movea_w_aips_ad_ipm(); -void movea_w_pais_ad_ipm(); -void movea_w_das_ad_ipm(); -void movea_w_dais_ad_ipm(); -void movea_w_adr16_ad_ipm(); -void movea_w_adr32_ad_ipm(); -void movea_w_dpc_ad_ipm(); -void movea_w_dpci_ad_ipm(); -void movea_w_imm16_ad_ipm(); -void move_w_ds_aid_ipm(); -void move_w_as_aid_ipm(); -void move_w_ais_aid_ipm(); -void move_w_aips_aid_ipm(); -void move_w_pais_aid_ipm(); -void move_w_das_aid_ipm(); -void move_w_dais_aid_ipm(); -void move_w_adr16_aid_ipm(); -void move_w_adr32_aid_ipm(); -void move_w_dpc_aid_ipm(); -void move_w_dpci_aid_ipm(); -void move_w_imm16_aid_ipm(); -void move_w_ds_aipd_ipm(); -void move_w_as_aipd_ipm(); -void move_w_ais_aipd_ipm(); -void move_w_aips_aipd_ipm(); -void move_w_pais_aipd_ipm(); -void move_w_das_aipd_ipm(); -void move_w_dais_aipd_ipm(); -void move_w_adr16_aipd_ipm(); -void move_w_adr32_aipd_ipm(); -void move_w_dpc_aipd_ipm(); -void move_w_dpci_aipd_ipm(); -void move_w_imm16_aipd_ipm(); -void move_w_ds_paid_ipm(); -void move_w_as_paid_ipm(); -void move_w_ais_paid_ipm(); -void move_w_aips_paid_ipm(); -void move_w_pais_paid_ipm(); -void move_w_das_paid_ipm(); -void move_w_dais_paid_ipm(); -void move_w_adr16_paid_ipm(); -void move_w_adr32_paid_ipm(); -void move_w_dpc_paid_ipm(); -void move_w_dpci_paid_ipm(); -void move_w_imm16_paid_ipm(); -void move_w_ds_dad_ipm(); -void move_w_as_dad_ipm(); -void move_w_ais_dad_ipm(); -void move_w_aips_dad_ipm(); -void move_w_pais_dad_ipm(); -void move_w_das_dad_ipm(); -void move_w_dais_dad_ipm(); -void move_w_adr16_dad_ipm(); -void move_w_adr32_dad_ipm(); -void move_w_dpc_dad_ipm(); -void move_w_dpci_dad_ipm(); -void move_w_imm16_dad_ipm(); -void move_w_ds_daid_ipm(); -void move_w_as_daid_ipm(); -void move_w_ais_daid_ipm(); -void move_w_aips_daid_ipm(); -void move_w_pais_daid_ipm(); -void move_w_das_daid_ipm(); -void move_w_dais_daid_ipm(); -void move_w_adr16_daid_ipm(); -void move_w_adr32_daid_ipm(); -void move_w_dpc_daid_ipm(); -void move_w_dpci_daid_ipm(); -void move_w_imm16_daid_ipm(); -void move_w_ds_adr16_ipm(); -void move_w_as_adr16_ipm(); -void move_w_ais_adr16_ipm(); -void move_w_aips_adr16_ipm(); -void move_w_pais_adr16_ipm(); -void move_w_das_adr16_ipm(); -void move_w_dais_adr16_ipm(); -void move_w_adr16_adr16_ipm(); -void move_w_adr32_adr16_ipm(); -void move_w_dpc_adr16_ipm(); -void move_w_dpci_adr16_ipm(); -void move_w_imm16_adr16_ipm(); -void move_w_ds_adr32_ipm(); -void move_w_as_adr32_ipm(); -void move_w_ais_adr32_ipm(); -void move_w_aips_adr32_ipm(); -void move_w_pais_adr32_ipm(); -void move_w_das_adr32_ipm(); -void move_w_dais_adr32_ipm(); -void move_w_adr16_adr32_ipm(); -void move_w_adr32_adr32_ipm(); -void move_w_dpc_adr32_ipm(); -void move_w_dpci_adr32_ipm(); -void move_w_imm16_adr32_ipm(); -void negx_b_ds_ipm(); -void negx_b_ais_ipm(); -void negx_b_aips_ipm(); -void negx_b_pais_ipm(); -void negx_b_das_ipm(); -void negx_b_dais_ipm(); -void negx_b_adr16_ipm(); -void negx_b_adr32_ipm(); -void negx_w_ds_ipm(); -void negx_w_ais_ipm(); -void negx_w_aips_ipm(); -void negx_w_pais_ipm(); -void negx_w_das_ipm(); -void negx_w_dais_ipm(); -void negx_w_adr16_ipm(); -void negx_w_adr32_ipm(); -void negx_l_ds_ipm(); -void negx_l_ais_ipm(); -void negx_l_aips_ipm(); -void negx_l_pais_ipm(); -void negx_l_das_ipm(); -void negx_l_dais_ipm(); -void negx_l_adr16_ipm(); -void negx_l_adr32_ipm(); -void move_sr_ds_ipm(); -void move_sr_ais_ipm(); -void move_sr_aips_ipm(); -void move_sr_pais_ipm(); -void move_sr_das_ipm(); -void move_sr_dais_ipm(); -void move_sr_adr16_ipm(); -void move_sr_adr32_ipm(); -void chk_w_ds_dd_ipm(); -void chk_w_ais_dd_ipm(); -void chk_w_aips_dd_ipm(); -void chk_w_pais_dd_ipm(); -void chk_w_das_dd_ipm(); -void chk_w_dais_dd_ipm(); -void chk_w_adr16_dd_ipm(); -void chk_w_adr32_dd_ipm(); -void chk_w_dpc_dd_ipm(); -void chk_w_dpci_dd_ipm(); -void chk_w_imm16_dd_ipm(); -void lea_ais_ad_ipm(); -void lea_das_ad_ipm(); -void lea_dais_ad_ipm(); -void lea_adr16_ad_ipm(); -void lea_adr32_ad_ipm(); -void lea_dpc_ad_ipm(); -void lea_dpci_ad_ipm(); -void clr_b_ds_ipm(); -void clr_b_ais_ipm(); -void clr_b_aips_ipm(); -void clr_b_pais_ipm(); -void clr_b_das_ipm(); -void clr_b_dais_ipm(); -void clr_b_adr16_ipm(); -void clr_b_adr32_ipm(); -void clr_w_ds_ipm(); -void clr_w_ais_ipm(); -void clr_w_aips_ipm(); -void clr_w_pais_ipm(); -void clr_w_das_ipm(); -void clr_w_dais_ipm(); -void clr_w_adr16_ipm(); -void clr_w_adr32_ipm(); -void clr_l_ds_ipm(); -void clr_l_ais_ipm(); -void clr_l_aips_ipm(); -void clr_l_pais_ipm(); -void clr_l_das_ipm(); -void clr_l_dais_ipm(); -void clr_l_adr16_ipm(); -void clr_l_adr32_ipm(); -void neg_b_ds_ipm(); -void neg_b_ais_ipm(); -void neg_b_aips_ipm(); -void neg_b_pais_ipm(); -void neg_b_das_ipm(); -void neg_b_dais_ipm(); -void neg_b_adr16_ipm(); -void neg_b_adr32_ipm(); -void neg_w_ds_ipm(); -void neg_w_ais_ipm(); -void neg_w_aips_ipm(); -void neg_w_pais_ipm(); -void neg_w_das_ipm(); -void neg_w_dais_ipm(); -void neg_w_adr16_ipm(); -void neg_w_adr32_ipm(); -void neg_l_ds_ipm(); -void neg_l_ais_ipm(); -void neg_l_aips_ipm(); -void neg_l_pais_ipm(); -void neg_l_das_ipm(); -void neg_l_dais_ipm(); -void neg_l_adr16_ipm(); -void neg_l_adr32_ipm(); -void move_ds_ccr_ipm(); -void move_ais_ccr_ipm(); -void move_aips_ccr_ipm(); -void move_pais_ccr_ipm(); -void move_das_ccr_ipm(); -void move_dais_ccr_ipm(); -void move_adr16_ccr_ipm(); -void move_adr32_ccr_ipm(); -void move_dpc_ccr_ipm(); -void move_dpci_ccr_ipm(); -void move_imm8_ccr_ipm(); -void not_b_ds_ipm(); -void not_b_ais_ipm(); -void not_b_aips_ipm(); -void not_b_pais_ipm(); -void not_b_das_ipm(); -void not_b_dais_ipm(); -void not_b_adr16_ipm(); -void not_b_adr32_ipm(); -void not_w_ds_ipm(); -void not_w_ais_ipm(); -void not_w_aips_ipm(); -void not_w_pais_ipm(); -void not_w_das_ipm(); -void not_w_dais_ipm(); -void not_w_adr16_ipm(); -void not_w_adr32_ipm(); -void not_l_ds_ipm(); -void not_l_ais_ipm(); -void not_l_aips_ipm(); -void not_l_pais_ipm(); -void not_l_das_ipm(); -void not_l_dais_ipm(); -void not_l_adr16_ipm(); -void not_l_adr32_ipm(); -void move_ds_sr_ipm(); -void move_ais_sr_ipm(); -void move_aips_sr_ipm(); -void move_pais_sr_ipm(); -void move_das_sr_ipm(); -void move_dais_sr_ipm(); -void move_adr16_sr_ipm(); -void move_adr32_sr_ipm(); -void move_dpc_sr_ipm(); -void move_dpci_sr_ipm(); -void move_i16u_sr_ipm(); -void nbcd_b_ds_ipm(); -void nbcd_b_ais_ipm(); -void nbcd_b_aips_ipm(); -void nbcd_b_pais_ipm(); -void nbcd_b_das_ipm(); -void nbcd_b_dais_ipm(); -void nbcd_b_adr16_ipm(); -void nbcd_b_adr32_ipm(); -void swap_ds_ipm(); -void pea_ais_ipm(); -void pea_das_ipm(); -void pea_dais_ipm(); -void pea_adr16_ipm(); -void pea_adr32_ipm(); -void pea_dpc_ipm(); -void pea_dpci_ipm(); -void ext_w_ds_ipm(); -void movem_w_list_ais_ipm(); -void movem_w_listp_pais_ipm(); -void movem_w_list_das_ipm(); -void movem_w_list_dais_ipm(); -void movem_w_list_adr16_ipm(); -void movem_w_list_adr32_ipm(); -void ext_l_ds_ipm(); -void movem_l_list_ais_ipm(); -void movem_l_listp_pais_ipm(); -void movem_l_list_das_ipm(); -void movem_l_list_dais_ipm(); -void movem_l_list_adr16_ipm(); -void movem_l_list_adr32_ipm(); -void tst_b_ds_ipm(); -void tst_b_ais_ipm(); -void tst_b_aips_ipm(); -void tst_b_pais_ipm(); -void tst_b_das_ipm(); -void tst_b_dais_ipm(); -void tst_b_adr16_ipm(); -void tst_b_adr32_ipm(); -void tst_w_ds_ipm(); -void tst_w_ais_ipm(); -void tst_w_aips_ipm(); -void tst_w_pais_ipm(); -void tst_w_das_ipm(); -void tst_w_dais_ipm(); -void tst_w_adr16_ipm(); -void tst_w_adr32_ipm(); -void tst_l_ds_ipm(); -void tst_l_ais_ipm(); -void tst_l_aips_ipm(); -void tst_l_pais_ipm(); -void tst_l_das_ipm(); -void tst_l_dais_ipm(); -void tst_l_adr16_ipm(); -void tst_l_adr32_ipm(); -void tas_ds_ipm(); -void tas_ais_ipm(); -void tas_aips_ipm(); -void tas_pais_ipm(); -void tas_das_ipm(); -void tas_dais_ipm(); -void tas_adr16_ipm(); -void tas_adr32_ipm(); -void movem_w_ais_list_ipm(); -void movem_w_aips_list_ipm(); -void movem_w_das_list_ipm(); -void movem_w_dais_list_ipm(); -void movem_w_adr16_list_ipm(); -void movem_w_adr32_list_ipm(); -void movem_w_dpc_list_ipm(); -void movem_w_dpci_list_ipm(); -void movem_l_ais_list_ipm(); -void movem_l_aips_list_ipm(); -void movem_l_das_list_ipm(); -void movem_l_dais_list_ipm(); -void movem_l_adr16_list_ipm(); -void movem_l_adr32_list_ipm(); -void movem_l_dpc_list_ipm(); -void movem_l_dpci_list_ipm(); -void trap_imm4_ipm(); -void link_as_imm16_ipm(); -void unlk_as_ipm(); -void move_as_usp_ipm(); -void move_usp_as_ipm(); -void reset_ipm(); -void nop_ipm(); -void stop_i16u_ipm(); -void rte_ipm(); -void rts_ipm(); -void trapv_ipm(); -void rtr_ipm(); -void jsr_ais_ipm(); -void jsr_das_ipm(); -void jsr_dais_ipm(); -void jsr_adr16_ipm(); -void jsr_adr32_ipm(); -void jsr_dpc_ipm(); -void jsr_dpci_ipm(); -void jmp_ais_ipm(); -void jmp_das_ipm(); -void jmp_dais_ipm(); -void jmp_adr16_ipm(); -void jmp_adr32_ipm(); -void jmp_dpc_ipm(); -void jmp_dpci_ipm(); -void addq_b_imm3_ds_ipm(); -void addq_b_imm3_ais_ipm(); -void addq_b_imm3_aips_ipm(); -void addq_b_imm3_pais_ipm(); -void addq_b_imm3_das_ipm(); -void addq_b_imm3_dais_ipm(); -void addq_b_imm3_adr16_ipm(); -void addq_b_imm3_adr32_ipm(); -void addq_w_imm3_ds_ipm(); -void addq_w_imm3_as_ipm(); -void addq_w_imm3_ais_ipm(); -void addq_w_imm3_aips_ipm(); -void addq_w_imm3_pais_ipm(); -void addq_w_imm3_das_ipm(); -void addq_w_imm3_dais_ipm(); -void addq_w_imm3_adr16_ipm(); -void addq_w_imm3_adr32_ipm(); -void addq_l_imm3_ds_ipm(); -void addq_l_imm3_as_ipm(); -void addq_l_imm3_ais_ipm(); -void addq_l_imm3_aips_ipm(); -void addq_l_imm3_pais_ipm(); -void addq_l_imm3_das_ipm(); -void addq_l_imm3_dais_ipm(); -void addq_l_imm3_adr16_ipm(); -void addq_l_imm3_adr32_ipm(); -void st_ds_ipm(); -void dbt_ds_rel16_ipm(); -void st_ais_ipm(); -void st_aips_ipm(); -void st_pais_ipm(); -void st_das_ipm(); -void st_dais_ipm(); -void st_adr16_ipm(); -void st_adr32_ipm(); -void subq_b_imm3_ds_ipm(); -void subq_b_imm3_ais_ipm(); -void subq_b_imm3_aips_ipm(); -void subq_b_imm3_pais_ipm(); -void subq_b_imm3_das_ipm(); -void subq_b_imm3_dais_ipm(); -void subq_b_imm3_adr16_ipm(); -void subq_b_imm3_adr32_ipm(); -void subq_w_imm3_ds_ipm(); -void subq_w_imm3_as_ipm(); -void subq_w_imm3_ais_ipm(); -void subq_w_imm3_aips_ipm(); -void subq_w_imm3_pais_ipm(); -void subq_w_imm3_das_ipm(); -void subq_w_imm3_dais_ipm(); -void subq_w_imm3_adr16_ipm(); -void subq_w_imm3_adr32_ipm(); -void subq_l_imm3_ds_ipm(); -void subq_l_imm3_as_ipm(); -void subq_l_imm3_ais_ipm(); -void subq_l_imm3_aips_ipm(); -void subq_l_imm3_pais_ipm(); -void subq_l_imm3_das_ipm(); -void subq_l_imm3_dais_ipm(); -void subq_l_imm3_adr16_ipm(); -void subq_l_imm3_adr32_ipm(); -void sf_ds_ipm(); -void dbra_ds_rel16_ipm(); -void sf_ais_ipm(); -void sf_aips_ipm(); -void sf_pais_ipm(); -void sf_das_ipm(); -void sf_dais_ipm(); -void sf_adr16_ipm(); -void sf_adr32_ipm(); -void shi_ds_ipm(); -void dbhi_ds_rel16_ipm(); -void shi_ais_ipm(); -void shi_aips_ipm(); -void shi_pais_ipm(); -void shi_das_ipm(); -void shi_dais_ipm(); -void shi_adr16_ipm(); -void shi_adr32_ipm(); -void sls_ds_ipm(); -void dbls_ds_rel16_ipm(); -void sls_ais_ipm(); -void sls_aips_ipm(); -void sls_pais_ipm(); -void sls_das_ipm(); -void sls_dais_ipm(); -void sls_adr16_ipm(); -void sls_adr32_ipm(); -void scc_ds_ipm(); -void dbcc_ds_rel16_ipm(); -void scc_ais_ipm(); -void scc_aips_ipm(); -void scc_pais_ipm(); -void scc_das_ipm(); -void scc_dais_ipm(); -void scc_adr16_ipm(); -void scc_adr32_ipm(); -void scs_ds_ipm(); -void dbcs_ds_rel16_ipm(); -void scs_ais_ipm(); -void scs_aips_ipm(); -void scs_pais_ipm(); -void scs_das_ipm(); -void scs_dais_ipm(); -void scs_adr16_ipm(); -void scs_adr32_ipm(); -void sne_ds_ipm(); -void dbne_ds_rel16_ipm(); -void sne_ais_ipm(); -void sne_aips_ipm(); -void sne_pais_ipm(); -void sne_das_ipm(); -void sne_dais_ipm(); -void sne_adr16_ipm(); -void sne_adr32_ipm(); -void seq_ds_ipm(); -void dbeq_ds_rel16_ipm(); -void seq_ais_ipm(); -void seq_aips_ipm(); -void seq_pais_ipm(); -void seq_das_ipm(); -void seq_dais_ipm(); -void seq_adr16_ipm(); -void seq_adr32_ipm(); -void svc_ds_ipm(); -void dbvc_ds_rel16_ipm(); -void svc_ais_ipm(); -void svc_aips_ipm(); -void svc_pais_ipm(); -void svc_das_ipm(); -void svc_dais_ipm(); -void svc_adr16_ipm(); -void svc_adr32_ipm(); -void svs_ds_ipm(); -void dbvs_ds_rel16_ipm(); -void svs_ais_ipm(); -void svs_aips_ipm(); -void svs_pais_ipm(); -void svs_das_ipm(); -void svs_dais_ipm(); -void svs_adr16_ipm(); -void svs_adr32_ipm(); -void spl_ds_ipm(); -void dbpl_ds_rel16_ipm(); -void spl_ais_ipm(); -void spl_aips_ipm(); -void spl_pais_ipm(); -void spl_das_ipm(); -void spl_dais_ipm(); -void spl_adr16_ipm(); -void spl_adr32_ipm(); -void smi_ds_ipm(); -void dbmi_ds_rel16_ipm(); -void smi_ais_ipm(); -void smi_aips_ipm(); -void smi_pais_ipm(); -void smi_das_ipm(); -void smi_dais_ipm(); -void smi_adr16_ipm(); -void smi_adr32_ipm(); -void sge_ds_ipm(); -void dbge_ds_rel16_ipm(); -void sge_ais_ipm(); -void sge_aips_ipm(); -void sge_pais_ipm(); -void sge_das_ipm(); -void sge_dais_ipm(); -void sge_adr16_ipm(); -void sge_adr32_ipm(); -void slt_ds_ipm(); -void dblt_ds_rel16_ipm(); -void slt_ais_ipm(); -void slt_aips_ipm(); -void slt_pais_ipm(); -void slt_das_ipm(); -void slt_dais_ipm(); -void slt_adr16_ipm(); -void slt_adr32_ipm(); -void sgt_ds_ipm(); -void dbgt_ds_rel16_ipm(); -void sgt_ais_ipm(); -void sgt_aips_ipm(); -void sgt_pais_ipm(); -void sgt_das_ipm(); -void sgt_dais_ipm(); -void sgt_adr16_ipm(); -void sgt_adr32_ipm(); -void sle_ds_ipm(); -void dble_ds_rel16_ipm(); -void sle_ais_ipm(); -void sle_aips_ipm(); -void sle_pais_ipm(); -void sle_das_ipm(); -void sle_dais_ipm(); -void sle_adr16_ipm(); -void sle_adr32_ipm(); -void bra_rel16_ipm(); -void bra_rel8_ipm(); -void bsr_rel16_ipm(); -void bsr_rel8_ipm(); -void bhi_rel16_ipm(); -void bhi_rel8_ipm(); -void bls_rel16_ipm(); -void bls_rel8_ipm(); -void bcc_rel16_ipm(); -void bcc_rel8_ipm(); -void bcs_rel16_ipm(); -void bcs_rel8_ipm(); -void bne_rel16_ipm(); -void bne_rel8_ipm(); -void beq_rel16_ipm(); -void beq_rel8_ipm(); -void bvc_rel16_ipm(); -void bvc_rel8_ipm(); -void bvs_rel16_ipm(); -void bvs_rel8_ipm(); -void bpl_rel16_ipm(); -void bpl_rel8_ipm(); -void bmi_rel16_ipm(); -void bmi_rel8_ipm(); -void bge_rel16_ipm(); -void bge_rel8_ipm(); -void blt_rel16_ipm(); -void blt_rel8_ipm(); -void bgt_rel16_ipm(); -void bgt_rel8_ipm(); -void ble_rel16_ipm(); -void ble_rel8_ipm(); -void moveq_imm8o_dd_ipm(); -void or_b_ds_dd_ipm(); -void or_b_ais_dd_ipm(); -void or_b_aips_dd_ipm(); -void or_b_pais_dd_ipm(); -void or_b_das_dd_ipm(); -void or_b_dais_dd_ipm(); -void or_b_adr16_dd_ipm(); -void or_b_adr32_dd_ipm(); -void or_b_dpc_dd_ipm(); -void or_b_dpci_dd_ipm(); -void or_b_imm8_dd_ipm(); -void or_w_ds_dd_ipm(); -void or_w_ais_dd_ipm(); -void or_w_aips_dd_ipm(); -void or_w_pais_dd_ipm(); -void or_w_das_dd_ipm(); -void or_w_dais_dd_ipm(); -void or_w_adr16_dd_ipm(); -void or_w_adr32_dd_ipm(); -void or_w_dpc_dd_ipm(); -void or_w_dpci_dd_ipm(); -void or_w_imm16_dd_ipm(); -void or_l_ds_dd_ipm(); -void or_l_ais_dd_ipm(); -void or_l_aips_dd_ipm(); -void or_l_pais_dd_ipm(); -void or_l_das_dd_ipm(); -void or_l_dais_dd_ipm(); -void or_l_adr16_dd_ipm(); -void or_l_adr32_dd_ipm(); -void or_l_dpc_dd_ipm(); -void or_l_dpci_dd_ipm(); -void or_l_imm32_dd_ipm(); -void divu_w_ds_dd_ipm(); -void divu_w_ais_dd_ipm(); -void divu_w_aips_dd_ipm(); -void divu_w_pais_dd_ipm(); -void divu_w_das_dd_ipm(); -void divu_w_dais_dd_ipm(); -void divu_w_adr16_dd_ipm(); -void divu_w_adr32_dd_ipm(); -void divu_w_dpc_dd_ipm(); -void divu_w_dpci_dd_ipm(); -void divu_w_imm16_dd_ipm(); -void sbcd_ds_dd_ipm(); -void sbcd_pais_paid_ipm(); -void or_b_dd_ais_ipm(); -void or_b_dd_aips_ipm(); -void or_b_dd_pais_ipm(); -void or_b_dd_das_ipm(); -void or_b_dd_dais_ipm(); -void or_b_dd_adr16_ipm(); -void or_b_dd_adr32_ipm(); -void or_w_dd_ais_ipm(); -void or_w_dd_aips_ipm(); -void or_w_dd_pais_ipm(); -void or_w_dd_das_ipm(); -void or_w_dd_dais_ipm(); -void or_w_dd_adr16_ipm(); -void or_w_dd_adr32_ipm(); -void or_l_dd_ais_ipm(); -void or_l_dd_aips_ipm(); -void or_l_dd_pais_ipm(); -void or_l_dd_das_ipm(); -void or_l_dd_dais_ipm(); -void or_l_dd_adr16_ipm(); -void or_l_dd_adr32_ipm(); -void divs_w_ds_dd_ipm(); -void divs_w_ais_dd_ipm(); -void divs_w_aips_dd_ipm(); -void divs_w_pais_dd_ipm(); -void divs_w_das_dd_ipm(); -void divs_w_dais_dd_ipm(); -void divs_w_adr16_dd_ipm(); -void divs_w_adr32_dd_ipm(); -void divs_w_dpc_dd_ipm(); -void divs_w_dpci_dd_ipm(); -void divs_w_imm16_dd_ipm(); -void sub_b_ds_dd_ipm(); -void sub_b_ais_dd_ipm(); -void sub_b_aips_dd_ipm(); -void sub_b_pais_dd_ipm(); -void sub_b_das_dd_ipm(); -void sub_b_dais_dd_ipm(); -void sub_b_adr16_dd_ipm(); -void sub_b_adr32_dd_ipm(); -void sub_b_dpc_dd_ipm(); -void sub_b_dpci_dd_ipm(); -void sub_b_imm8_dd_ipm(); -void sub_w_ds_dd_ipm(); -void sub_w_as_dd_ipm(); -void sub_w_ais_dd_ipm(); -void sub_w_aips_dd_ipm(); -void sub_w_pais_dd_ipm(); -void sub_w_das_dd_ipm(); -void sub_w_dais_dd_ipm(); -void sub_w_adr16_dd_ipm(); -void sub_w_adr32_dd_ipm(); -void sub_w_dpc_dd_ipm(); -void sub_w_dpci_dd_ipm(); -void sub_w_imm16_dd_ipm(); -void sub_l_ds_dd_ipm(); -void sub_l_as_dd_ipm(); -void sub_l_ais_dd_ipm(); -void sub_l_aips_dd_ipm(); -void sub_l_pais_dd_ipm(); -void sub_l_das_dd_ipm(); -void sub_l_dais_dd_ipm(); -void sub_l_adr16_dd_ipm(); -void sub_l_adr32_dd_ipm(); -void sub_l_dpc_dd_ipm(); -void sub_l_dpci_dd_ipm(); -void sub_l_imm32_dd_ipm(); -void suba_w_ds_ad_ipm(); -void suba_w_as_ad_ipm(); -void suba_w_ais_ad_ipm(); -void suba_w_aips_ad_ipm(); -void suba_w_pais_ad_ipm(); -void suba_w_das_ad_ipm(); -void suba_w_dais_ad_ipm(); -void suba_w_adr16_ad_ipm(); -void suba_w_adr32_ad_ipm(); -void suba_w_dpc_ad_ipm(); -void suba_w_dpci_ad_ipm(); -void suba_w_imm16_ad_ipm(); -void subx_b_ds_dd_ipm(); -void subx_b_pais_paid_ipm(); -void sub_b_dd_ais_ipm(); -void sub_b_dd_aips_ipm(); -void sub_b_dd_pais_ipm(); -void sub_b_dd_das_ipm(); -void sub_b_dd_dais_ipm(); -void sub_b_dd_adr16_ipm(); -void sub_b_dd_adr32_ipm(); -void subx_w_ds_dd_ipm(); -void subx_w_pais_paid_ipm(); -void sub_w_dd_ais_ipm(); -void sub_w_dd_aips_ipm(); -void sub_w_dd_pais_ipm(); -void sub_w_dd_das_ipm(); -void sub_w_dd_dais_ipm(); -void sub_w_dd_adr16_ipm(); -void sub_w_dd_adr32_ipm(); -void subx_l_ds_dd_ipm(); -void subx_l_pais_paid_ipm(); -void sub_l_dd_ais_ipm(); -void sub_l_dd_aips_ipm(); -void sub_l_dd_pais_ipm(); -void sub_l_dd_das_ipm(); -void sub_l_dd_dais_ipm(); -void sub_l_dd_adr16_ipm(); -void sub_l_dd_adr32_ipm(); -void suba_l_ds_ad_ipm(); -void suba_l_as_ad_ipm(); -void suba_l_ais_ad_ipm(); -void suba_l_aips_ad_ipm(); -void suba_l_pais_ad_ipm(); -void suba_l_das_ad_ipm(); -void suba_l_dais_ad_ipm(); -void suba_l_adr16_ad_ipm(); -void suba_l_adr32_ad_ipm(); -void suba_l_dpc_ad_ipm(); -void suba_l_dpci_ad_ipm(); -void suba_l_imm32_ad_ipm(); -void cmp_b_ds_dd_ipm(); -void cmp_b_ais_dd_ipm(); -void cmp_b_aips_dd_ipm(); -void cmp_b_pais_dd_ipm(); -void cmp_b_das_dd_ipm(); -void cmp_b_dais_dd_ipm(); -void cmp_b_adr16_dd_ipm(); -void cmp_b_adr32_dd_ipm(); -void cmp_b_dpc_dd_ipm(); -void cmp_b_dpci_dd_ipm(); -void cmp_b_imm8_dd_ipm(); -void cmp_w_ds_dd_ipm(); -void cmp_w_as_dd_ipm(); -void cmp_w_ais_dd_ipm(); -void cmp_w_aips_dd_ipm(); -void cmp_w_pais_dd_ipm(); -void cmp_w_das_dd_ipm(); -void cmp_w_dais_dd_ipm(); -void cmp_w_adr16_dd_ipm(); -void cmp_w_adr32_dd_ipm(); -void cmp_w_dpc_dd_ipm(); -void cmp_w_dpci_dd_ipm(); -void cmp_w_imm16_dd_ipm(); -void cmp_l_ds_dd_ipm(); -void cmp_l_as_dd_ipm(); -void cmp_l_ais_dd_ipm(); -void cmp_l_aips_dd_ipm(); -void cmp_l_pais_dd_ipm(); -void cmp_l_das_dd_ipm(); -void cmp_l_dais_dd_ipm(); -void cmp_l_adr16_dd_ipm(); -void cmp_l_adr32_dd_ipm(); -void cmp_l_dpc_dd_ipm(); -void cmp_l_dpci_dd_ipm(); -void cmp_l_imm32_dd_ipm(); -void cmpa_w_ds_ad_ipm(); -void cmpa_w_as_ad_ipm(); -void cmpa_w_ais_ad_ipm(); -void cmpa_w_aips_ad_ipm(); -void cmpa_w_pais_ad_ipm(); -void cmpa_w_das_ad_ipm(); -void cmpa_w_dais_ad_ipm(); -void cmpa_w_adr16_ad_ipm(); -void cmpa_w_adr32_ad_ipm(); -void cmpa_w_dpc_ad_ipm(); -void cmpa_w_dpci_ad_ipm(); -void cmpa_w_imm16_ad_ipm(); -void eor_b_dd_ds_ipm(); -void cmpm_b_aips_aipd_ipm(); -void eor_b_dd_ais_ipm(); -void eor_b_dd_aips_ipm(); -void eor_b_dd_pais_ipm(); -void eor_b_dd_das_ipm(); -void eor_b_dd_dais_ipm(); -void eor_b_dd_adr16_ipm(); -void eor_b_dd_adr32_ipm(); -void eor_w_dd_ds_ipm(); -void cmpm_w_aips_aipd_ipm(); -void eor_w_dd_ais_ipm(); -void eor_w_dd_aips_ipm(); -void eor_w_dd_pais_ipm(); -void eor_w_dd_das_ipm(); -void eor_w_dd_dais_ipm(); -void eor_w_dd_adr16_ipm(); -void eor_w_dd_adr32_ipm(); -void eor_l_dd_ds_ipm(); -void cmpm_l_aips_aipd_ipm(); -void eor_l_dd_ais_ipm(); -void eor_l_dd_aips_ipm(); -void eor_l_dd_pais_ipm(); -void eor_l_dd_das_ipm(); -void eor_l_dd_dais_ipm(); -void eor_l_dd_adr16_ipm(); -void eor_l_dd_adr32_ipm(); -void cmpa_l_ds_ad_ipm(); -void cmpa_l_as_ad_ipm(); -void cmpa_l_ais_ad_ipm(); -void cmpa_l_aips_ad_ipm(); -void cmpa_l_pais_ad_ipm(); -void cmpa_l_das_ad_ipm(); -void cmpa_l_dais_ad_ipm(); -void cmpa_l_adr16_ad_ipm(); -void cmpa_l_adr32_ad_ipm(); -void cmpa_l_dpc_ad_ipm(); -void cmpa_l_dpci_ad_ipm(); -void cmpa_l_imm32_ad_ipm(); -void and_b_ds_dd_ipm(); -void and_b_ais_dd_ipm(); -void and_b_aips_dd_ipm(); -void and_b_pais_dd_ipm(); -void and_b_das_dd_ipm(); -void and_b_dais_dd_ipm(); -void and_b_adr16_dd_ipm(); -void and_b_adr32_dd_ipm(); -void and_b_dpc_dd_ipm(); -void and_b_dpci_dd_ipm(); -void and_b_imm8_dd_ipm(); -void and_w_ds_dd_ipm(); -void and_w_ais_dd_ipm(); -void and_w_aips_dd_ipm(); -void and_w_pais_dd_ipm(); -void and_w_das_dd_ipm(); -void and_w_dais_dd_ipm(); -void and_w_adr16_dd_ipm(); -void and_w_adr32_dd_ipm(); -void and_w_dpc_dd_ipm(); -void and_w_dpci_dd_ipm(); -void and_w_imm16_dd_ipm(); -void and_l_ds_dd_ipm(); -void and_l_ais_dd_ipm(); -void and_l_aips_dd_ipm(); -void and_l_pais_dd_ipm(); -void and_l_das_dd_ipm(); -void and_l_dais_dd_ipm(); -void and_l_adr16_dd_ipm(); -void and_l_adr32_dd_ipm(); -void and_l_dpc_dd_ipm(); -void and_l_dpci_dd_ipm(); -void and_l_imm32_dd_ipm(); -void mulu_w_ds_dd_ipm(); -void mulu_w_ais_dd_ipm(); -void mulu_w_aips_dd_ipm(); -void mulu_w_pais_dd_ipm(); -void mulu_w_das_dd_ipm(); -void mulu_w_dais_dd_ipm(); -void mulu_w_adr16_dd_ipm(); -void mulu_w_adr32_dd_ipm(); -void mulu_w_dpc_dd_ipm(); -void mulu_w_dpci_dd_ipm(); -void mulu_w_imm16_dd_ipm(); -void abcd_ds_dd_ipm(); -void abcd_pais_paid_ipm(); -void and_b_dd_ais_ipm(); -void and_b_dd_aips_ipm(); -void and_b_dd_pais_ipm(); -void and_b_dd_das_ipm(); -void and_b_dd_dais_ipm(); -void and_b_dd_adr16_ipm(); -void and_b_dd_adr32_ipm(); -void exg_dd_ds_ipm(); -void exg_ad_as_ipm(); -void and_w_dd_ais_ipm(); -void and_w_dd_aips_ipm(); -void and_w_dd_pais_ipm(); -void and_w_dd_das_ipm(); -void and_w_dd_dais_ipm(); -void and_w_dd_adr16_ipm(); -void and_w_dd_adr32_ipm(); -void exg_dd_as_ipm(); -void and_l_dd_ais_ipm(); -void and_l_dd_aips_ipm(); -void and_l_dd_pais_ipm(); -void and_l_dd_das_ipm(); -void and_l_dd_dais_ipm(); -void and_l_dd_adr16_ipm(); -void and_l_dd_adr32_ipm(); -void muls_w_ds_dd_ipm(); -void muls_w_ais_dd_ipm(); -void muls_w_aips_dd_ipm(); -void muls_w_pais_dd_ipm(); -void muls_w_das_dd_ipm(); -void muls_w_dais_dd_ipm(); -void muls_w_adr16_dd_ipm(); -void muls_w_adr32_dd_ipm(); -void muls_w_dpc_dd_ipm(); -void muls_w_dpci_dd_ipm(); -void muls_w_imm16_dd_ipm(); -void add_b_ds_dd_ipm(); -void add_b_ais_dd_ipm(); -void add_b_aips_dd_ipm(); -void add_b_pais_dd_ipm(); -void add_b_das_dd_ipm(); -void add_b_dais_dd_ipm(); -void add_b_adr16_dd_ipm(); -void add_b_adr32_dd_ipm(); -void add_b_dpc_dd_ipm(); -void add_b_dpci_dd_ipm(); -void add_b_imm8_dd_ipm(); -void add_w_ds_dd_ipm(); -void add_w_as_dd_ipm(); -void add_w_ais_dd_ipm(); -void add_w_aips_dd_ipm(); -void add_w_pais_dd_ipm(); -void add_w_das_dd_ipm(); -void add_w_dais_dd_ipm(); -void add_w_adr16_dd_ipm(); -void add_w_adr32_dd_ipm(); -void add_w_dpc_dd_ipm(); -void add_w_dpci_dd_ipm(); -void add_w_imm16_dd_ipm(); -void add_l_ds_dd_ipm(); -void add_l_as_dd_ipm(); -void add_l_ais_dd_ipm(); -void add_l_aips_dd_ipm(); -void add_l_pais_dd_ipm(); -void add_l_das_dd_ipm(); -void add_l_dais_dd_ipm(); -void add_l_adr16_dd_ipm(); -void add_l_adr32_dd_ipm(); -void add_l_dpc_dd_ipm(); -void add_l_dpci_dd_ipm(); -void add_l_imm32_dd_ipm(); -void adda_w_ds_ad_ipm(); -void adda_w_as_ad_ipm(); -void adda_w_ais_ad_ipm(); -void adda_w_aips_ad_ipm(); -void adda_w_pais_ad_ipm(); -void adda_w_das_ad_ipm(); -void adda_w_dais_ad_ipm(); -void adda_w_adr16_ad_ipm(); -void adda_w_adr32_ad_ipm(); -void adda_w_dpc_ad_ipm(); -void adda_w_dpci_ad_ipm(); -void adda_w_imm16_ad_ipm(); -void addx_b_ds_dd_ipm(); -void addx_b_pais_paid_ipm(); -void add_b_dd_ais_ipm(); -void add_b_dd_aips_ipm(); -void add_b_dd_pais_ipm(); -void add_b_dd_das_ipm(); -void add_b_dd_dais_ipm(); -void add_b_dd_adr16_ipm(); -void add_b_dd_adr32_ipm(); -void addx_w_ds_dd_ipm(); -void addx_w_pais_paid_ipm(); -void add_w_dd_ais_ipm(); -void add_w_dd_aips_ipm(); -void add_w_dd_pais_ipm(); -void add_w_dd_das_ipm(); -void add_w_dd_dais_ipm(); -void add_w_dd_adr16_ipm(); -void add_w_dd_adr32_ipm(); -void addx_l_ds_dd_ipm(); -void addx_l_pais_paid_ipm(); -void add_l_dd_ais_ipm(); -void add_l_dd_aips_ipm(); -void add_l_dd_pais_ipm(); -void add_l_dd_das_ipm(); -void add_l_dd_dais_ipm(); -void add_l_dd_adr16_ipm(); -void add_l_dd_adr32_ipm(); -void adda_l_ds_ad_ipm(); -void adda_l_as_ad_ipm(); -void adda_l_ais_ad_ipm(); -void adda_l_aips_ad_ipm(); -void adda_l_pais_ad_ipm(); -void adda_l_das_ad_ipm(); -void adda_l_dais_ad_ipm(); -void adda_l_adr16_ad_ipm(); -void adda_l_adr32_ad_ipm(); -void adda_l_dpc_ad_ipm(); -void adda_l_dpci_ad_ipm(); -void adda_l_imm32_ad_ipm(); -void asr_b_imm3_ds_ipm(); -void lsr_b_imm3_ds_ipm(); -void roxr_b_imm3_ds_ipm(); -void ror_b_imm3_ds_ipm(); -void asr_b_dd_ds_ipm(); -void lsr_b_dd_ds_ipm(); -void roxr_b_dd_ds_ipm(); -void ror_b_dd_ds_ipm(); -void asr_w_imm3_ds_ipm(); -void lsr_w_imm3_ds_ipm(); -void roxr_w_imm3_ds_ipm(); -void ror_w_imm3_ds_ipm(); -void asr_w_dd_ds_ipm(); -void lsr_w_dd_ds_ipm(); -void roxr_w_dd_ds_ipm(); -void ror_w_dd_ds_ipm(); -void asr_l_imm3_ds_ipm(); -void lsr_l_imm3_ds_ipm(); -void roxr_l_imm3_ds_ipm(); -void ror_l_imm3_ds_ipm(); -void asr_l_dd_ds_ipm(); -void lsr_l_dd_ds_ipm(); -void roxr_l_dd_ds_ipm(); -void ror_l_dd_ds_ipm(); -void asr_ais_ipm(); -void asr_aips_ipm(); -void asr_pais_ipm(); -void asr_das_ipm(); -void asr_dais_ipm(); -void asr_adr16_ipm(); -void asr_adr32_ipm(); -void asl_b_imm3_ds_ipm(); -void lsl_b_imm3_ds_ipm(); -void roxl_b_imm3_ds_ipm(); -void rol_b_imm3_ds_ipm(); -void asl_b_dd_ds_ipm(); -void lsl_b_dd_ds_ipm(); -void roxl_b_dd_ds_ipm(); -void rol_b_dd_ds_ipm(); -void asl_w_imm3_ds_ipm(); -void lsl_w_imm3_ds_ipm(); -void roxl_w_imm3_ds_ipm(); -void rol_w_imm3_ds_ipm(); -void asl_w_dd_ds_ipm(); -void lsl_w_dd_ds_ipm(); -void roxl_w_dd_ds_ipm(); -void rol_w_dd_ds_ipm(); -void asl_l_imm3_ds_ipm(); -void lsl_l_imm3_ds_ipm(); -void roxl_l_imm3_ds_ipm(); -void rol_l_imm3_ds_ipm(); -void asl_l_dd_ds_ipm(); -void lsl_l_dd_ds_ipm(); -void roxl_l_dd_ds_ipm(); -void rol_l_dd_ds_ipm(); -void asl_ais_ipm(); -void asl_aips_ipm(); -void asl_pais_ipm(); -void asl_das_ipm(); -void asl_dais_ipm(); -void asl_adr16_ipm(); -void asl_adr32_ipm(); -void lsr_ais_ipm(); -void lsr_aips_ipm(); -void lsr_pais_ipm(); -void lsr_das_ipm(); -void lsr_dais_ipm(); -void lsr_adr16_ipm(); -void lsr_adr32_ipm(); -void lsl_ais_ipm(); -void lsl_aips_ipm(); -void lsl_pais_ipm(); -void lsl_das_ipm(); -void lsl_dais_ipm(); -void lsl_adr16_ipm(); -void lsl_adr32_ipm(); -void roxr_ais_ipm(); -void roxr_aips_ipm(); -void roxr_pais_ipm(); -void roxr_das_ipm(); -void roxr_dais_ipm(); -void roxr_adr16_ipm(); -void roxr_adr32_ipm(); -void roxl_ais_ipm(); -void roxl_aips_ipm(); -void roxl_pais_ipm(); -void roxl_das_ipm(); -void roxl_dais_ipm(); -void roxl_adr16_ipm(); -void roxl_adr32_ipm(); -void ror_ais_ipm(); -void ror_aips_ipm(); -void ror_pais_ipm(); -void ror_das_ipm(); -void ror_dais_ipm(); -void ror_adr16_ipm(); -void ror_adr32_ipm(); -void rol_ais_ipm(); -void rol_aips_ipm(); -void rol_pais_ipm(); -void rol_das_ipm(); -void rol_dais_ipm(); -void rol_adr16_ipm(); -void rol_adr32_ipm(); diff --git a/src/devices/cpu/m68000/m68000.cpp b/src/devices/cpu/m68000/m68000.cpp index b60021b2a51..17a44cf6a2e 100644 --- a/src/devices/cpu/m68000/m68000.cpp +++ b/src/devices/cpu/m68000/m68000.cpp @@ -25,10 +25,12 @@ m68000_device::m68000_device(const machine_config &mconfig, device_type type, co m_opcodes_config("opcodes", ENDIANNESS_BIG, 16, 24), m_uprogram_config("uprogram", ENDIANNESS_BIG, 16, 24), m_uopcodes_config("uopcodes", ENDIANNESS_BIG, 16, 24), - m_cpu_space_config("cpu_space", ENDIANNESS_BIG, 16, 24, 0, address_map_constructor(FUNC(m68000_device::default_autovectors_map), this)) + m_cpu_space_config("cpu_space", ENDIANNESS_BIG, 16, 24, 0, address_map_constructor(FUNC(m68000_device::default_autovectors_map), this)), + m_mmu(nullptr), + m_disable_spaces(false), + m_disable_specifics(false), + m_disable_interrupt_callback(false) { - m_mmu = nullptr; - m_disable_interrupt_callback = false; } void m68000_device::abort_access(u32 reason) @@ -150,7 +152,7 @@ device_memory_interface::space_config_vector m68000_device::memory_space_config( void m68000_device::default_autovectors_map(address_map &map) { if(m_cpu_space_id == AS_CPU_SPACE && !has_configured_map(AS_CPU_SPACE)) { - offs_t mask = make_bitmask(24) - 0xf; + offs_t mask = make_bitmask(m_cpu_space_config.m_addr_width) - 0xf; map(mask + 0x3, mask + 0x3).before_time(*this, FUNC(m68000_device::vpa_sync)).after_delay(*this, FUNC(m68000_device::vpa_after)).lr8(NAME([] () -> u8 { return autovector(1); })); map(mask + 0x5, mask + 0x5).before_time(*this, FUNC(m68000_device::vpa_sync)).after_delay(*this, FUNC(m68000_device::vpa_after)).lr8(NAME([] () -> u8 { return autovector(2); })); map(mask + 0x7, mask + 0x7).before_time(*this, FUNC(m68000_device::vpa_sync)).after_delay(*this, FUNC(m68000_device::vpa_after)).lr8(NAME([] () -> u8 { return autovector(3); })); @@ -170,17 +172,21 @@ void m68000_device::device_start() m_rte_instr_callback.resolve(); m_tas_write_callback.resolve(); - m_s_program = &space(AS_PROGRAM); - m_s_opcodes = has_space(AS_OPCODES) ? &space(AS_OPCODES) : m_s_program; - m_s_uprogram = has_space(AS_USER_PROGRAM) ? &space(AS_USER_PROGRAM) : m_s_program; - m_s_uopcodes = has_space(AS_USER_OPCODES) ? &space(AS_USER_OPCODES) : has_space(AS_USER_PROGRAM) ? m_s_uprogram : m_s_opcodes; - m_s_cpu_space = &space(m_cpu_space_id); + if(!m_disable_spaces) { + m_s_program = &space(AS_PROGRAM); + m_s_opcodes = has_space(AS_OPCODES) ? &space(AS_OPCODES) : m_s_program; + m_s_uprogram = has_space(AS_USER_PROGRAM) ? &space(AS_USER_PROGRAM) : m_s_program; + m_s_uopcodes = has_space(AS_USER_OPCODES) ? &space(AS_USER_OPCODES) : has_space(AS_USER_PROGRAM) ? m_s_uprogram : m_s_opcodes; + m_s_cpu_space = &space(m_cpu_space_id); + } - m_s_program->specific(m_r_program); - m_s_opcodes->specific(m_r_opcodes); - m_s_uprogram->specific(m_r_uprogram); - m_s_uopcodes->specific(m_r_uopcodes); - m_s_cpu_space->specific(m_cpu_space); + if(!(m_disable_specifics || m_disable_spaces)) { + m_s_program->specific(m_r_program); + m_s_opcodes->specific(m_r_opcodes); + m_s_uprogram->specific(m_r_uprogram); + m_s_uopcodes->specific(m_r_uopcodes); + m_s_cpu_space->specific(m_cpu_space); + } if(m_mmu) { m_handlers_f = s_handlers_if; @@ -467,105 +473,3 @@ void m68000_device::end_interrupt_vector_lookup() m_int_vector = (m_edb & 0xff) << 2; m_int_next_state = 0; } - -m68000_mcu_device::m68000_mcu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) : - m68000_device(mconfig, type, tag, owner, clock) -{ - m_disable_interrupt_callback = true; -} - -void m68000_mcu_device::execute_run() -{ - internal_update(total_cycles()); - - m_icount -= m_count_before_instruction_step; - if(m_icount < 0) { - m_count_before_instruction_step = -m_icount; - m_icount = 0; - } else - m_count_before_instruction_step = 0; - - while(m_bcount && m_icount <= m_bcount) - internal_update(total_cycles() + m_icount - m_bcount); - - while(m_icount > 0) { - for(;;) { - if(m_icount > m_bcount && m_inst_substate) - (this->*(m_handlers_p[m_inst_state]))(); - - while(m_icount > m_bcount) { - if(m_inst_state >= S_first_instruction) { - m_ipc = m_pc - 2; - m_irdi = m_ird; - - if(machine().debug_flags & DEBUG_FLAG_ENABLED) - debugger_instruction_hook(m_ipc); - } - (this->*(m_handlers_f[m_inst_state]))(); - } - - if(m_post_run) - do_post_run(); - else - break; - } - if(m_icount > 0) - while(m_bcount && m_icount <= m_bcount) - internal_update(total_cycles() + m_icount - m_bcount); - if(m_icount > 0 && m_inst_substate) { - (this->*(m_handlers_p[m_inst_state]))(); - if(m_post_run) - do_post_run(); - } - } - - if(m_icount < 0) { - m_count_before_instruction_step = -m_icount; - m_icount = 0; - } -} - -void m68000_mcu_device::recompute_bcount(uint64_t event_time) -{ - if(!event_time || event_time >= total_cycles() + m_icount) { - m_bcount = 0; - return; - } - m_bcount = total_cycles() + m_icount - event_time; -} - -void m68000_mcu_device::add_event(uint64_t &event_time, uint64_t new_event) -{ - if(!new_event) - return; - if(!event_time || event_time > new_event) - event_time = new_event; -} - -void m68000_mcu_device::device_start() -{ - m68000_device::device_start(); - - if(m_mmu) { - m_handlers_f = s_handlers_ifm; - m_handlers_p = s_handlers_ipm; - } else { - m_handlers_f = s_handlers_dfm; - m_handlers_p = s_handlers_dpm; - } -} - -void m68000_mcu_device::set_current_interrupt_level(u32 level) -{ - if(level == m_int_level) - return; - - m_int_level = level; - - /* A transition from < 7 to 7 always interrupts (NMI) */ - /* Note: Level 7 can also level trigger like a normal IRQ */ - if(m_int_level == 7) - m_nmi_pending = true; - - update_interrupt(); -} diff --git a/src/devices/cpu/m68000/m68000.h b/src/devices/cpu/m68000/m68000.h index cf290cc34c5..564ab28d5a1 100644 --- a/src/devices/cpu/m68000/m68000.h +++ b/src/devices/cpu/m68000/m68000.h @@ -120,10 +120,6 @@ protected: static const handler s_handlers_if[]; static const handler s_handlers_dp[]; static const handler s_handlers_ip[]; - static const handler s_handlers_dfm[]; - static const handler s_handlers_ifm[]; - static const handler s_handlers_dpm[]; - static const handler s_handlers_ipm[]; const handler *m_handlers_f; const handler *m_handlers_p; @@ -148,6 +144,9 @@ protected: // MMU, if one present mmu *m_mmu; + bool m_disable_spaces; + bool m_disable_specifics; + // Internal processor state, in inverse size order u32 m_da[17]; // 8 data, 7 address, usp, ssp in that order @@ -196,7 +195,7 @@ protected: void end_interrupt_vector_lookup(); // update needed stuff on priviledge level switch - void update_user_super(); + virtual void update_user_super(); // update needed stuff on interrupt level switch void update_interrupt(); @@ -928,22 +927,6 @@ protected: } }; -class m68000_mcu_device : public m68000_device -{ -protected: - m68000_mcu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); - - virtual void execute_run() override; - void recompute_bcount(uint64_t event_time); - static void add_event(uint64_t &event_time, uint64_t new_event); - void internal_update(); - - virtual void internal_update(uint64_t current_time) = 0; - virtual void device_start() override; - - void set_current_interrupt_level(u32 level); -}; - DECLARE_DEVICE_TYPE(M68000, m68000_device) #endif diff --git a/src/devices/cpu/m68000/m68000gen.py b/src/devices/cpu/m68000/m68000gen.py index 056b2e15b63..682c47345b4 100755 --- a/src/devices/cpu/m68000/m68000gen.py +++ b/src/devices/cpu/m68000/m68000gen.py @@ -799,6 +799,7 @@ class GEN(IntEnum): direct = 0x0001 full = 0x0002 mcu = 0x0004 + m68008 = 0x0008 # Load the instruction list @@ -1906,7 +1907,7 @@ def generate_code_from_blocks(blocks, ir, irmask, tvn, priv, group01): # Propagate bus accesses from bus initiation to access completion in # the code blocks -def propagate_bus_access(blocks, code, critical): +def propagate_bus_access(blocks, code, critical, gen_mode): def propagate(blocks, code, seen, i, bus_access, bid, critical): if i in seen: return bid, critical @@ -1920,7 +1921,10 @@ def propagate_bus_access(blocks, code, critical): ci += bus_access[1:] ci.append(critical) bus_access = None - bid += 2 + if (gen_mode & GEN.m68008) and ci[2] != 2 and not ci[3]: + bid += 4 + else: + bid += 2 elif ci[0] == "drop_critical": critical = False for nc in blocks[i][3]: @@ -1947,30 +1951,30 @@ def detect_reset_toggling(blocks, code): # Generic code generation -def generate_intermediate_code(a1, a2, a3, ir, irmask, tvn, critical, priv, group01, name): +def generate_intermediate_code(a1, a2, a3, ir, irmask, tvn, critical, priv, group01, gen_mode, name): fwd, suc = generate_forward_graph(a1, a2, a3, ir, irmask) blocks = generate_blocks(fwd) # show_blocks(blocks) code = generate_code_from_blocks(blocks, ir, irmask, tvn, priv, group01) - propagate_bus_access(blocks, code, critical) + propagate_bus_access(blocks, code, critical, gen_mode) detect_reset_toggling(blocks, code) return code # Generate the code for an instruction -def generate_intermediate_code_from_instruction(ir, irmask, name): +def generate_intermediate_code_from_instruction(ir, irmask, name, gen_mode): # Avoid the rel16 case when looking for rel8 if (ir & 0xf000) == 0x6000 and irmask == 0xff00: ir |= 0x0002 a1 = a1_pal_apply(ir) a2, a3 = a23_pal_apply(ir) - return generate_intermediate_code(a1, a2, a3, ir, irmask, None, False, priv_test(ir), False, name) + return generate_intermediate_code(a1, a2, a3, ir, irmask, None, False, priv_test(ir), False, gen_mode, name) # Generate the code for a state -def generate_intermediate_code_from_state(state): - return generate_intermediate_code(state[0], 0x3ff, 0x3ff, 0xffff, 0, state[2], state[3], False, True, "state_" + state[1]) +def generate_intermediate_code_from_state(state, gen_mode): + return generate_intermediate_code(state[0], 0x3ff, 0x3ff, 0xffff, 0, state[2], state[3], False, True, gen_mode, "state_" + state[1]) # Create the base C++ method name for handling a state @@ -2002,7 +2006,7 @@ def generate_source_from_code(code, gen_mode): if ci == R.dcro8: return "1 << (m_dcr & 7)" if ci == "ftu-i": - return "0xfff0 | ((m_next_state >> 23) & 0xe)" + return "0xfff1 | ((m_next_state >> 23) & 0xe)" if gen_mode & GEN.m68008 else "0xfff0 | ((m_next_state >> 23) & 0xe)" if ci == "ftu-ssw": return "(m_ftu & ~0x1f) | m_ssw" if ci == "trap-tvn": @@ -2107,77 +2111,122 @@ def generate_source_from_code(code, gen_mode): is_interrupt_vector_lookup = not ci[4] and ci[2] == 2 if is_interrupt_vector_lookup: source.append("\tstart_interrupt_vector_lookup();") - if not (gen_mode & GEN.full): - source.append("\t[[fallthrough]]; case %d:" % (ci[1])) - if ci[4]: - if ci[3]: - if ci[8]: - source.append("\tif(!m_tas_write_callback.isnull())") - source.append("\t\tm_tas_write_callback(m_aob, m_dbout);") - source.append("\telse") - if gen_mode & GEN.direct: - source.append("\t\t%s.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00);" % (["m_opcodes", "m_program"][ci[2]])) - else: - source.append("\t\tm_mmu->write_%s(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00);" % (["program", "data"][ci[2]])) - elif gen_mode & GEN.direct: - source.append("\t%s.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00);" % (["m_opcodes", "m_program"][ci[2]])) - else: - source.append("\tm_mmu->write_%s(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00);" % (["program", "data"][ci[2]])) - else: - if gen_mode & GEN.direct: - source.append("\t%s.write_interruptible(m_aob & ~1, m_dbout);" % (["m_opcodes", "m_program"][ci[2]])) - else: - source.append("\tm_mmu->write_%s(m_aob & ~1, m_dbout, 0xffff);" % (["program", "data"][ci[2]])) - else: - if ci[2] == 2: - # cpu space access, e.g. interrupt vector lookup - if gen_mode & GEN.direct: - source.append("\tm_edb = m_cpu_space.read_interruptible(m_aob);") - else: - source.append("\tm_edb = m_mmu->read_cpu(m_aob, 0xffff);") - elif ci[3]: - if gen_mode & GEN.direct: - source.append("\tm_edb = %s.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00);" % (["m_opcodes", "m_program"][ci[2]])) - else: - source.append("\tm_edb = m_mmu->read_%s(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00);" % (["program", "data"][ci[2]])) - source.append("\tif(!(m_aob & 1))") - source.append("\t\tm_edb >>= 8;") - else: - if gen_mode & GEN.direct: - source.append("\tm_edb = %s.read_interruptible(m_aob & ~1);" % (["m_opcodes", "m_program"][ci[2]])) - else: - source.append("\tm_edb = m_mmu->read_%s(m_aob & ~1, 0xffff);" % (["program", "data"][ci[2]])) - source.append("\tm_icount -= 4;") - if ci[8]: + access_steps = 2 if (gen_mode & GEN.m68008) and ci[2] != 2 and not ci[3] else 1 + cid = ci[1] + for access_step in range(access_steps): + if not (gen_mode & GEN.full): + source.append("\t[[fallthrough]]; case %d:" % (cid)) if ci[4]: + if ci[3]: + if ci[8]: + source.append("\tif(!m_tas_write_callback.isnull())") + source.append("\t\tm_tas_write_callback(m_aob, m_dbout);") + source.append("\telse") + if gen_mode & GEN.m68008: + if gen_mode & GEN.direct: + source.append("\t\t%s.write_interruptible(m_aob, m_dbout);" % (["m_opcodes8", "m_program8"][ci[2]])) + else: + source.append("\t\tm_mmu8->write_%s(m_aob, m_dbout);" % (["program", "data"][ci[2]])) + else: + if gen_mode & GEN.direct: + source.append("\t\t%s.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00);" % (["m_opcodes", "m_program"][ci[2]])) + else: + source.append("\t\tm_mmu->write_%s(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00);" % (["program", "data"][ci[2]])) + elif gen_mode & GEN.m68008: + if gen_mode & GEN.direct: + source.append("\t%s.write_interruptible(m_aob, m_dbout);" % (["m_opcodes8", "m_program8"][ci[2]])) + else: + source.append("\tm_mmu8->write_%s(m_aob, m_dbout);" % (["program", "data"][ci[2]])) + else: + if gen_mode & GEN.direct: + source.append("\t%s.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00);" % (["m_opcodes", "m_program"][ci[2]])) + else: + source.append("\tm_mmu->write_%s(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00);" % (["program", "data"][ci[2]])) + elif gen_mode & GEN.m68008: + if gen_mode & GEN.direct: + source.append("\t%s.write_interruptible(m_aob%s, m_dbout%s);" % (["m_opcodes8", "m_program8"][ci[2]], " | 1" if access_step == 1 else " & ~1", "" if access_step == 1 else " >> 8")) + else: + source.append("\tm_mmu8->write_%s(m_aob%s, m_dbout%s);" % (["program", "data"][ci[2]], " | 1" if access_step == 1 else " & ~1", "" if access_step == 1 else " >> 8")) + else: + if gen_mode & GEN.direct: + source.append("\t%s.write_interruptible(m_aob & ~1, m_dbout);" % (["m_opcodes", "m_program"][ci[2]])) + else: + source.append("\tm_mmu->write_%s(m_aob & ~1, m_dbout, 0xffff);" % (["program", "data"][ci[2]])) + else: + if ci[2] == 2: + # cpu space access, e.g. interrupt vector lookup + if gen_mode & GEN.m68008: + if gen_mode & GEN.direct: + source.append("\tm_edb = m_cpu_space8.read_interruptible(m_aob);") + else: + source.append("\tm_edb = m_mmu8->read_cpu(m_aob);") + else: + if gen_mode & GEN.direct: + source.append("\tm_edb = m_cpu_space.read_interruptible(m_aob);") + else: + source.append("\tm_edb = m_mmu->read_cpu(m_aob, 0xffff);") + elif ci[3]: + if gen_mode & GEN.m68008: + if gen_mode & GEN.direct: + source.append("\tm_edb = %s.read_interruptible(m_aob);" % (["m_opcodes8", "m_program8"][ci[2]])) + else: + source.append("\tm_edb = m_mmu8->read_%s(m_aob);" % (["program", "data"][ci[2]])) + else: + if gen_mode & GEN.direct: + source.append("\tm_edb = %s.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00);" % (["m_opcodes", "m_program"][ci[2]])) + else: + source.append("\tm_edb = m_mmu->read_%s(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00);" % (["program", "data"][ci[2]])) + source.append("\tif(!(m_aob & 1))") + source.append("\t\tm_edb >>= 8;") + else: + if gen_mode & GEN.m68008: + if access_step == 1: + if gen_mode & GEN.direct: + source.append("\tm_edb |= %s.read_interruptible(m_aob | 1);" % (["m_opcodes8", "m_program8"][ci[2]])) + else: + source.append("\tm_edb |= m_mmu8->read_%s(m_aob | 1);" % (["program", "data"][ci[2]])) + else: + if gen_mode & GEN.direct: + source.append("\tm_edb = %s.read_interruptible(m_aob & ~1) << 8;" % (["m_opcodes8", "m_program8"][ci[2]])) + else: + source.append("\tm_edb = m_mmu8->read_%s(m_aob & ~1) << 8;" % (["program", "data"][ci[2]])) + else: + if gen_mode & GEN.direct: + source.append("\tm_edb = %s.read_interruptible(m_aob & ~1);" % (["m_opcodes", "m_program"][ci[2]])) + else: + source.append("\tm_edb = m_mmu->read_%s(m_aob & ~1, 0xffff);" % (["program", "data"][ci[2]])) + source.append("\tm_icount -= 4;") + if ci[8]: + if ci[4]: + source.append("\tif(m_icount <= %s) {" % ("m_bcount" if gen_mode & GEN.mcu else "0")) + source.append("\t\tif(access_to_be_redone()) {") + source.append("\t\t\tm_icount += 4;") + source.append("\t\t\tm_inst_substate = %d;" % (cid-2)) + source.append("\t\t} else") + source.append("\t\t\tm_inst_substate = %d;" % (cid+1)) + source.append("\t\treturn;") + source.append("\t}") + else: + source.append("\tif(m_icount <= %s && access_to_be_redone()) {" % ("m_bcount" if gen_mode & GEN.mcu else "0")) + source.append("\t\tm_icount += 4;") + source.append("\t\tm_inst_substate = %d;" % cid) + source.append("\t\treturn;") + source.append("\t}") + else: source.append("\tif(m_icount <= %s) {" % ("m_bcount" if gen_mode & GEN.mcu else "0")) source.append("\t\tif(access_to_be_redone()) {") source.append("\t\t\tm_icount += 4;") - source.append("\t\t\tm_inst_substate = %d;" % (ci[1]-2)) + source.append("\t\t\tm_inst_substate = %d;" % cid) source.append("\t\t} else") - source.append("\t\t\tm_inst_substate = %d;" % (ci[1]+1)) + source.append("\t\t\tm_inst_substate = %d;" % (cid+1)) source.append("\t\treturn;") source.append("\t}") - else: - source.append("\tif(m_icount <= %s && access_to_be_redone()) {" % ("m_bcount" if gen_mode & GEN.mcu else "0")) - source.append("\t\tm_icount += 4;") - source.append("\t\tm_inst_substate = %d;" % ci[1]) - source.append("\t\treturn;") - source.append("\t}") - else: - source.append("\tif(m_icount <= %s) {" % ("m_bcount" if gen_mode & GEN.mcu else "0")) - source.append("\t\tif(access_to_be_redone()) {") - source.append("\t\t\tm_icount += 4;") - source.append("\t\t\tm_inst_substate = %d;" % ci[1]) - source.append("\t\t} else") - source.append("\t\t\tm_inst_substate = %d;" % (ci[1]+1)) - source.append("\t\treturn;") - source.append("\t}") - if not (gen_mode & GEN.full): - source.append("\t[[fallthrough]]; case %d:" % (ci[1]+1)) + if not (gen_mode & GEN.full): + source.append("\t[[fallthrough]]; case %d:" % (cid+1)) + cid += 2 if is_interrupt_vector_lookup: source.append("\tend_interrupt_vector_lookup();") - if not ci[3]: + if not ci[3] and (ci[2] != 2 or not (gen_mode & GEN.m68008)): source.append("\tif(m_aob & 1) {") source.append("\t\tm_icount -= 4;") source.append("\t\tm_inst_state = %s;" % ("S_DOUBLE_FAULT" if ci[8] else "S_ADDRESS_ERROR")); @@ -2312,22 +2361,26 @@ def generate_source_file(fname, cmd, gen_mode): suf = 'd' if gen_mode & GEN.direct else 'i' suf += 'f' if gen_mode & GEN.full else 'p' suf += 'm' if gen_mode & GEN.mcu else '' + suf += '8' if gen_mode & GEN.m68008 else '' print("Generating %s" % suf) + cpu = "m68008" if gen_mode & GEN.m68008 else "m68000_mcu" if gen_mode & GEN.mcu else "m68000" + head = "m68008" if gen_mode & GEN.m68008 else "m68000mcu" if gen_mode & GEN.mcu else "m68000" + print("// Instruction handlers for the m68000 (%s, %s, %s)" % ("direct" if gen_mode & GEN.direct else "indirect", "full" if gen_mode & GEN.full else "partial", "mcu" if gen_mode & GEN.mcu else "cpu"), file=out) print("//", file=out) print("// Generated by m68000gen.py %s" % cmd, file=out) print("", file=out) print("#include \"emu.h\"", file=out) - print("#include \"m68000.h\"", file=out) + print("#include \"%s.h\"" % head, file=out) print("", file=out) for st in states: # print(handler_name_for_state(st)) - code = generate_intermediate_code_from_state(st) + code = generate_intermediate_code_from_state(st, gen_mode) source = generate_source_from_code(code, gen_mode) - print("void m68000_device::%s_%s()" % (handler_name_for_state(st), suf), file=out) + print("void %s_device::%s_%s()" % (cpu, handler_name_for_state(st), suf), file=out) print("{", file=out) for l in source: print(l, file=out) @@ -2338,24 +2391,24 @@ def generate_source_file(fname, cmd, gen_mode): if ii[0] == 0xa000 or ii[0] == 0xf000 or ii[0] == 0x4afc: continue # print(handler_name_for_instruction(ii)) - code = generate_intermediate_code_from_instruction(ii[0], ii[1], " ".join(ii[2])) + code = generate_intermediate_code_from_instruction(ii[0], ii[1], " ".join(ii[2]), gen_mode) source = generate_source_from_code(code, gen_mode) - print("void m68000_device::%s_%s() // %04x %04x" % (handler_name_for_instruction(ii), suf, ii[0], ii[1]), file=out) + print("void %s_device::%s_%s() // %04x %04x" % (cpu, handler_name_for_instruction(ii), suf, ii[0], ii[1]), file=out) print("{", file=out) for l in source: print(l, file=out) print("}", file=out) print("", file=out) - print("const m68000_device::handler m68000_device::s_handlers_%s[] = {" % suf, file=out) + print("const %s_device::%s %s_device::s_handlers_%s[] = {" % (cpu, "handler8" if gen_mode & GEN.m68008 else "handlerm" if gen_mode & GEN.mcu else "handler", cpu, suf), file=out) for st in states: name = handler_name_for_state(st) - print("\t&m68000_device::%s_%s," % (name, suf), file=out) + print("\t&%s_device::%s_%s," % (cpu, name, suf), file=out) for ii in instructions: if ii[0] == 0xa000 or ii[0] == 0xf000 or ii[0] == 0x4afc: continue name = handler_name_for_instruction(ii) - print("\t&m68000_device::%s_%s," % (name, suf), file=out) + print("\t&%s_device::%s_%s," % (cpu, name, suf), file=out) print("};", file=out) @@ -2373,7 +2426,7 @@ if sys.argv[1] == "i": if line == None or ii[0] == 0xa000 or ii[0] == 0xf000 or ii[0] == 0x4afc: print("Illegal instruction") sys.exit(0) - code = generate_intermediate_code_from_instruction(ii[0], ii[2], " ".join(ii[2])) + code = generate_intermediate_code_from_instruction(ii[0], ii[2], " ".join(ii[2]), 0) source = generate_source_from_code(code, GEN.direct|GEN.full) print("# %s" % handler_name_for_instruction(ii)) for l in source: @@ -2422,7 +2475,39 @@ if sys.argv[1] == 'header': print("//", file=out) print("// Generated by m68000gen.py %s" % ' '.join(sys.argv[1:]), file=out) print("", file=out) - for variant in ["df", "if", "dp", "ip", "dfm", "ifm", "dpm", "ipm"]: + for variant in ["df", "if", "dp", "ip"]: + for st in states: + name = handler_name_for_state(st) + print("void %s_%s();" % (name, variant), file=out) + for ii in instructions: + if ii[0] == 0xa000 or ii[0] == 0xf000 or ii[0] == 0x4afc: + continue + name = handler_name_for_instruction(ii) + print("void %s_%s();" % (name, variant), file=out) + +if sys.argv[1] == 'headerm': + out = open(sys.argv[3], 'wt') + print("// Header fragment for the handlers", file=out) + print("//", file=out) + print("// Generated by m68000gen.py %s" % ' '.join(sys.argv[1:]), file=out) + print("", file=out) + for variant in ["dfm", "ifm", "dpm", "ipm"]: + for st in states: + name = handler_name_for_state(st) + print("void %s_%s();" % (name, variant), file=out) + for ii in instructions: + if ii[0] == 0xa000 or ii[0] == 0xf000 or ii[0] == 0x4afc: + continue + name = handler_name_for_instruction(ii) + print("void %s_%s();" % (name, variant), file=out) + +if sys.argv[1] == 'header8': + out = open(sys.argv[3], 'wt') + print("// Header fragment for the handlers", file=out) + print("//", file=out) + print("// Generated by m68000gen.py %s" % ' '.join(sys.argv[1:]), file=out) + print("", file=out) + for variant in ["df8", "if8", "dp8" ,"ip8"]: for st in states: name = handler_name_for_state(st) print("void %s_%s();" % (name, variant), file=out) @@ -2457,3 +2542,15 @@ if sys.argv[1] == 'sdpm': if sys.argv[1] == 'sipm': generate_source_file(sys.argv[3], ' '.join(sys.argv[1:]), GEN.mcu) + +if sys.argv[1] == 'sdf8': + generate_source_file(sys.argv[3], ' '.join(sys.argv[1:]), GEN.direct|GEN.full|GEN.m68008) + +if sys.argv[1] == 'sif8': + generate_source_file(sys.argv[3], ' '.join(sys.argv[1:]), GEN.full|GEN.m68008) + +if sys.argv[1] == 'sdp8': + generate_source_file(sys.argv[3], ' '.join(sys.argv[1:]), GEN.direct|GEN.m68008) + +if sys.argv[1] == 'sip8': + generate_source_file(sys.argv[3], ' '.join(sys.argv[1:]), GEN.m68008) diff --git a/src/devices/cpu/m68000/m68000mcu-head.h b/src/devices/cpu/m68000/m68000mcu-head.h new file mode 100644 index 00000000000..3c5d7822721 --- /dev/null +++ b/src/devices/cpu/m68000/m68000mcu-head.h @@ -0,0 +1,6144 @@ +// Header fragment for the handlers +// +// Generated by m68000gen.py headerm m68000.lst m68000mcu-head.h + +void state_reset_dfm(); +void state_bus_error_dfm(); +void state_address_error_dfm(); +void state_double_fault_dfm(); +void state_interrupt_dfm(); +void state_trace_dfm(); +void state_illegal_dfm(); +void state_priviledge_dfm(); +void state_linea_dfm(); +void state_linef_dfm(); +void ori_b_imm8_ds_dfm(); +void ori_b_imm8_ais_dfm(); +void ori_b_imm8_aips_dfm(); +void ori_b_imm8_pais_dfm(); +void ori_b_imm8_das_dfm(); +void ori_b_imm8_dais_dfm(); +void ori_b_imm8_adr16_dfm(); +void ori_b_imm8_adr32_dfm(); +void ori_imm8_ccr_dfm(); +void ori_w_imm16_ds_dfm(); +void ori_w_imm16_ais_dfm(); +void ori_w_imm16_aips_dfm(); +void ori_w_imm16_pais_dfm(); +void ori_w_imm16_das_dfm(); +void ori_w_imm16_dais_dfm(); +void ori_w_imm16_adr16_dfm(); +void ori_w_imm16_adr32_dfm(); +void ori_i16u_sr_dfm(); +void ori_l_imm32_ds_dfm(); +void ori_l_imm32_ais_dfm(); +void ori_l_imm32_aips_dfm(); +void ori_l_imm32_pais_dfm(); +void ori_l_imm32_das_dfm(); +void ori_l_imm32_dais_dfm(); +void ori_l_imm32_adr16_dfm(); +void ori_l_imm32_adr32_dfm(); +void btst_dd_ds_dfm(); +void movep_w_das_dd_dfm(); +void btst_dd_ais_dfm(); +void btst_dd_aips_dfm(); +void btst_dd_pais_dfm(); +void btst_dd_das_dfm(); +void btst_dd_dais_dfm(); +void btst_dd_adr16_dfm(); +void btst_dd_adr32_dfm(); +void btst_dd_dpc_dfm(); +void btst_dd_dpci_dfm(); +void btst_dd_imm_dfm(); +void bchg_dd_ds_dfm(); +void movep_l_das_dd_dfm(); +void bchg_dd_ais_dfm(); +void bchg_dd_aips_dfm(); +void bchg_dd_pais_dfm(); +void bchg_dd_das_dfm(); +void bchg_dd_dais_dfm(); +void bchg_dd_adr16_dfm(); +void bchg_dd_adr32_dfm(); +void bclr_dd_ds_dfm(); +void movep_w_dd_das_dfm(); +void bclr_dd_ais_dfm(); +void bclr_dd_aips_dfm(); +void bclr_dd_pais_dfm(); +void bclr_dd_das_dfm(); +void bclr_dd_dais_dfm(); +void bclr_dd_adr16_dfm(); +void bclr_dd_adr32_dfm(); +void bset_dd_ds_dfm(); +void movep_l_dd_das_dfm(); +void bset_dd_ais_dfm(); +void bset_dd_aips_dfm(); +void bset_dd_pais_dfm(); +void bset_dd_das_dfm(); +void bset_dd_dais_dfm(); +void bset_dd_adr16_dfm(); +void bset_dd_adr32_dfm(); +void andi_b_imm8_ds_dfm(); +void andi_b_imm8_ais_dfm(); +void andi_b_imm8_aips_dfm(); +void andi_b_imm8_pais_dfm(); +void andi_b_imm8_das_dfm(); +void andi_b_imm8_dais_dfm(); +void andi_b_imm8_adr16_dfm(); +void andi_b_imm8_adr32_dfm(); +void andi_imm8_ccr_dfm(); +void andi_w_imm16_ds_dfm(); +void andi_w_imm16_ais_dfm(); +void andi_w_imm16_aips_dfm(); +void andi_w_imm16_pais_dfm(); +void andi_w_imm16_das_dfm(); +void andi_w_imm16_dais_dfm(); +void andi_w_imm16_adr16_dfm(); +void andi_w_imm16_adr32_dfm(); +void andi_i16u_sr_dfm(); +void andi_l_imm32_ds_dfm(); +void andi_l_imm32_ais_dfm(); +void andi_l_imm32_aips_dfm(); +void andi_l_imm32_pais_dfm(); +void andi_l_imm32_das_dfm(); +void andi_l_imm32_dais_dfm(); +void andi_l_imm32_adr16_dfm(); +void andi_l_imm32_adr32_dfm(); +void subi_b_imm8_ds_dfm(); +void subi_b_imm8_ais_dfm(); +void subi_b_imm8_aips_dfm(); +void subi_b_imm8_pais_dfm(); +void subi_b_imm8_das_dfm(); +void subi_b_imm8_dais_dfm(); +void subi_b_imm8_adr16_dfm(); +void subi_b_imm8_adr32_dfm(); +void subi_w_imm16_ds_dfm(); +void subi_w_imm16_ais_dfm(); +void subi_w_imm16_aips_dfm(); +void subi_w_imm16_pais_dfm(); +void subi_w_imm16_das_dfm(); +void subi_w_imm16_dais_dfm(); +void subi_w_imm16_adr16_dfm(); +void subi_w_imm16_adr32_dfm(); +void subi_l_imm32_ds_dfm(); +void subi_l_imm32_ais_dfm(); +void subi_l_imm32_aips_dfm(); +void subi_l_imm32_pais_dfm(); +void subi_l_imm32_das_dfm(); +void subi_l_imm32_dais_dfm(); +void subi_l_imm32_adr16_dfm(); +void subi_l_imm32_adr32_dfm(); +void addi_b_imm8_ds_dfm(); +void addi_b_imm8_ais_dfm(); +void addi_b_imm8_aips_dfm(); +void addi_b_imm8_pais_dfm(); +void addi_b_imm8_das_dfm(); +void addi_b_imm8_dais_dfm(); +void addi_b_imm8_adr16_dfm(); +void addi_b_imm8_adr32_dfm(); +void addi_w_imm16_ds_dfm(); +void addi_w_imm16_ais_dfm(); +void addi_w_imm16_aips_dfm(); +void addi_w_imm16_pais_dfm(); +void addi_w_imm16_das_dfm(); +void addi_w_imm16_dais_dfm(); +void addi_w_imm16_adr16_dfm(); +void addi_w_imm16_adr32_dfm(); +void addi_l_imm32_ds_dfm(); +void addi_l_imm32_ais_dfm(); +void addi_l_imm32_aips_dfm(); +void addi_l_imm32_pais_dfm(); +void addi_l_imm32_das_dfm(); +void addi_l_imm32_dais_dfm(); +void addi_l_imm32_adr16_dfm(); +void addi_l_imm32_adr32_dfm(); +void btst_imm8_ds_dfm(); +void btst_imm8_ais_dfm(); +void btst_imm8_aips_dfm(); +void btst_imm8_pais_dfm(); +void btst_imm8_das_dfm(); +void btst_imm8_dais_dfm(); +void btst_imm8_adr16_dfm(); +void btst_imm8_adr32_dfm(); +void btst_imm8_dpc_dfm(); +void btst_imm8_dpci_dfm(); +void bchg_imm8_ds_dfm(); +void bchg_imm8_ais_dfm(); +void bchg_imm8_aips_dfm(); +void bchg_imm8_pais_dfm(); +void bchg_imm8_das_dfm(); +void bchg_imm8_dais_dfm(); +void bchg_imm8_adr16_dfm(); +void bchg_imm8_adr32_dfm(); +void bclr_imm8_ds_dfm(); +void bclr_imm8_ais_dfm(); +void bclr_imm8_aips_dfm(); +void bclr_imm8_pais_dfm(); +void bclr_imm8_das_dfm(); +void bclr_imm8_dais_dfm(); +void bclr_imm8_adr16_dfm(); +void bclr_imm8_adr32_dfm(); +void bset_imm8_ds_dfm(); +void bset_imm8_ais_dfm(); +void bset_imm8_aips_dfm(); +void bset_imm8_pais_dfm(); +void bset_imm8_das_dfm(); +void bset_imm8_dais_dfm(); +void bset_imm8_adr16_dfm(); +void bset_imm8_adr32_dfm(); +void eori_b_imm8_ds_dfm(); +void eori_b_imm8_ais_dfm(); +void eori_b_imm8_aips_dfm(); +void eori_b_imm8_pais_dfm(); +void eori_b_imm8_das_dfm(); +void eori_b_imm8_dais_dfm(); +void eori_b_imm8_adr16_dfm(); +void eori_b_imm8_adr32_dfm(); +void eori_imm8_ccr_dfm(); +void eori_w_imm16_ds_dfm(); +void eori_w_imm16_ais_dfm(); +void eori_w_imm16_aips_dfm(); +void eori_w_imm16_pais_dfm(); +void eori_w_imm16_das_dfm(); +void eori_w_imm16_dais_dfm(); +void eori_w_imm16_adr16_dfm(); +void eori_w_imm16_adr32_dfm(); +void eori_i16u_sr_dfm(); +void eori_l_imm32_ds_dfm(); +void eori_l_imm32_ais_dfm(); +void eori_l_imm32_aips_dfm(); +void eori_l_imm32_pais_dfm(); +void eori_l_imm32_das_dfm(); +void eori_l_imm32_dais_dfm(); +void eori_l_imm32_adr16_dfm(); +void eori_l_imm32_adr32_dfm(); +void cmpi_b_imm8_ds_dfm(); +void cmpi_b_imm8_ais_dfm(); +void cmpi_b_imm8_aips_dfm(); +void cmpi_b_imm8_pais_dfm(); +void cmpi_b_imm8_das_dfm(); +void cmpi_b_imm8_dais_dfm(); +void cmpi_b_imm8_adr16_dfm(); +void cmpi_b_imm8_adr32_dfm(); +void cmpi_w_imm16_ds_dfm(); +void cmpi_w_imm16_ais_dfm(); +void cmpi_w_imm16_aips_dfm(); +void cmpi_w_imm16_pais_dfm(); +void cmpi_w_imm16_das_dfm(); +void cmpi_w_imm16_dais_dfm(); +void cmpi_w_imm16_adr16_dfm(); +void cmpi_w_imm16_adr32_dfm(); +void cmpi_l_imm32_ds_dfm(); +void cmpi_l_imm32_ais_dfm(); +void cmpi_l_imm32_aips_dfm(); +void cmpi_l_imm32_pais_dfm(); +void cmpi_l_imm32_das_dfm(); +void cmpi_l_imm32_dais_dfm(); +void cmpi_l_imm32_adr16_dfm(); +void cmpi_l_imm32_adr32_dfm(); +void move_b_ds_dd_dfm(); +void move_b_ais_dd_dfm(); +void move_b_aips_dd_dfm(); +void move_b_pais_dd_dfm(); +void move_b_das_dd_dfm(); +void move_b_dais_dd_dfm(); +void move_b_adr16_dd_dfm(); +void move_b_adr32_dd_dfm(); +void move_b_dpc_dd_dfm(); +void move_b_dpci_dd_dfm(); +void move_b_imm8_dd_dfm(); +void move_b_ds_aid_dfm(); +void move_b_ais_aid_dfm(); +void move_b_aips_aid_dfm(); +void move_b_pais_aid_dfm(); +void move_b_das_aid_dfm(); +void move_b_dais_aid_dfm(); +void move_b_adr16_aid_dfm(); +void move_b_adr32_aid_dfm(); +void move_b_dpc_aid_dfm(); +void move_b_dpci_aid_dfm(); +void move_b_imm8_aid_dfm(); +void move_b_ds_aipd_dfm(); +void move_b_ais_aipd_dfm(); +void move_b_aips_aipd_dfm(); +void move_b_pais_aipd_dfm(); +void move_b_das_aipd_dfm(); +void move_b_dais_aipd_dfm(); +void move_b_adr16_aipd_dfm(); +void move_b_adr32_aipd_dfm(); +void move_b_dpc_aipd_dfm(); +void move_b_dpci_aipd_dfm(); +void move_b_imm8_aipd_dfm(); +void move_b_ds_paid_dfm(); +void move_b_ais_paid_dfm(); +void move_b_aips_paid_dfm(); +void move_b_pais_paid_dfm(); +void move_b_das_paid_dfm(); +void move_b_dais_paid_dfm(); +void move_b_adr16_paid_dfm(); +void move_b_adr32_paid_dfm(); +void move_b_dpc_paid_dfm(); +void move_b_dpci_paid_dfm(); +void move_b_imm8_paid_dfm(); +void move_b_ds_dad_dfm(); +void move_b_ais_dad_dfm(); +void move_b_aips_dad_dfm(); +void move_b_pais_dad_dfm(); +void move_b_das_dad_dfm(); +void move_b_dais_dad_dfm(); +void move_b_adr16_dad_dfm(); +void move_b_adr32_dad_dfm(); +void move_b_dpc_dad_dfm(); +void move_b_dpci_dad_dfm(); +void move_b_imm8_dad_dfm(); +void move_b_ds_daid_dfm(); +void move_b_ais_daid_dfm(); +void move_b_aips_daid_dfm(); +void move_b_pais_daid_dfm(); +void move_b_das_daid_dfm(); +void move_b_dais_daid_dfm(); +void move_b_adr16_daid_dfm(); +void move_b_adr32_daid_dfm(); +void move_b_dpc_daid_dfm(); +void move_b_dpci_daid_dfm(); +void move_b_imm8_daid_dfm(); +void move_b_ds_adr16_dfm(); +void move_b_ais_adr16_dfm(); +void move_b_aips_adr16_dfm(); +void move_b_pais_adr16_dfm(); +void move_b_das_adr16_dfm(); +void move_b_dais_adr16_dfm(); +void move_b_adr16_adr16_dfm(); +void move_b_adr32_adr16_dfm(); +void move_b_dpc_adr16_dfm(); +void move_b_dpci_adr16_dfm(); +void move_b_imm8_adr16_dfm(); +void move_b_ds_adr32_dfm(); +void move_b_ais_adr32_dfm(); +void move_b_aips_adr32_dfm(); +void move_b_pais_adr32_dfm(); +void move_b_das_adr32_dfm(); +void move_b_dais_adr32_dfm(); +void move_b_adr16_adr32_dfm(); +void move_b_adr32_adr32_dfm(); +void move_b_dpc_adr32_dfm(); +void move_b_dpci_adr32_dfm(); +void move_b_imm8_adr32_dfm(); +void move_l_ds_dd_dfm(); +void move_l_as_dd_dfm(); +void move_l_ais_dd_dfm(); +void move_l_aips_dd_dfm(); +void move_l_pais_dd_dfm(); +void move_l_das_dd_dfm(); +void move_l_dais_dd_dfm(); +void move_l_adr16_dd_dfm(); +void move_l_adr32_dd_dfm(); +void move_l_dpc_dd_dfm(); +void move_l_dpci_dd_dfm(); +void move_l_imm32_dd_dfm(); +void movea_l_ds_ad_dfm(); +void movea_l_as_ad_dfm(); +void movea_l_ais_ad_dfm(); +void movea_l_aips_ad_dfm(); +void movea_l_pais_ad_dfm(); +void movea_l_das_ad_dfm(); +void movea_l_dais_ad_dfm(); +void movea_l_adr16_ad_dfm(); +void movea_l_adr32_ad_dfm(); +void movea_l_dpc_ad_dfm(); +void movea_l_dpci_ad_dfm(); +void movea_l_imm32_ad_dfm(); +void move_l_ds_aid_dfm(); +void move_l_as_aid_dfm(); +void move_l_ais_aid_dfm(); +void move_l_aips_aid_dfm(); +void move_l_pais_aid_dfm(); +void move_l_das_aid_dfm(); +void move_l_dais_aid_dfm(); +void move_l_adr16_aid_dfm(); +void move_l_adr32_aid_dfm(); +void move_l_dpc_aid_dfm(); +void move_l_dpci_aid_dfm(); +void move_l_imm32_aid_dfm(); +void move_l_ds_aipd_dfm(); +void move_l_as_aipd_dfm(); +void move_l_ais_aipd_dfm(); +void move_l_aips_aipd_dfm(); +void move_l_pais_aipd_dfm(); +void move_l_das_aipd_dfm(); +void move_l_dais_aipd_dfm(); +void move_l_adr16_aipd_dfm(); +void move_l_adr32_aipd_dfm(); +void move_l_dpc_aipd_dfm(); +void move_l_dpci_aipd_dfm(); +void move_l_imm32_aipd_dfm(); +void move_l_ds_paid_dfm(); +void move_l_as_paid_dfm(); +void move_l_ais_paid_dfm(); +void move_l_aips_paid_dfm(); +void move_l_pais_paid_dfm(); +void move_l_das_paid_dfm(); +void move_l_dais_paid_dfm(); +void move_l_adr16_paid_dfm(); +void move_l_adr32_paid_dfm(); +void move_l_dpc_paid_dfm(); +void move_l_dpci_paid_dfm(); +void move_l_imm32_paid_dfm(); +void move_l_ds_dad_dfm(); +void move_l_as_dad_dfm(); +void move_l_ais_dad_dfm(); +void move_l_aips_dad_dfm(); +void move_l_pais_dad_dfm(); +void move_l_das_dad_dfm(); +void move_l_dais_dad_dfm(); +void move_l_adr16_dad_dfm(); +void move_l_adr32_dad_dfm(); +void move_l_dpc_dad_dfm(); +void move_l_dpci_dad_dfm(); +void move_l_imm32_dad_dfm(); +void move_l_ds_daid_dfm(); +void move_l_as_daid_dfm(); +void move_l_ais_daid_dfm(); +void move_l_aips_daid_dfm(); +void move_l_pais_daid_dfm(); +void move_l_das_daid_dfm(); +void move_l_dais_daid_dfm(); +void move_l_adr16_daid_dfm(); +void move_l_adr32_daid_dfm(); +void move_l_dpc_daid_dfm(); +void move_l_dpci_daid_dfm(); +void move_l_imm32_daid_dfm(); +void move_l_ds_adr16_dfm(); +void move_l_as_adr16_dfm(); +void move_l_ais_adr16_dfm(); +void move_l_aips_adr16_dfm(); +void move_l_pais_adr16_dfm(); +void move_l_das_adr16_dfm(); +void move_l_dais_adr16_dfm(); +void move_l_adr16_adr16_dfm(); +void move_l_adr32_adr16_dfm(); +void move_l_dpc_adr16_dfm(); +void move_l_dpci_adr16_dfm(); +void move_l_imm32_adr16_dfm(); +void move_l_ds_adr32_dfm(); +void move_l_as_adr32_dfm(); +void move_l_ais_adr32_dfm(); +void move_l_aips_adr32_dfm(); +void move_l_pais_adr32_dfm(); +void move_l_das_adr32_dfm(); +void move_l_dais_adr32_dfm(); +void move_l_adr16_adr32_dfm(); +void move_l_adr32_adr32_dfm(); +void move_l_dpc_adr32_dfm(); +void move_l_dpci_adr32_dfm(); +void move_l_imm32_adr32_dfm(); +void move_w_ds_dd_dfm(); +void move_w_as_dd_dfm(); +void move_w_ais_dd_dfm(); +void move_w_aips_dd_dfm(); +void move_w_pais_dd_dfm(); +void move_w_das_dd_dfm(); +void move_w_dais_dd_dfm(); +void move_w_adr16_dd_dfm(); +void move_w_adr32_dd_dfm(); +void move_w_dpc_dd_dfm(); +void move_w_dpci_dd_dfm(); +void move_w_imm16_dd_dfm(); +void movea_w_ds_ad_dfm(); +void movea_w_as_ad_dfm(); +void movea_w_ais_ad_dfm(); +void movea_w_aips_ad_dfm(); +void movea_w_pais_ad_dfm(); +void movea_w_das_ad_dfm(); +void movea_w_dais_ad_dfm(); +void movea_w_adr16_ad_dfm(); +void movea_w_adr32_ad_dfm(); +void movea_w_dpc_ad_dfm(); +void movea_w_dpci_ad_dfm(); +void movea_w_imm16_ad_dfm(); +void move_w_ds_aid_dfm(); +void move_w_as_aid_dfm(); +void move_w_ais_aid_dfm(); +void move_w_aips_aid_dfm(); +void move_w_pais_aid_dfm(); +void move_w_das_aid_dfm(); +void move_w_dais_aid_dfm(); +void move_w_adr16_aid_dfm(); +void move_w_adr32_aid_dfm(); +void move_w_dpc_aid_dfm(); +void move_w_dpci_aid_dfm(); +void move_w_imm16_aid_dfm(); +void move_w_ds_aipd_dfm(); +void move_w_as_aipd_dfm(); +void move_w_ais_aipd_dfm(); +void move_w_aips_aipd_dfm(); +void move_w_pais_aipd_dfm(); +void move_w_das_aipd_dfm(); +void move_w_dais_aipd_dfm(); +void move_w_adr16_aipd_dfm(); +void move_w_adr32_aipd_dfm(); +void move_w_dpc_aipd_dfm(); +void move_w_dpci_aipd_dfm(); +void move_w_imm16_aipd_dfm(); +void move_w_ds_paid_dfm(); +void move_w_as_paid_dfm(); +void move_w_ais_paid_dfm(); +void move_w_aips_paid_dfm(); +void move_w_pais_paid_dfm(); +void move_w_das_paid_dfm(); +void move_w_dais_paid_dfm(); +void move_w_adr16_paid_dfm(); +void move_w_adr32_paid_dfm(); +void move_w_dpc_paid_dfm(); +void move_w_dpci_paid_dfm(); +void move_w_imm16_paid_dfm(); +void move_w_ds_dad_dfm(); +void move_w_as_dad_dfm(); +void move_w_ais_dad_dfm(); +void move_w_aips_dad_dfm(); +void move_w_pais_dad_dfm(); +void move_w_das_dad_dfm(); +void move_w_dais_dad_dfm(); +void move_w_adr16_dad_dfm(); +void move_w_adr32_dad_dfm(); +void move_w_dpc_dad_dfm(); +void move_w_dpci_dad_dfm(); +void move_w_imm16_dad_dfm(); +void move_w_ds_daid_dfm(); +void move_w_as_daid_dfm(); +void move_w_ais_daid_dfm(); +void move_w_aips_daid_dfm(); +void move_w_pais_daid_dfm(); +void move_w_das_daid_dfm(); +void move_w_dais_daid_dfm(); +void move_w_adr16_daid_dfm(); +void move_w_adr32_daid_dfm(); +void move_w_dpc_daid_dfm(); +void move_w_dpci_daid_dfm(); +void move_w_imm16_daid_dfm(); +void move_w_ds_adr16_dfm(); +void move_w_as_adr16_dfm(); +void move_w_ais_adr16_dfm(); +void move_w_aips_adr16_dfm(); +void move_w_pais_adr16_dfm(); +void move_w_das_adr16_dfm(); +void move_w_dais_adr16_dfm(); +void move_w_adr16_adr16_dfm(); +void move_w_adr32_adr16_dfm(); +void move_w_dpc_adr16_dfm(); +void move_w_dpci_adr16_dfm(); +void move_w_imm16_adr16_dfm(); +void move_w_ds_adr32_dfm(); +void move_w_as_adr32_dfm(); +void move_w_ais_adr32_dfm(); +void move_w_aips_adr32_dfm(); +void move_w_pais_adr32_dfm(); +void move_w_das_adr32_dfm(); +void move_w_dais_adr32_dfm(); +void move_w_adr16_adr32_dfm(); +void move_w_adr32_adr32_dfm(); +void move_w_dpc_adr32_dfm(); +void move_w_dpci_adr32_dfm(); +void move_w_imm16_adr32_dfm(); +void negx_b_ds_dfm(); +void negx_b_ais_dfm(); +void negx_b_aips_dfm(); +void negx_b_pais_dfm(); +void negx_b_das_dfm(); +void negx_b_dais_dfm(); +void negx_b_adr16_dfm(); +void negx_b_adr32_dfm(); +void negx_w_ds_dfm(); +void negx_w_ais_dfm(); +void negx_w_aips_dfm(); +void negx_w_pais_dfm(); +void negx_w_das_dfm(); +void negx_w_dais_dfm(); +void negx_w_adr16_dfm(); +void negx_w_adr32_dfm(); +void negx_l_ds_dfm(); +void negx_l_ais_dfm(); +void negx_l_aips_dfm(); +void negx_l_pais_dfm(); +void negx_l_das_dfm(); +void negx_l_dais_dfm(); +void negx_l_adr16_dfm(); +void negx_l_adr32_dfm(); +void move_sr_ds_dfm(); +void move_sr_ais_dfm(); +void move_sr_aips_dfm(); +void move_sr_pais_dfm(); +void move_sr_das_dfm(); +void move_sr_dais_dfm(); +void move_sr_adr16_dfm(); +void move_sr_adr32_dfm(); +void chk_w_ds_dd_dfm(); +void chk_w_ais_dd_dfm(); +void chk_w_aips_dd_dfm(); +void chk_w_pais_dd_dfm(); +void chk_w_das_dd_dfm(); +void chk_w_dais_dd_dfm(); +void chk_w_adr16_dd_dfm(); +void chk_w_adr32_dd_dfm(); +void chk_w_dpc_dd_dfm(); +void chk_w_dpci_dd_dfm(); +void chk_w_imm16_dd_dfm(); +void lea_ais_ad_dfm(); +void lea_das_ad_dfm(); +void lea_dais_ad_dfm(); +void lea_adr16_ad_dfm(); +void lea_adr32_ad_dfm(); +void lea_dpc_ad_dfm(); +void lea_dpci_ad_dfm(); +void clr_b_ds_dfm(); +void clr_b_ais_dfm(); +void clr_b_aips_dfm(); +void clr_b_pais_dfm(); +void clr_b_das_dfm(); +void clr_b_dais_dfm(); +void clr_b_adr16_dfm(); +void clr_b_adr32_dfm(); +void clr_w_ds_dfm(); +void clr_w_ais_dfm(); +void clr_w_aips_dfm(); +void clr_w_pais_dfm(); +void clr_w_das_dfm(); +void clr_w_dais_dfm(); +void clr_w_adr16_dfm(); +void clr_w_adr32_dfm(); +void clr_l_ds_dfm(); +void clr_l_ais_dfm(); +void clr_l_aips_dfm(); +void clr_l_pais_dfm(); +void clr_l_das_dfm(); +void clr_l_dais_dfm(); +void clr_l_adr16_dfm(); +void clr_l_adr32_dfm(); +void neg_b_ds_dfm(); +void neg_b_ais_dfm(); +void neg_b_aips_dfm(); +void neg_b_pais_dfm(); +void neg_b_das_dfm(); +void neg_b_dais_dfm(); +void neg_b_adr16_dfm(); +void neg_b_adr32_dfm(); +void neg_w_ds_dfm(); +void neg_w_ais_dfm(); +void neg_w_aips_dfm(); +void neg_w_pais_dfm(); +void neg_w_das_dfm(); +void neg_w_dais_dfm(); +void neg_w_adr16_dfm(); +void neg_w_adr32_dfm(); +void neg_l_ds_dfm(); +void neg_l_ais_dfm(); +void neg_l_aips_dfm(); +void neg_l_pais_dfm(); +void neg_l_das_dfm(); +void neg_l_dais_dfm(); +void neg_l_adr16_dfm(); +void neg_l_adr32_dfm(); +void move_ds_ccr_dfm(); +void move_ais_ccr_dfm(); +void move_aips_ccr_dfm(); +void move_pais_ccr_dfm(); +void move_das_ccr_dfm(); +void move_dais_ccr_dfm(); +void move_adr16_ccr_dfm(); +void move_adr32_ccr_dfm(); +void move_dpc_ccr_dfm(); +void move_dpci_ccr_dfm(); +void move_imm8_ccr_dfm(); +void not_b_ds_dfm(); +void not_b_ais_dfm(); +void not_b_aips_dfm(); +void not_b_pais_dfm(); +void not_b_das_dfm(); +void not_b_dais_dfm(); +void not_b_adr16_dfm(); +void not_b_adr32_dfm(); +void not_w_ds_dfm(); +void not_w_ais_dfm(); +void not_w_aips_dfm(); +void not_w_pais_dfm(); +void not_w_das_dfm(); +void not_w_dais_dfm(); +void not_w_adr16_dfm(); +void not_w_adr32_dfm(); +void not_l_ds_dfm(); +void not_l_ais_dfm(); +void not_l_aips_dfm(); +void not_l_pais_dfm(); +void not_l_das_dfm(); +void not_l_dais_dfm(); +void not_l_adr16_dfm(); +void not_l_adr32_dfm(); +void move_ds_sr_dfm(); +void move_ais_sr_dfm(); +void move_aips_sr_dfm(); +void move_pais_sr_dfm(); +void move_das_sr_dfm(); +void move_dais_sr_dfm(); +void move_adr16_sr_dfm(); +void move_adr32_sr_dfm(); +void move_dpc_sr_dfm(); +void move_dpci_sr_dfm(); +void move_i16u_sr_dfm(); +void nbcd_b_ds_dfm(); +void nbcd_b_ais_dfm(); +void nbcd_b_aips_dfm(); +void nbcd_b_pais_dfm(); +void nbcd_b_das_dfm(); +void nbcd_b_dais_dfm(); +void nbcd_b_adr16_dfm(); +void nbcd_b_adr32_dfm(); +void swap_ds_dfm(); +void pea_ais_dfm(); +void pea_das_dfm(); +void pea_dais_dfm(); +void pea_adr16_dfm(); +void pea_adr32_dfm(); +void pea_dpc_dfm(); +void pea_dpci_dfm(); +void ext_w_ds_dfm(); +void movem_w_list_ais_dfm(); +void movem_w_listp_pais_dfm(); +void movem_w_list_das_dfm(); +void movem_w_list_dais_dfm(); +void movem_w_list_adr16_dfm(); +void movem_w_list_adr32_dfm(); +void ext_l_ds_dfm(); +void movem_l_list_ais_dfm(); +void movem_l_listp_pais_dfm(); +void movem_l_list_das_dfm(); +void movem_l_list_dais_dfm(); +void movem_l_list_adr16_dfm(); +void movem_l_list_adr32_dfm(); +void tst_b_ds_dfm(); +void tst_b_ais_dfm(); +void tst_b_aips_dfm(); +void tst_b_pais_dfm(); +void tst_b_das_dfm(); +void tst_b_dais_dfm(); +void tst_b_adr16_dfm(); +void tst_b_adr32_dfm(); +void tst_w_ds_dfm(); +void tst_w_ais_dfm(); +void tst_w_aips_dfm(); +void tst_w_pais_dfm(); +void tst_w_das_dfm(); +void tst_w_dais_dfm(); +void tst_w_adr16_dfm(); +void tst_w_adr32_dfm(); +void tst_l_ds_dfm(); +void tst_l_ais_dfm(); +void tst_l_aips_dfm(); +void tst_l_pais_dfm(); +void tst_l_das_dfm(); +void tst_l_dais_dfm(); +void tst_l_adr16_dfm(); +void tst_l_adr32_dfm(); +void tas_ds_dfm(); +void tas_ais_dfm(); +void tas_aips_dfm(); +void tas_pais_dfm(); +void tas_das_dfm(); +void tas_dais_dfm(); +void tas_adr16_dfm(); +void tas_adr32_dfm(); +void movem_w_ais_list_dfm(); +void movem_w_aips_list_dfm(); +void movem_w_das_list_dfm(); +void movem_w_dais_list_dfm(); +void movem_w_adr16_list_dfm(); +void movem_w_adr32_list_dfm(); +void movem_w_dpc_list_dfm(); +void movem_w_dpci_list_dfm(); +void movem_l_ais_list_dfm(); +void movem_l_aips_list_dfm(); +void movem_l_das_list_dfm(); +void movem_l_dais_list_dfm(); +void movem_l_adr16_list_dfm(); +void movem_l_adr32_list_dfm(); +void movem_l_dpc_list_dfm(); +void movem_l_dpci_list_dfm(); +void trap_imm4_dfm(); +void link_as_imm16_dfm(); +void unlk_as_dfm(); +void move_as_usp_dfm(); +void move_usp_as_dfm(); +void reset_dfm(); +void nop_dfm(); +void stop_i16u_dfm(); +void rte_dfm(); +void rts_dfm(); +void trapv_dfm(); +void rtr_dfm(); +void jsr_ais_dfm(); +void jsr_das_dfm(); +void jsr_dais_dfm(); +void jsr_adr16_dfm(); +void jsr_adr32_dfm(); +void jsr_dpc_dfm(); +void jsr_dpci_dfm(); +void jmp_ais_dfm(); +void jmp_das_dfm(); +void jmp_dais_dfm(); +void jmp_adr16_dfm(); +void jmp_adr32_dfm(); +void jmp_dpc_dfm(); +void jmp_dpci_dfm(); +void addq_b_imm3_ds_dfm(); +void addq_b_imm3_ais_dfm(); +void addq_b_imm3_aips_dfm(); +void addq_b_imm3_pais_dfm(); +void addq_b_imm3_das_dfm(); +void addq_b_imm3_dais_dfm(); +void addq_b_imm3_adr16_dfm(); +void addq_b_imm3_adr32_dfm(); +void addq_w_imm3_ds_dfm(); +void addq_w_imm3_as_dfm(); +void addq_w_imm3_ais_dfm(); +void addq_w_imm3_aips_dfm(); +void addq_w_imm3_pais_dfm(); +void addq_w_imm3_das_dfm(); +void addq_w_imm3_dais_dfm(); +void addq_w_imm3_adr16_dfm(); +void addq_w_imm3_adr32_dfm(); +void addq_l_imm3_ds_dfm(); +void addq_l_imm3_as_dfm(); +void addq_l_imm3_ais_dfm(); +void addq_l_imm3_aips_dfm(); +void addq_l_imm3_pais_dfm(); +void addq_l_imm3_das_dfm(); +void addq_l_imm3_dais_dfm(); +void addq_l_imm3_adr16_dfm(); +void addq_l_imm3_adr32_dfm(); +void st_ds_dfm(); +void dbt_ds_rel16_dfm(); +void st_ais_dfm(); +void st_aips_dfm(); +void st_pais_dfm(); +void st_das_dfm(); +void st_dais_dfm(); +void st_adr16_dfm(); +void st_adr32_dfm(); +void subq_b_imm3_ds_dfm(); +void subq_b_imm3_ais_dfm(); +void subq_b_imm3_aips_dfm(); +void subq_b_imm3_pais_dfm(); +void subq_b_imm3_das_dfm(); +void subq_b_imm3_dais_dfm(); +void subq_b_imm3_adr16_dfm(); +void subq_b_imm3_adr32_dfm(); +void subq_w_imm3_ds_dfm(); +void subq_w_imm3_as_dfm(); +void subq_w_imm3_ais_dfm(); +void subq_w_imm3_aips_dfm(); +void subq_w_imm3_pais_dfm(); +void subq_w_imm3_das_dfm(); +void subq_w_imm3_dais_dfm(); +void subq_w_imm3_adr16_dfm(); +void subq_w_imm3_adr32_dfm(); +void subq_l_imm3_ds_dfm(); +void subq_l_imm3_as_dfm(); +void subq_l_imm3_ais_dfm(); +void subq_l_imm3_aips_dfm(); +void subq_l_imm3_pais_dfm(); +void subq_l_imm3_das_dfm(); +void subq_l_imm3_dais_dfm(); +void subq_l_imm3_adr16_dfm(); +void subq_l_imm3_adr32_dfm(); +void sf_ds_dfm(); +void dbra_ds_rel16_dfm(); +void sf_ais_dfm(); +void sf_aips_dfm(); +void sf_pais_dfm(); +void sf_das_dfm(); +void sf_dais_dfm(); +void sf_adr16_dfm(); +void sf_adr32_dfm(); +void shi_ds_dfm(); +void dbhi_ds_rel16_dfm(); +void shi_ais_dfm(); +void shi_aips_dfm(); +void shi_pais_dfm(); +void shi_das_dfm(); +void shi_dais_dfm(); +void shi_adr16_dfm(); +void shi_adr32_dfm(); +void sls_ds_dfm(); +void dbls_ds_rel16_dfm(); +void sls_ais_dfm(); +void sls_aips_dfm(); +void sls_pais_dfm(); +void sls_das_dfm(); +void sls_dais_dfm(); +void sls_adr16_dfm(); +void sls_adr32_dfm(); +void scc_ds_dfm(); +void dbcc_ds_rel16_dfm(); +void scc_ais_dfm(); +void scc_aips_dfm(); +void scc_pais_dfm(); +void scc_das_dfm(); +void scc_dais_dfm(); +void scc_adr16_dfm(); +void scc_adr32_dfm(); +void scs_ds_dfm(); +void dbcs_ds_rel16_dfm(); +void scs_ais_dfm(); +void scs_aips_dfm(); +void scs_pais_dfm(); +void scs_das_dfm(); +void scs_dais_dfm(); +void scs_adr16_dfm(); +void scs_adr32_dfm(); +void sne_ds_dfm(); +void dbne_ds_rel16_dfm(); +void sne_ais_dfm(); +void sne_aips_dfm(); +void sne_pais_dfm(); +void sne_das_dfm(); +void sne_dais_dfm(); +void sne_adr16_dfm(); +void sne_adr32_dfm(); +void seq_ds_dfm(); +void dbeq_ds_rel16_dfm(); +void seq_ais_dfm(); +void seq_aips_dfm(); +void seq_pais_dfm(); +void seq_das_dfm(); +void seq_dais_dfm(); +void seq_adr16_dfm(); +void seq_adr32_dfm(); +void svc_ds_dfm(); +void dbvc_ds_rel16_dfm(); +void svc_ais_dfm(); +void svc_aips_dfm(); +void svc_pais_dfm(); +void svc_das_dfm(); +void svc_dais_dfm(); +void svc_adr16_dfm(); +void svc_adr32_dfm(); +void svs_ds_dfm(); +void dbvs_ds_rel16_dfm(); +void svs_ais_dfm(); +void svs_aips_dfm(); +void svs_pais_dfm(); +void svs_das_dfm(); +void svs_dais_dfm(); +void svs_adr16_dfm(); +void svs_adr32_dfm(); +void spl_ds_dfm(); +void dbpl_ds_rel16_dfm(); +void spl_ais_dfm(); +void spl_aips_dfm(); +void spl_pais_dfm(); +void spl_das_dfm(); +void spl_dais_dfm(); +void spl_adr16_dfm(); +void spl_adr32_dfm(); +void smi_ds_dfm(); +void dbmi_ds_rel16_dfm(); +void smi_ais_dfm(); +void smi_aips_dfm(); +void smi_pais_dfm(); +void smi_das_dfm(); +void smi_dais_dfm(); +void smi_adr16_dfm(); +void smi_adr32_dfm(); +void sge_ds_dfm(); +void dbge_ds_rel16_dfm(); +void sge_ais_dfm(); +void sge_aips_dfm(); +void sge_pais_dfm(); +void sge_das_dfm(); +void sge_dais_dfm(); +void sge_adr16_dfm(); +void sge_adr32_dfm(); +void slt_ds_dfm(); +void dblt_ds_rel16_dfm(); +void slt_ais_dfm(); +void slt_aips_dfm(); +void slt_pais_dfm(); +void slt_das_dfm(); +void slt_dais_dfm(); +void slt_adr16_dfm(); +void slt_adr32_dfm(); +void sgt_ds_dfm(); +void dbgt_ds_rel16_dfm(); +void sgt_ais_dfm(); +void sgt_aips_dfm(); +void sgt_pais_dfm(); +void sgt_das_dfm(); +void sgt_dais_dfm(); +void sgt_adr16_dfm(); +void sgt_adr32_dfm(); +void sle_ds_dfm(); +void dble_ds_rel16_dfm(); +void sle_ais_dfm(); +void sle_aips_dfm(); +void sle_pais_dfm(); +void sle_das_dfm(); +void sle_dais_dfm(); +void sle_adr16_dfm(); +void sle_adr32_dfm(); +void bra_rel16_dfm(); +void bra_rel8_dfm(); +void bsr_rel16_dfm(); +void bsr_rel8_dfm(); +void bhi_rel16_dfm(); +void bhi_rel8_dfm(); +void bls_rel16_dfm(); +void bls_rel8_dfm(); +void bcc_rel16_dfm(); +void bcc_rel8_dfm(); +void bcs_rel16_dfm(); +void bcs_rel8_dfm(); +void bne_rel16_dfm(); +void bne_rel8_dfm(); +void beq_rel16_dfm(); +void beq_rel8_dfm(); +void bvc_rel16_dfm(); +void bvc_rel8_dfm(); +void bvs_rel16_dfm(); +void bvs_rel8_dfm(); +void bpl_rel16_dfm(); +void bpl_rel8_dfm(); +void bmi_rel16_dfm(); +void bmi_rel8_dfm(); +void bge_rel16_dfm(); +void bge_rel8_dfm(); +void blt_rel16_dfm(); +void blt_rel8_dfm(); +void bgt_rel16_dfm(); +void bgt_rel8_dfm(); +void ble_rel16_dfm(); +void ble_rel8_dfm(); +void moveq_imm8o_dd_dfm(); +void or_b_ds_dd_dfm(); +void or_b_ais_dd_dfm(); +void or_b_aips_dd_dfm(); +void or_b_pais_dd_dfm(); +void or_b_das_dd_dfm(); +void or_b_dais_dd_dfm(); +void or_b_adr16_dd_dfm(); +void or_b_adr32_dd_dfm(); +void or_b_dpc_dd_dfm(); +void or_b_dpci_dd_dfm(); +void or_b_imm8_dd_dfm(); +void or_w_ds_dd_dfm(); +void or_w_ais_dd_dfm(); +void or_w_aips_dd_dfm(); +void or_w_pais_dd_dfm(); +void or_w_das_dd_dfm(); +void or_w_dais_dd_dfm(); +void or_w_adr16_dd_dfm(); +void or_w_adr32_dd_dfm(); +void or_w_dpc_dd_dfm(); +void or_w_dpci_dd_dfm(); +void or_w_imm16_dd_dfm(); +void or_l_ds_dd_dfm(); +void or_l_ais_dd_dfm(); +void or_l_aips_dd_dfm(); +void or_l_pais_dd_dfm(); +void or_l_das_dd_dfm(); +void or_l_dais_dd_dfm(); +void or_l_adr16_dd_dfm(); +void or_l_adr32_dd_dfm(); +void or_l_dpc_dd_dfm(); +void or_l_dpci_dd_dfm(); +void or_l_imm32_dd_dfm(); +void divu_w_ds_dd_dfm(); +void divu_w_ais_dd_dfm(); +void divu_w_aips_dd_dfm(); +void divu_w_pais_dd_dfm(); +void divu_w_das_dd_dfm(); +void divu_w_dais_dd_dfm(); +void divu_w_adr16_dd_dfm(); +void divu_w_adr32_dd_dfm(); +void divu_w_dpc_dd_dfm(); +void divu_w_dpci_dd_dfm(); +void divu_w_imm16_dd_dfm(); +void sbcd_ds_dd_dfm(); +void sbcd_pais_paid_dfm(); +void or_b_dd_ais_dfm(); +void or_b_dd_aips_dfm(); +void or_b_dd_pais_dfm(); +void or_b_dd_das_dfm(); +void or_b_dd_dais_dfm(); +void or_b_dd_adr16_dfm(); +void or_b_dd_adr32_dfm(); +void or_w_dd_ais_dfm(); +void or_w_dd_aips_dfm(); +void or_w_dd_pais_dfm(); +void or_w_dd_das_dfm(); +void or_w_dd_dais_dfm(); +void or_w_dd_adr16_dfm(); +void or_w_dd_adr32_dfm(); +void or_l_dd_ais_dfm(); +void or_l_dd_aips_dfm(); +void or_l_dd_pais_dfm(); +void or_l_dd_das_dfm(); +void or_l_dd_dais_dfm(); +void or_l_dd_adr16_dfm(); +void or_l_dd_adr32_dfm(); +void divs_w_ds_dd_dfm(); +void divs_w_ais_dd_dfm(); +void divs_w_aips_dd_dfm(); +void divs_w_pais_dd_dfm(); +void divs_w_das_dd_dfm(); +void divs_w_dais_dd_dfm(); +void divs_w_adr16_dd_dfm(); +void divs_w_adr32_dd_dfm(); +void divs_w_dpc_dd_dfm(); +void divs_w_dpci_dd_dfm(); +void divs_w_imm16_dd_dfm(); +void sub_b_ds_dd_dfm(); +void sub_b_ais_dd_dfm(); +void sub_b_aips_dd_dfm(); +void sub_b_pais_dd_dfm(); +void sub_b_das_dd_dfm(); +void sub_b_dais_dd_dfm(); +void sub_b_adr16_dd_dfm(); +void sub_b_adr32_dd_dfm(); +void sub_b_dpc_dd_dfm(); +void sub_b_dpci_dd_dfm(); +void sub_b_imm8_dd_dfm(); +void sub_w_ds_dd_dfm(); +void sub_w_as_dd_dfm(); +void sub_w_ais_dd_dfm(); +void sub_w_aips_dd_dfm(); +void sub_w_pais_dd_dfm(); +void sub_w_das_dd_dfm(); +void sub_w_dais_dd_dfm(); +void sub_w_adr16_dd_dfm(); +void sub_w_adr32_dd_dfm(); +void sub_w_dpc_dd_dfm(); +void sub_w_dpci_dd_dfm(); +void sub_w_imm16_dd_dfm(); +void sub_l_ds_dd_dfm(); +void sub_l_as_dd_dfm(); +void sub_l_ais_dd_dfm(); +void sub_l_aips_dd_dfm(); +void sub_l_pais_dd_dfm(); +void sub_l_das_dd_dfm(); +void sub_l_dais_dd_dfm(); +void sub_l_adr16_dd_dfm(); +void sub_l_adr32_dd_dfm(); +void sub_l_dpc_dd_dfm(); +void sub_l_dpci_dd_dfm(); +void sub_l_imm32_dd_dfm(); +void suba_w_ds_ad_dfm(); +void suba_w_as_ad_dfm(); +void suba_w_ais_ad_dfm(); +void suba_w_aips_ad_dfm(); +void suba_w_pais_ad_dfm(); +void suba_w_das_ad_dfm(); +void suba_w_dais_ad_dfm(); +void suba_w_adr16_ad_dfm(); +void suba_w_adr32_ad_dfm(); +void suba_w_dpc_ad_dfm(); +void suba_w_dpci_ad_dfm(); +void suba_w_imm16_ad_dfm(); +void subx_b_ds_dd_dfm(); +void subx_b_pais_paid_dfm(); +void sub_b_dd_ais_dfm(); +void sub_b_dd_aips_dfm(); +void sub_b_dd_pais_dfm(); +void sub_b_dd_das_dfm(); +void sub_b_dd_dais_dfm(); +void sub_b_dd_adr16_dfm(); +void sub_b_dd_adr32_dfm(); +void subx_w_ds_dd_dfm(); +void subx_w_pais_paid_dfm(); +void sub_w_dd_ais_dfm(); +void sub_w_dd_aips_dfm(); +void sub_w_dd_pais_dfm(); +void sub_w_dd_das_dfm(); +void sub_w_dd_dais_dfm(); +void sub_w_dd_adr16_dfm(); +void sub_w_dd_adr32_dfm(); +void subx_l_ds_dd_dfm(); +void subx_l_pais_paid_dfm(); +void sub_l_dd_ais_dfm(); +void sub_l_dd_aips_dfm(); +void sub_l_dd_pais_dfm(); +void sub_l_dd_das_dfm(); +void sub_l_dd_dais_dfm(); +void sub_l_dd_adr16_dfm(); +void sub_l_dd_adr32_dfm(); +void suba_l_ds_ad_dfm(); +void suba_l_as_ad_dfm(); +void suba_l_ais_ad_dfm(); +void suba_l_aips_ad_dfm(); +void suba_l_pais_ad_dfm(); +void suba_l_das_ad_dfm(); +void suba_l_dais_ad_dfm(); +void suba_l_adr16_ad_dfm(); +void suba_l_adr32_ad_dfm(); +void suba_l_dpc_ad_dfm(); +void suba_l_dpci_ad_dfm(); +void suba_l_imm32_ad_dfm(); +void cmp_b_ds_dd_dfm(); +void cmp_b_ais_dd_dfm(); +void cmp_b_aips_dd_dfm(); +void cmp_b_pais_dd_dfm(); +void cmp_b_das_dd_dfm(); +void cmp_b_dais_dd_dfm(); +void cmp_b_adr16_dd_dfm(); +void cmp_b_adr32_dd_dfm(); +void cmp_b_dpc_dd_dfm(); +void cmp_b_dpci_dd_dfm(); +void cmp_b_imm8_dd_dfm(); +void cmp_w_ds_dd_dfm(); +void cmp_w_as_dd_dfm(); +void cmp_w_ais_dd_dfm(); +void cmp_w_aips_dd_dfm(); +void cmp_w_pais_dd_dfm(); +void cmp_w_das_dd_dfm(); +void cmp_w_dais_dd_dfm(); +void cmp_w_adr16_dd_dfm(); +void cmp_w_adr32_dd_dfm(); +void cmp_w_dpc_dd_dfm(); +void cmp_w_dpci_dd_dfm(); +void cmp_w_imm16_dd_dfm(); +void cmp_l_ds_dd_dfm(); +void cmp_l_as_dd_dfm(); +void cmp_l_ais_dd_dfm(); +void cmp_l_aips_dd_dfm(); +void cmp_l_pais_dd_dfm(); +void cmp_l_das_dd_dfm(); +void cmp_l_dais_dd_dfm(); +void cmp_l_adr16_dd_dfm(); +void cmp_l_adr32_dd_dfm(); +void cmp_l_dpc_dd_dfm(); +void cmp_l_dpci_dd_dfm(); +void cmp_l_imm32_dd_dfm(); +void cmpa_w_ds_ad_dfm(); +void cmpa_w_as_ad_dfm(); +void cmpa_w_ais_ad_dfm(); +void cmpa_w_aips_ad_dfm(); +void cmpa_w_pais_ad_dfm(); +void cmpa_w_das_ad_dfm(); +void cmpa_w_dais_ad_dfm(); +void cmpa_w_adr16_ad_dfm(); +void cmpa_w_adr32_ad_dfm(); +void cmpa_w_dpc_ad_dfm(); +void cmpa_w_dpci_ad_dfm(); +void cmpa_w_imm16_ad_dfm(); +void eor_b_dd_ds_dfm(); +void cmpm_b_aips_aipd_dfm(); +void eor_b_dd_ais_dfm(); +void eor_b_dd_aips_dfm(); +void eor_b_dd_pais_dfm(); +void eor_b_dd_das_dfm(); +void eor_b_dd_dais_dfm(); +void eor_b_dd_adr16_dfm(); +void eor_b_dd_adr32_dfm(); +void eor_w_dd_ds_dfm(); +void cmpm_w_aips_aipd_dfm(); +void eor_w_dd_ais_dfm(); +void eor_w_dd_aips_dfm(); +void eor_w_dd_pais_dfm(); +void eor_w_dd_das_dfm(); +void eor_w_dd_dais_dfm(); +void eor_w_dd_adr16_dfm(); +void eor_w_dd_adr32_dfm(); +void eor_l_dd_ds_dfm(); +void cmpm_l_aips_aipd_dfm(); +void eor_l_dd_ais_dfm(); +void eor_l_dd_aips_dfm(); +void eor_l_dd_pais_dfm(); +void eor_l_dd_das_dfm(); +void eor_l_dd_dais_dfm(); +void eor_l_dd_adr16_dfm(); +void eor_l_dd_adr32_dfm(); +void cmpa_l_ds_ad_dfm(); +void cmpa_l_as_ad_dfm(); +void cmpa_l_ais_ad_dfm(); +void cmpa_l_aips_ad_dfm(); +void cmpa_l_pais_ad_dfm(); +void cmpa_l_das_ad_dfm(); +void cmpa_l_dais_ad_dfm(); +void cmpa_l_adr16_ad_dfm(); +void cmpa_l_adr32_ad_dfm(); +void cmpa_l_dpc_ad_dfm(); +void cmpa_l_dpci_ad_dfm(); +void cmpa_l_imm32_ad_dfm(); +void and_b_ds_dd_dfm(); +void and_b_ais_dd_dfm(); +void and_b_aips_dd_dfm(); +void and_b_pais_dd_dfm(); +void and_b_das_dd_dfm(); +void and_b_dais_dd_dfm(); +void and_b_adr16_dd_dfm(); +void and_b_adr32_dd_dfm(); +void and_b_dpc_dd_dfm(); +void and_b_dpci_dd_dfm(); +void and_b_imm8_dd_dfm(); +void and_w_ds_dd_dfm(); +void and_w_ais_dd_dfm(); +void and_w_aips_dd_dfm(); +void and_w_pais_dd_dfm(); +void and_w_das_dd_dfm(); +void and_w_dais_dd_dfm(); +void and_w_adr16_dd_dfm(); +void and_w_adr32_dd_dfm(); +void and_w_dpc_dd_dfm(); +void and_w_dpci_dd_dfm(); +void and_w_imm16_dd_dfm(); +void and_l_ds_dd_dfm(); +void and_l_ais_dd_dfm(); +void and_l_aips_dd_dfm(); +void and_l_pais_dd_dfm(); +void and_l_das_dd_dfm(); +void and_l_dais_dd_dfm(); +void and_l_adr16_dd_dfm(); +void and_l_adr32_dd_dfm(); +void and_l_dpc_dd_dfm(); +void and_l_dpci_dd_dfm(); +void and_l_imm32_dd_dfm(); +void mulu_w_ds_dd_dfm(); +void mulu_w_ais_dd_dfm(); +void mulu_w_aips_dd_dfm(); +void mulu_w_pais_dd_dfm(); +void mulu_w_das_dd_dfm(); +void mulu_w_dais_dd_dfm(); +void mulu_w_adr16_dd_dfm(); +void mulu_w_adr32_dd_dfm(); +void mulu_w_dpc_dd_dfm(); +void mulu_w_dpci_dd_dfm(); +void mulu_w_imm16_dd_dfm(); +void abcd_ds_dd_dfm(); +void abcd_pais_paid_dfm(); +void and_b_dd_ais_dfm(); +void and_b_dd_aips_dfm(); +void and_b_dd_pais_dfm(); +void and_b_dd_das_dfm(); +void and_b_dd_dais_dfm(); +void and_b_dd_adr16_dfm(); +void and_b_dd_adr32_dfm(); +void exg_dd_ds_dfm(); +void exg_ad_as_dfm(); +void and_w_dd_ais_dfm(); +void and_w_dd_aips_dfm(); +void and_w_dd_pais_dfm(); +void and_w_dd_das_dfm(); +void and_w_dd_dais_dfm(); +void and_w_dd_adr16_dfm(); +void and_w_dd_adr32_dfm(); +void exg_dd_as_dfm(); +void and_l_dd_ais_dfm(); +void and_l_dd_aips_dfm(); +void and_l_dd_pais_dfm(); +void and_l_dd_das_dfm(); +void and_l_dd_dais_dfm(); +void and_l_dd_adr16_dfm(); +void and_l_dd_adr32_dfm(); +void muls_w_ds_dd_dfm(); +void muls_w_ais_dd_dfm(); +void muls_w_aips_dd_dfm(); +void muls_w_pais_dd_dfm(); +void muls_w_das_dd_dfm(); +void muls_w_dais_dd_dfm(); +void muls_w_adr16_dd_dfm(); +void muls_w_adr32_dd_dfm(); +void muls_w_dpc_dd_dfm(); +void muls_w_dpci_dd_dfm(); +void muls_w_imm16_dd_dfm(); +void add_b_ds_dd_dfm(); +void add_b_ais_dd_dfm(); +void add_b_aips_dd_dfm(); +void add_b_pais_dd_dfm(); +void add_b_das_dd_dfm(); +void add_b_dais_dd_dfm(); +void add_b_adr16_dd_dfm(); +void add_b_adr32_dd_dfm(); +void add_b_dpc_dd_dfm(); +void add_b_dpci_dd_dfm(); +void add_b_imm8_dd_dfm(); +void add_w_ds_dd_dfm(); +void add_w_as_dd_dfm(); +void add_w_ais_dd_dfm(); +void add_w_aips_dd_dfm(); +void add_w_pais_dd_dfm(); +void add_w_das_dd_dfm(); +void add_w_dais_dd_dfm(); +void add_w_adr16_dd_dfm(); +void add_w_adr32_dd_dfm(); +void add_w_dpc_dd_dfm(); +void add_w_dpci_dd_dfm(); +void add_w_imm16_dd_dfm(); +void add_l_ds_dd_dfm(); +void add_l_as_dd_dfm(); +void add_l_ais_dd_dfm(); +void add_l_aips_dd_dfm(); +void add_l_pais_dd_dfm(); +void add_l_das_dd_dfm(); +void add_l_dais_dd_dfm(); +void add_l_adr16_dd_dfm(); +void add_l_adr32_dd_dfm(); +void add_l_dpc_dd_dfm(); +void add_l_dpci_dd_dfm(); +void add_l_imm32_dd_dfm(); +void adda_w_ds_ad_dfm(); +void adda_w_as_ad_dfm(); +void adda_w_ais_ad_dfm(); +void adda_w_aips_ad_dfm(); +void adda_w_pais_ad_dfm(); +void adda_w_das_ad_dfm(); +void adda_w_dais_ad_dfm(); +void adda_w_adr16_ad_dfm(); +void adda_w_adr32_ad_dfm(); +void adda_w_dpc_ad_dfm(); +void adda_w_dpci_ad_dfm(); +void adda_w_imm16_ad_dfm(); +void addx_b_ds_dd_dfm(); +void addx_b_pais_paid_dfm(); +void add_b_dd_ais_dfm(); +void add_b_dd_aips_dfm(); +void add_b_dd_pais_dfm(); +void add_b_dd_das_dfm(); +void add_b_dd_dais_dfm(); +void add_b_dd_adr16_dfm(); +void add_b_dd_adr32_dfm(); +void addx_w_ds_dd_dfm(); +void addx_w_pais_paid_dfm(); +void add_w_dd_ais_dfm(); +void add_w_dd_aips_dfm(); +void add_w_dd_pais_dfm(); +void add_w_dd_das_dfm(); +void add_w_dd_dais_dfm(); +void add_w_dd_adr16_dfm(); +void add_w_dd_adr32_dfm(); +void addx_l_ds_dd_dfm(); +void addx_l_pais_paid_dfm(); +void add_l_dd_ais_dfm(); +void add_l_dd_aips_dfm(); +void add_l_dd_pais_dfm(); +void add_l_dd_das_dfm(); +void add_l_dd_dais_dfm(); +void add_l_dd_adr16_dfm(); +void add_l_dd_adr32_dfm(); +void adda_l_ds_ad_dfm(); +void adda_l_as_ad_dfm(); +void adda_l_ais_ad_dfm(); +void adda_l_aips_ad_dfm(); +void adda_l_pais_ad_dfm(); +void adda_l_das_ad_dfm(); +void adda_l_dais_ad_dfm(); +void adda_l_adr16_ad_dfm(); +void adda_l_adr32_ad_dfm(); +void adda_l_dpc_ad_dfm(); +void adda_l_dpci_ad_dfm(); +void adda_l_imm32_ad_dfm(); +void asr_b_imm3_ds_dfm(); +void lsr_b_imm3_ds_dfm(); +void roxr_b_imm3_ds_dfm(); +void ror_b_imm3_ds_dfm(); +void asr_b_dd_ds_dfm(); +void lsr_b_dd_ds_dfm(); +void roxr_b_dd_ds_dfm(); +void ror_b_dd_ds_dfm(); +void asr_w_imm3_ds_dfm(); +void lsr_w_imm3_ds_dfm(); +void roxr_w_imm3_ds_dfm(); +void ror_w_imm3_ds_dfm(); +void asr_w_dd_ds_dfm(); +void lsr_w_dd_ds_dfm(); +void roxr_w_dd_ds_dfm(); +void ror_w_dd_ds_dfm(); +void asr_l_imm3_ds_dfm(); +void lsr_l_imm3_ds_dfm(); +void roxr_l_imm3_ds_dfm(); +void ror_l_imm3_ds_dfm(); +void asr_l_dd_ds_dfm(); +void lsr_l_dd_ds_dfm(); +void roxr_l_dd_ds_dfm(); +void ror_l_dd_ds_dfm(); +void asr_ais_dfm(); +void asr_aips_dfm(); +void asr_pais_dfm(); +void asr_das_dfm(); +void asr_dais_dfm(); +void asr_adr16_dfm(); +void asr_adr32_dfm(); +void asl_b_imm3_ds_dfm(); +void lsl_b_imm3_ds_dfm(); +void roxl_b_imm3_ds_dfm(); +void rol_b_imm3_ds_dfm(); +void asl_b_dd_ds_dfm(); +void lsl_b_dd_ds_dfm(); +void roxl_b_dd_ds_dfm(); +void rol_b_dd_ds_dfm(); +void asl_w_imm3_ds_dfm(); +void lsl_w_imm3_ds_dfm(); +void roxl_w_imm3_ds_dfm(); +void rol_w_imm3_ds_dfm(); +void asl_w_dd_ds_dfm(); +void lsl_w_dd_ds_dfm(); +void roxl_w_dd_ds_dfm(); +void rol_w_dd_ds_dfm(); +void asl_l_imm3_ds_dfm(); +void lsl_l_imm3_ds_dfm(); +void roxl_l_imm3_ds_dfm(); +void rol_l_imm3_ds_dfm(); +void asl_l_dd_ds_dfm(); +void lsl_l_dd_ds_dfm(); +void roxl_l_dd_ds_dfm(); +void rol_l_dd_ds_dfm(); +void asl_ais_dfm(); +void asl_aips_dfm(); +void asl_pais_dfm(); +void asl_das_dfm(); +void asl_dais_dfm(); +void asl_adr16_dfm(); +void asl_adr32_dfm(); +void lsr_ais_dfm(); +void lsr_aips_dfm(); +void lsr_pais_dfm(); +void lsr_das_dfm(); +void lsr_dais_dfm(); +void lsr_adr16_dfm(); +void lsr_adr32_dfm(); +void lsl_ais_dfm(); +void lsl_aips_dfm(); +void lsl_pais_dfm(); +void lsl_das_dfm(); +void lsl_dais_dfm(); +void lsl_adr16_dfm(); +void lsl_adr32_dfm(); +void roxr_ais_dfm(); +void roxr_aips_dfm(); +void roxr_pais_dfm(); +void roxr_das_dfm(); +void roxr_dais_dfm(); +void roxr_adr16_dfm(); +void roxr_adr32_dfm(); +void roxl_ais_dfm(); +void roxl_aips_dfm(); +void roxl_pais_dfm(); +void roxl_das_dfm(); +void roxl_dais_dfm(); +void roxl_adr16_dfm(); +void roxl_adr32_dfm(); +void ror_ais_dfm(); +void ror_aips_dfm(); +void ror_pais_dfm(); +void ror_das_dfm(); +void ror_dais_dfm(); +void ror_adr16_dfm(); +void ror_adr32_dfm(); +void rol_ais_dfm(); +void rol_aips_dfm(); +void rol_pais_dfm(); +void rol_das_dfm(); +void rol_dais_dfm(); +void rol_adr16_dfm(); +void rol_adr32_dfm(); +void state_reset_ifm(); +void state_bus_error_ifm(); +void state_address_error_ifm(); +void state_double_fault_ifm(); +void state_interrupt_ifm(); +void state_trace_ifm(); +void state_illegal_ifm(); +void state_priviledge_ifm(); +void state_linea_ifm(); +void state_linef_ifm(); +void ori_b_imm8_ds_ifm(); +void ori_b_imm8_ais_ifm(); +void ori_b_imm8_aips_ifm(); +void ori_b_imm8_pais_ifm(); +void ori_b_imm8_das_ifm(); +void ori_b_imm8_dais_ifm(); +void ori_b_imm8_adr16_ifm(); +void ori_b_imm8_adr32_ifm(); +void ori_imm8_ccr_ifm(); +void ori_w_imm16_ds_ifm(); +void ori_w_imm16_ais_ifm(); +void ori_w_imm16_aips_ifm(); +void ori_w_imm16_pais_ifm(); +void ori_w_imm16_das_ifm(); +void ori_w_imm16_dais_ifm(); +void ori_w_imm16_adr16_ifm(); +void ori_w_imm16_adr32_ifm(); +void ori_i16u_sr_ifm(); +void ori_l_imm32_ds_ifm(); +void ori_l_imm32_ais_ifm(); +void ori_l_imm32_aips_ifm(); +void ori_l_imm32_pais_ifm(); +void ori_l_imm32_das_ifm(); +void ori_l_imm32_dais_ifm(); +void ori_l_imm32_adr16_ifm(); +void ori_l_imm32_adr32_ifm(); +void btst_dd_ds_ifm(); +void movep_w_das_dd_ifm(); +void btst_dd_ais_ifm(); +void btst_dd_aips_ifm(); +void btst_dd_pais_ifm(); +void btst_dd_das_ifm(); +void btst_dd_dais_ifm(); +void btst_dd_adr16_ifm(); +void btst_dd_adr32_ifm(); +void btst_dd_dpc_ifm(); +void btst_dd_dpci_ifm(); +void btst_dd_imm_ifm(); +void bchg_dd_ds_ifm(); +void movep_l_das_dd_ifm(); +void bchg_dd_ais_ifm(); +void bchg_dd_aips_ifm(); +void bchg_dd_pais_ifm(); +void bchg_dd_das_ifm(); +void bchg_dd_dais_ifm(); +void bchg_dd_adr16_ifm(); +void bchg_dd_adr32_ifm(); +void bclr_dd_ds_ifm(); +void movep_w_dd_das_ifm(); +void bclr_dd_ais_ifm(); +void bclr_dd_aips_ifm(); +void bclr_dd_pais_ifm(); +void bclr_dd_das_ifm(); +void bclr_dd_dais_ifm(); +void bclr_dd_adr16_ifm(); +void bclr_dd_adr32_ifm(); +void bset_dd_ds_ifm(); +void movep_l_dd_das_ifm(); +void bset_dd_ais_ifm(); +void bset_dd_aips_ifm(); +void bset_dd_pais_ifm(); +void bset_dd_das_ifm(); +void bset_dd_dais_ifm(); +void bset_dd_adr16_ifm(); +void bset_dd_adr32_ifm(); +void andi_b_imm8_ds_ifm(); +void andi_b_imm8_ais_ifm(); +void andi_b_imm8_aips_ifm(); +void andi_b_imm8_pais_ifm(); +void andi_b_imm8_das_ifm(); +void andi_b_imm8_dais_ifm(); +void andi_b_imm8_adr16_ifm(); +void andi_b_imm8_adr32_ifm(); +void andi_imm8_ccr_ifm(); +void andi_w_imm16_ds_ifm(); +void andi_w_imm16_ais_ifm(); +void andi_w_imm16_aips_ifm(); +void andi_w_imm16_pais_ifm(); +void andi_w_imm16_das_ifm(); +void andi_w_imm16_dais_ifm(); +void andi_w_imm16_adr16_ifm(); +void andi_w_imm16_adr32_ifm(); +void andi_i16u_sr_ifm(); +void andi_l_imm32_ds_ifm(); +void andi_l_imm32_ais_ifm(); +void andi_l_imm32_aips_ifm(); +void andi_l_imm32_pais_ifm(); +void andi_l_imm32_das_ifm(); +void andi_l_imm32_dais_ifm(); +void andi_l_imm32_adr16_ifm(); +void andi_l_imm32_adr32_ifm(); +void subi_b_imm8_ds_ifm(); +void subi_b_imm8_ais_ifm(); +void subi_b_imm8_aips_ifm(); +void subi_b_imm8_pais_ifm(); +void subi_b_imm8_das_ifm(); +void subi_b_imm8_dais_ifm(); +void subi_b_imm8_adr16_ifm(); +void subi_b_imm8_adr32_ifm(); +void subi_w_imm16_ds_ifm(); +void subi_w_imm16_ais_ifm(); +void subi_w_imm16_aips_ifm(); +void subi_w_imm16_pais_ifm(); +void subi_w_imm16_das_ifm(); +void subi_w_imm16_dais_ifm(); +void subi_w_imm16_adr16_ifm(); +void subi_w_imm16_adr32_ifm(); +void subi_l_imm32_ds_ifm(); +void subi_l_imm32_ais_ifm(); +void subi_l_imm32_aips_ifm(); +void subi_l_imm32_pais_ifm(); +void subi_l_imm32_das_ifm(); +void subi_l_imm32_dais_ifm(); +void subi_l_imm32_adr16_ifm(); +void subi_l_imm32_adr32_ifm(); +void addi_b_imm8_ds_ifm(); +void addi_b_imm8_ais_ifm(); +void addi_b_imm8_aips_ifm(); +void addi_b_imm8_pais_ifm(); +void addi_b_imm8_das_ifm(); +void addi_b_imm8_dais_ifm(); +void addi_b_imm8_adr16_ifm(); +void addi_b_imm8_adr32_ifm(); +void addi_w_imm16_ds_ifm(); +void addi_w_imm16_ais_ifm(); +void addi_w_imm16_aips_ifm(); +void addi_w_imm16_pais_ifm(); +void addi_w_imm16_das_ifm(); +void addi_w_imm16_dais_ifm(); +void addi_w_imm16_adr16_ifm(); +void addi_w_imm16_adr32_ifm(); +void addi_l_imm32_ds_ifm(); +void addi_l_imm32_ais_ifm(); +void addi_l_imm32_aips_ifm(); +void addi_l_imm32_pais_ifm(); +void addi_l_imm32_das_ifm(); +void addi_l_imm32_dais_ifm(); +void addi_l_imm32_adr16_ifm(); +void addi_l_imm32_adr32_ifm(); +void btst_imm8_ds_ifm(); +void btst_imm8_ais_ifm(); +void btst_imm8_aips_ifm(); +void btst_imm8_pais_ifm(); +void btst_imm8_das_ifm(); +void btst_imm8_dais_ifm(); +void btst_imm8_adr16_ifm(); +void btst_imm8_adr32_ifm(); +void btst_imm8_dpc_ifm(); +void btst_imm8_dpci_ifm(); +void bchg_imm8_ds_ifm(); +void bchg_imm8_ais_ifm(); +void bchg_imm8_aips_ifm(); +void bchg_imm8_pais_ifm(); +void bchg_imm8_das_ifm(); +void bchg_imm8_dais_ifm(); +void bchg_imm8_adr16_ifm(); +void bchg_imm8_adr32_ifm(); +void bclr_imm8_ds_ifm(); +void bclr_imm8_ais_ifm(); +void bclr_imm8_aips_ifm(); +void bclr_imm8_pais_ifm(); +void bclr_imm8_das_ifm(); +void bclr_imm8_dais_ifm(); +void bclr_imm8_adr16_ifm(); +void bclr_imm8_adr32_ifm(); +void bset_imm8_ds_ifm(); +void bset_imm8_ais_ifm(); +void bset_imm8_aips_ifm(); +void bset_imm8_pais_ifm(); +void bset_imm8_das_ifm(); +void bset_imm8_dais_ifm(); +void bset_imm8_adr16_ifm(); +void bset_imm8_adr32_ifm(); +void eori_b_imm8_ds_ifm(); +void eori_b_imm8_ais_ifm(); +void eori_b_imm8_aips_ifm(); +void eori_b_imm8_pais_ifm(); +void eori_b_imm8_das_ifm(); +void eori_b_imm8_dais_ifm(); +void eori_b_imm8_adr16_ifm(); +void eori_b_imm8_adr32_ifm(); +void eori_imm8_ccr_ifm(); +void eori_w_imm16_ds_ifm(); +void eori_w_imm16_ais_ifm(); +void eori_w_imm16_aips_ifm(); +void eori_w_imm16_pais_ifm(); +void eori_w_imm16_das_ifm(); +void eori_w_imm16_dais_ifm(); +void eori_w_imm16_adr16_ifm(); +void eori_w_imm16_adr32_ifm(); +void eori_i16u_sr_ifm(); +void eori_l_imm32_ds_ifm(); +void eori_l_imm32_ais_ifm(); +void eori_l_imm32_aips_ifm(); +void eori_l_imm32_pais_ifm(); +void eori_l_imm32_das_ifm(); +void eori_l_imm32_dais_ifm(); +void eori_l_imm32_adr16_ifm(); +void eori_l_imm32_adr32_ifm(); +void cmpi_b_imm8_ds_ifm(); +void cmpi_b_imm8_ais_ifm(); +void cmpi_b_imm8_aips_ifm(); +void cmpi_b_imm8_pais_ifm(); +void cmpi_b_imm8_das_ifm(); +void cmpi_b_imm8_dais_ifm(); +void cmpi_b_imm8_adr16_ifm(); +void cmpi_b_imm8_adr32_ifm(); +void cmpi_w_imm16_ds_ifm(); +void cmpi_w_imm16_ais_ifm(); +void cmpi_w_imm16_aips_ifm(); +void cmpi_w_imm16_pais_ifm(); +void cmpi_w_imm16_das_ifm(); +void cmpi_w_imm16_dais_ifm(); +void cmpi_w_imm16_adr16_ifm(); +void cmpi_w_imm16_adr32_ifm(); +void cmpi_l_imm32_ds_ifm(); +void cmpi_l_imm32_ais_ifm(); +void cmpi_l_imm32_aips_ifm(); +void cmpi_l_imm32_pais_ifm(); +void cmpi_l_imm32_das_ifm(); +void cmpi_l_imm32_dais_ifm(); +void cmpi_l_imm32_adr16_ifm(); +void cmpi_l_imm32_adr32_ifm(); +void move_b_ds_dd_ifm(); +void move_b_ais_dd_ifm(); +void move_b_aips_dd_ifm(); +void move_b_pais_dd_ifm(); +void move_b_das_dd_ifm(); +void move_b_dais_dd_ifm(); +void move_b_adr16_dd_ifm(); +void move_b_adr32_dd_ifm(); +void move_b_dpc_dd_ifm(); +void move_b_dpci_dd_ifm(); +void move_b_imm8_dd_ifm(); +void move_b_ds_aid_ifm(); +void move_b_ais_aid_ifm(); +void move_b_aips_aid_ifm(); +void move_b_pais_aid_ifm(); +void move_b_das_aid_ifm(); +void move_b_dais_aid_ifm(); +void move_b_adr16_aid_ifm(); +void move_b_adr32_aid_ifm(); +void move_b_dpc_aid_ifm(); +void move_b_dpci_aid_ifm(); +void move_b_imm8_aid_ifm(); +void move_b_ds_aipd_ifm(); +void move_b_ais_aipd_ifm(); +void move_b_aips_aipd_ifm(); +void move_b_pais_aipd_ifm(); +void move_b_das_aipd_ifm(); +void move_b_dais_aipd_ifm(); +void move_b_adr16_aipd_ifm(); +void move_b_adr32_aipd_ifm(); +void move_b_dpc_aipd_ifm(); +void move_b_dpci_aipd_ifm(); +void move_b_imm8_aipd_ifm(); +void move_b_ds_paid_ifm(); +void move_b_ais_paid_ifm(); +void move_b_aips_paid_ifm(); +void move_b_pais_paid_ifm(); +void move_b_das_paid_ifm(); +void move_b_dais_paid_ifm(); +void move_b_adr16_paid_ifm(); +void move_b_adr32_paid_ifm(); +void move_b_dpc_paid_ifm(); +void move_b_dpci_paid_ifm(); +void move_b_imm8_paid_ifm(); +void move_b_ds_dad_ifm(); +void move_b_ais_dad_ifm(); +void move_b_aips_dad_ifm(); +void move_b_pais_dad_ifm(); +void move_b_das_dad_ifm(); +void move_b_dais_dad_ifm(); +void move_b_adr16_dad_ifm(); +void move_b_adr32_dad_ifm(); +void move_b_dpc_dad_ifm(); +void move_b_dpci_dad_ifm(); +void move_b_imm8_dad_ifm(); +void move_b_ds_daid_ifm(); +void move_b_ais_daid_ifm(); +void move_b_aips_daid_ifm(); +void move_b_pais_daid_ifm(); +void move_b_das_daid_ifm(); +void move_b_dais_daid_ifm(); +void move_b_adr16_daid_ifm(); +void move_b_adr32_daid_ifm(); +void move_b_dpc_daid_ifm(); +void move_b_dpci_daid_ifm(); +void move_b_imm8_daid_ifm(); +void move_b_ds_adr16_ifm(); +void move_b_ais_adr16_ifm(); +void move_b_aips_adr16_ifm(); +void move_b_pais_adr16_ifm(); +void move_b_das_adr16_ifm(); +void move_b_dais_adr16_ifm(); +void move_b_adr16_adr16_ifm(); +void move_b_adr32_adr16_ifm(); +void move_b_dpc_adr16_ifm(); +void move_b_dpci_adr16_ifm(); +void move_b_imm8_adr16_ifm(); +void move_b_ds_adr32_ifm(); +void move_b_ais_adr32_ifm(); +void move_b_aips_adr32_ifm(); +void move_b_pais_adr32_ifm(); +void move_b_das_adr32_ifm(); +void move_b_dais_adr32_ifm(); +void move_b_adr16_adr32_ifm(); +void move_b_adr32_adr32_ifm(); +void move_b_dpc_adr32_ifm(); +void move_b_dpci_adr32_ifm(); +void move_b_imm8_adr32_ifm(); +void move_l_ds_dd_ifm(); +void move_l_as_dd_ifm(); +void move_l_ais_dd_ifm(); +void move_l_aips_dd_ifm(); +void move_l_pais_dd_ifm(); +void move_l_das_dd_ifm(); +void move_l_dais_dd_ifm(); +void move_l_adr16_dd_ifm(); +void move_l_adr32_dd_ifm(); +void move_l_dpc_dd_ifm(); +void move_l_dpci_dd_ifm(); +void move_l_imm32_dd_ifm(); +void movea_l_ds_ad_ifm(); +void movea_l_as_ad_ifm(); +void movea_l_ais_ad_ifm(); +void movea_l_aips_ad_ifm(); +void movea_l_pais_ad_ifm(); +void movea_l_das_ad_ifm(); +void movea_l_dais_ad_ifm(); +void movea_l_adr16_ad_ifm(); +void movea_l_adr32_ad_ifm(); +void movea_l_dpc_ad_ifm(); +void movea_l_dpci_ad_ifm(); +void movea_l_imm32_ad_ifm(); +void move_l_ds_aid_ifm(); +void move_l_as_aid_ifm(); +void move_l_ais_aid_ifm(); +void move_l_aips_aid_ifm(); +void move_l_pais_aid_ifm(); +void move_l_das_aid_ifm(); +void move_l_dais_aid_ifm(); +void move_l_adr16_aid_ifm(); +void move_l_adr32_aid_ifm(); +void move_l_dpc_aid_ifm(); +void move_l_dpci_aid_ifm(); +void move_l_imm32_aid_ifm(); +void move_l_ds_aipd_ifm(); +void move_l_as_aipd_ifm(); +void move_l_ais_aipd_ifm(); +void move_l_aips_aipd_ifm(); +void move_l_pais_aipd_ifm(); +void move_l_das_aipd_ifm(); +void move_l_dais_aipd_ifm(); +void move_l_adr16_aipd_ifm(); +void move_l_adr32_aipd_ifm(); +void move_l_dpc_aipd_ifm(); +void move_l_dpci_aipd_ifm(); +void move_l_imm32_aipd_ifm(); +void move_l_ds_paid_ifm(); +void move_l_as_paid_ifm(); +void move_l_ais_paid_ifm(); +void move_l_aips_paid_ifm(); +void move_l_pais_paid_ifm(); +void move_l_das_paid_ifm(); +void move_l_dais_paid_ifm(); +void move_l_adr16_paid_ifm(); +void move_l_adr32_paid_ifm(); +void move_l_dpc_paid_ifm(); +void move_l_dpci_paid_ifm(); +void move_l_imm32_paid_ifm(); +void move_l_ds_dad_ifm(); +void move_l_as_dad_ifm(); +void move_l_ais_dad_ifm(); +void move_l_aips_dad_ifm(); +void move_l_pais_dad_ifm(); +void move_l_das_dad_ifm(); +void move_l_dais_dad_ifm(); +void move_l_adr16_dad_ifm(); +void move_l_adr32_dad_ifm(); +void move_l_dpc_dad_ifm(); +void move_l_dpci_dad_ifm(); +void move_l_imm32_dad_ifm(); +void move_l_ds_daid_ifm(); +void move_l_as_daid_ifm(); +void move_l_ais_daid_ifm(); +void move_l_aips_daid_ifm(); +void move_l_pais_daid_ifm(); +void move_l_das_daid_ifm(); +void move_l_dais_daid_ifm(); +void move_l_adr16_daid_ifm(); +void move_l_adr32_daid_ifm(); +void move_l_dpc_daid_ifm(); +void move_l_dpci_daid_ifm(); +void move_l_imm32_daid_ifm(); +void move_l_ds_adr16_ifm(); +void move_l_as_adr16_ifm(); +void move_l_ais_adr16_ifm(); +void move_l_aips_adr16_ifm(); +void move_l_pais_adr16_ifm(); +void move_l_das_adr16_ifm(); +void move_l_dais_adr16_ifm(); +void move_l_adr16_adr16_ifm(); +void move_l_adr32_adr16_ifm(); +void move_l_dpc_adr16_ifm(); +void move_l_dpci_adr16_ifm(); +void move_l_imm32_adr16_ifm(); +void move_l_ds_adr32_ifm(); +void move_l_as_adr32_ifm(); +void move_l_ais_adr32_ifm(); +void move_l_aips_adr32_ifm(); +void move_l_pais_adr32_ifm(); +void move_l_das_adr32_ifm(); +void move_l_dais_adr32_ifm(); +void move_l_adr16_adr32_ifm(); +void move_l_adr32_adr32_ifm(); +void move_l_dpc_adr32_ifm(); +void move_l_dpci_adr32_ifm(); +void move_l_imm32_adr32_ifm(); +void move_w_ds_dd_ifm(); +void move_w_as_dd_ifm(); +void move_w_ais_dd_ifm(); +void move_w_aips_dd_ifm(); +void move_w_pais_dd_ifm(); +void move_w_das_dd_ifm(); +void move_w_dais_dd_ifm(); +void move_w_adr16_dd_ifm(); +void move_w_adr32_dd_ifm(); +void move_w_dpc_dd_ifm(); +void move_w_dpci_dd_ifm(); +void move_w_imm16_dd_ifm(); +void movea_w_ds_ad_ifm(); +void movea_w_as_ad_ifm(); +void movea_w_ais_ad_ifm(); +void movea_w_aips_ad_ifm(); +void movea_w_pais_ad_ifm(); +void movea_w_das_ad_ifm(); +void movea_w_dais_ad_ifm(); +void movea_w_adr16_ad_ifm(); +void movea_w_adr32_ad_ifm(); +void movea_w_dpc_ad_ifm(); +void movea_w_dpci_ad_ifm(); +void movea_w_imm16_ad_ifm(); +void move_w_ds_aid_ifm(); +void move_w_as_aid_ifm(); +void move_w_ais_aid_ifm(); +void move_w_aips_aid_ifm(); +void move_w_pais_aid_ifm(); +void move_w_das_aid_ifm(); +void move_w_dais_aid_ifm(); +void move_w_adr16_aid_ifm(); +void move_w_adr32_aid_ifm(); +void move_w_dpc_aid_ifm(); +void move_w_dpci_aid_ifm(); +void move_w_imm16_aid_ifm(); +void move_w_ds_aipd_ifm(); +void move_w_as_aipd_ifm(); +void move_w_ais_aipd_ifm(); +void move_w_aips_aipd_ifm(); +void move_w_pais_aipd_ifm(); +void move_w_das_aipd_ifm(); +void move_w_dais_aipd_ifm(); +void move_w_adr16_aipd_ifm(); +void move_w_adr32_aipd_ifm(); +void move_w_dpc_aipd_ifm(); +void move_w_dpci_aipd_ifm(); +void move_w_imm16_aipd_ifm(); +void move_w_ds_paid_ifm(); +void move_w_as_paid_ifm(); +void move_w_ais_paid_ifm(); +void move_w_aips_paid_ifm(); +void move_w_pais_paid_ifm(); +void move_w_das_paid_ifm(); +void move_w_dais_paid_ifm(); +void move_w_adr16_paid_ifm(); +void move_w_adr32_paid_ifm(); +void move_w_dpc_paid_ifm(); +void move_w_dpci_paid_ifm(); +void move_w_imm16_paid_ifm(); +void move_w_ds_dad_ifm(); +void move_w_as_dad_ifm(); +void move_w_ais_dad_ifm(); +void move_w_aips_dad_ifm(); +void move_w_pais_dad_ifm(); +void move_w_das_dad_ifm(); +void move_w_dais_dad_ifm(); +void move_w_adr16_dad_ifm(); +void move_w_adr32_dad_ifm(); +void move_w_dpc_dad_ifm(); +void move_w_dpci_dad_ifm(); +void move_w_imm16_dad_ifm(); +void move_w_ds_daid_ifm(); +void move_w_as_daid_ifm(); +void move_w_ais_daid_ifm(); +void move_w_aips_daid_ifm(); +void move_w_pais_daid_ifm(); +void move_w_das_daid_ifm(); +void move_w_dais_daid_ifm(); +void move_w_adr16_daid_ifm(); +void move_w_adr32_daid_ifm(); +void move_w_dpc_daid_ifm(); +void move_w_dpci_daid_ifm(); +void move_w_imm16_daid_ifm(); +void move_w_ds_adr16_ifm(); +void move_w_as_adr16_ifm(); +void move_w_ais_adr16_ifm(); +void move_w_aips_adr16_ifm(); +void move_w_pais_adr16_ifm(); +void move_w_das_adr16_ifm(); +void move_w_dais_adr16_ifm(); +void move_w_adr16_adr16_ifm(); +void move_w_adr32_adr16_ifm(); +void move_w_dpc_adr16_ifm(); +void move_w_dpci_adr16_ifm(); +void move_w_imm16_adr16_ifm(); +void move_w_ds_adr32_ifm(); +void move_w_as_adr32_ifm(); +void move_w_ais_adr32_ifm(); +void move_w_aips_adr32_ifm(); +void move_w_pais_adr32_ifm(); +void move_w_das_adr32_ifm(); +void move_w_dais_adr32_ifm(); +void move_w_adr16_adr32_ifm(); +void move_w_adr32_adr32_ifm(); +void move_w_dpc_adr32_ifm(); +void move_w_dpci_adr32_ifm(); +void move_w_imm16_adr32_ifm(); +void negx_b_ds_ifm(); +void negx_b_ais_ifm(); +void negx_b_aips_ifm(); +void negx_b_pais_ifm(); +void negx_b_das_ifm(); +void negx_b_dais_ifm(); +void negx_b_adr16_ifm(); +void negx_b_adr32_ifm(); +void negx_w_ds_ifm(); +void negx_w_ais_ifm(); +void negx_w_aips_ifm(); +void negx_w_pais_ifm(); +void negx_w_das_ifm(); +void negx_w_dais_ifm(); +void negx_w_adr16_ifm(); +void negx_w_adr32_ifm(); +void negx_l_ds_ifm(); +void negx_l_ais_ifm(); +void negx_l_aips_ifm(); +void negx_l_pais_ifm(); +void negx_l_das_ifm(); +void negx_l_dais_ifm(); +void negx_l_adr16_ifm(); +void negx_l_adr32_ifm(); +void move_sr_ds_ifm(); +void move_sr_ais_ifm(); +void move_sr_aips_ifm(); +void move_sr_pais_ifm(); +void move_sr_das_ifm(); +void move_sr_dais_ifm(); +void move_sr_adr16_ifm(); +void move_sr_adr32_ifm(); +void chk_w_ds_dd_ifm(); +void chk_w_ais_dd_ifm(); +void chk_w_aips_dd_ifm(); +void chk_w_pais_dd_ifm(); +void chk_w_das_dd_ifm(); +void chk_w_dais_dd_ifm(); +void chk_w_adr16_dd_ifm(); +void chk_w_adr32_dd_ifm(); +void chk_w_dpc_dd_ifm(); +void chk_w_dpci_dd_ifm(); +void chk_w_imm16_dd_ifm(); +void lea_ais_ad_ifm(); +void lea_das_ad_ifm(); +void lea_dais_ad_ifm(); +void lea_adr16_ad_ifm(); +void lea_adr32_ad_ifm(); +void lea_dpc_ad_ifm(); +void lea_dpci_ad_ifm(); +void clr_b_ds_ifm(); +void clr_b_ais_ifm(); +void clr_b_aips_ifm(); +void clr_b_pais_ifm(); +void clr_b_das_ifm(); +void clr_b_dais_ifm(); +void clr_b_adr16_ifm(); +void clr_b_adr32_ifm(); +void clr_w_ds_ifm(); +void clr_w_ais_ifm(); +void clr_w_aips_ifm(); +void clr_w_pais_ifm(); +void clr_w_das_ifm(); +void clr_w_dais_ifm(); +void clr_w_adr16_ifm(); +void clr_w_adr32_ifm(); +void clr_l_ds_ifm(); +void clr_l_ais_ifm(); +void clr_l_aips_ifm(); +void clr_l_pais_ifm(); +void clr_l_das_ifm(); +void clr_l_dais_ifm(); +void clr_l_adr16_ifm(); +void clr_l_adr32_ifm(); +void neg_b_ds_ifm(); +void neg_b_ais_ifm(); +void neg_b_aips_ifm(); +void neg_b_pais_ifm(); +void neg_b_das_ifm(); +void neg_b_dais_ifm(); +void neg_b_adr16_ifm(); +void neg_b_adr32_ifm(); +void neg_w_ds_ifm(); +void neg_w_ais_ifm(); +void neg_w_aips_ifm(); +void neg_w_pais_ifm(); +void neg_w_das_ifm(); +void neg_w_dais_ifm(); +void neg_w_adr16_ifm(); +void neg_w_adr32_ifm(); +void neg_l_ds_ifm(); +void neg_l_ais_ifm(); +void neg_l_aips_ifm(); +void neg_l_pais_ifm(); +void neg_l_das_ifm(); +void neg_l_dais_ifm(); +void neg_l_adr16_ifm(); +void neg_l_adr32_ifm(); +void move_ds_ccr_ifm(); +void move_ais_ccr_ifm(); +void move_aips_ccr_ifm(); +void move_pais_ccr_ifm(); +void move_das_ccr_ifm(); +void move_dais_ccr_ifm(); +void move_adr16_ccr_ifm(); +void move_adr32_ccr_ifm(); +void move_dpc_ccr_ifm(); +void move_dpci_ccr_ifm(); +void move_imm8_ccr_ifm(); +void not_b_ds_ifm(); +void not_b_ais_ifm(); +void not_b_aips_ifm(); +void not_b_pais_ifm(); +void not_b_das_ifm(); +void not_b_dais_ifm(); +void not_b_adr16_ifm(); +void not_b_adr32_ifm(); +void not_w_ds_ifm(); +void not_w_ais_ifm(); +void not_w_aips_ifm(); +void not_w_pais_ifm(); +void not_w_das_ifm(); +void not_w_dais_ifm(); +void not_w_adr16_ifm(); +void not_w_adr32_ifm(); +void not_l_ds_ifm(); +void not_l_ais_ifm(); +void not_l_aips_ifm(); +void not_l_pais_ifm(); +void not_l_das_ifm(); +void not_l_dais_ifm(); +void not_l_adr16_ifm(); +void not_l_adr32_ifm(); +void move_ds_sr_ifm(); +void move_ais_sr_ifm(); +void move_aips_sr_ifm(); +void move_pais_sr_ifm(); +void move_das_sr_ifm(); +void move_dais_sr_ifm(); +void move_adr16_sr_ifm(); +void move_adr32_sr_ifm(); +void move_dpc_sr_ifm(); +void move_dpci_sr_ifm(); +void move_i16u_sr_ifm(); +void nbcd_b_ds_ifm(); +void nbcd_b_ais_ifm(); +void nbcd_b_aips_ifm(); +void nbcd_b_pais_ifm(); +void nbcd_b_das_ifm(); +void nbcd_b_dais_ifm(); +void nbcd_b_adr16_ifm(); +void nbcd_b_adr32_ifm(); +void swap_ds_ifm(); +void pea_ais_ifm(); +void pea_das_ifm(); +void pea_dais_ifm(); +void pea_adr16_ifm(); +void pea_adr32_ifm(); +void pea_dpc_ifm(); +void pea_dpci_ifm(); +void ext_w_ds_ifm(); +void movem_w_list_ais_ifm(); +void movem_w_listp_pais_ifm(); +void movem_w_list_das_ifm(); +void movem_w_list_dais_ifm(); +void movem_w_list_adr16_ifm(); +void movem_w_list_adr32_ifm(); +void ext_l_ds_ifm(); +void movem_l_list_ais_ifm(); +void movem_l_listp_pais_ifm(); +void movem_l_list_das_ifm(); +void movem_l_list_dais_ifm(); +void movem_l_list_adr16_ifm(); +void movem_l_list_adr32_ifm(); +void tst_b_ds_ifm(); +void tst_b_ais_ifm(); +void tst_b_aips_ifm(); +void tst_b_pais_ifm(); +void tst_b_das_ifm(); +void tst_b_dais_ifm(); +void tst_b_adr16_ifm(); +void tst_b_adr32_ifm(); +void tst_w_ds_ifm(); +void tst_w_ais_ifm(); +void tst_w_aips_ifm(); +void tst_w_pais_ifm(); +void tst_w_das_ifm(); +void tst_w_dais_ifm(); +void tst_w_adr16_ifm(); +void tst_w_adr32_ifm(); +void tst_l_ds_ifm(); +void tst_l_ais_ifm(); +void tst_l_aips_ifm(); +void tst_l_pais_ifm(); +void tst_l_das_ifm(); +void tst_l_dais_ifm(); +void tst_l_adr16_ifm(); +void tst_l_adr32_ifm(); +void tas_ds_ifm(); +void tas_ais_ifm(); +void tas_aips_ifm(); +void tas_pais_ifm(); +void tas_das_ifm(); +void tas_dais_ifm(); +void tas_adr16_ifm(); +void tas_adr32_ifm(); +void movem_w_ais_list_ifm(); +void movem_w_aips_list_ifm(); +void movem_w_das_list_ifm(); +void movem_w_dais_list_ifm(); +void movem_w_adr16_list_ifm(); +void movem_w_adr32_list_ifm(); +void movem_w_dpc_list_ifm(); +void movem_w_dpci_list_ifm(); +void movem_l_ais_list_ifm(); +void movem_l_aips_list_ifm(); +void movem_l_das_list_ifm(); +void movem_l_dais_list_ifm(); +void movem_l_adr16_list_ifm(); +void movem_l_adr32_list_ifm(); +void movem_l_dpc_list_ifm(); +void movem_l_dpci_list_ifm(); +void trap_imm4_ifm(); +void link_as_imm16_ifm(); +void unlk_as_ifm(); +void move_as_usp_ifm(); +void move_usp_as_ifm(); +void reset_ifm(); +void nop_ifm(); +void stop_i16u_ifm(); +void rte_ifm(); +void rts_ifm(); +void trapv_ifm(); +void rtr_ifm(); +void jsr_ais_ifm(); +void jsr_das_ifm(); +void jsr_dais_ifm(); +void jsr_adr16_ifm(); +void jsr_adr32_ifm(); +void jsr_dpc_ifm(); +void jsr_dpci_ifm(); +void jmp_ais_ifm(); +void jmp_das_ifm(); +void jmp_dais_ifm(); +void jmp_adr16_ifm(); +void jmp_adr32_ifm(); +void jmp_dpc_ifm(); +void jmp_dpci_ifm(); +void addq_b_imm3_ds_ifm(); +void addq_b_imm3_ais_ifm(); +void addq_b_imm3_aips_ifm(); +void addq_b_imm3_pais_ifm(); +void addq_b_imm3_das_ifm(); +void addq_b_imm3_dais_ifm(); +void addq_b_imm3_adr16_ifm(); +void addq_b_imm3_adr32_ifm(); +void addq_w_imm3_ds_ifm(); +void addq_w_imm3_as_ifm(); +void addq_w_imm3_ais_ifm(); +void addq_w_imm3_aips_ifm(); +void addq_w_imm3_pais_ifm(); +void addq_w_imm3_das_ifm(); +void addq_w_imm3_dais_ifm(); +void addq_w_imm3_adr16_ifm(); +void addq_w_imm3_adr32_ifm(); +void addq_l_imm3_ds_ifm(); +void addq_l_imm3_as_ifm(); +void addq_l_imm3_ais_ifm(); +void addq_l_imm3_aips_ifm(); +void addq_l_imm3_pais_ifm(); +void addq_l_imm3_das_ifm(); +void addq_l_imm3_dais_ifm(); +void addq_l_imm3_adr16_ifm(); +void addq_l_imm3_adr32_ifm(); +void st_ds_ifm(); +void dbt_ds_rel16_ifm(); +void st_ais_ifm(); +void st_aips_ifm(); +void st_pais_ifm(); +void st_das_ifm(); +void st_dais_ifm(); +void st_adr16_ifm(); +void st_adr32_ifm(); +void subq_b_imm3_ds_ifm(); +void subq_b_imm3_ais_ifm(); +void subq_b_imm3_aips_ifm(); +void subq_b_imm3_pais_ifm(); +void subq_b_imm3_das_ifm(); +void subq_b_imm3_dais_ifm(); +void subq_b_imm3_adr16_ifm(); +void subq_b_imm3_adr32_ifm(); +void subq_w_imm3_ds_ifm(); +void subq_w_imm3_as_ifm(); +void subq_w_imm3_ais_ifm(); +void subq_w_imm3_aips_ifm(); +void subq_w_imm3_pais_ifm(); +void subq_w_imm3_das_ifm(); +void subq_w_imm3_dais_ifm(); +void subq_w_imm3_adr16_ifm(); +void subq_w_imm3_adr32_ifm(); +void subq_l_imm3_ds_ifm(); +void subq_l_imm3_as_ifm(); +void subq_l_imm3_ais_ifm(); +void subq_l_imm3_aips_ifm(); +void subq_l_imm3_pais_ifm(); +void subq_l_imm3_das_ifm(); +void subq_l_imm3_dais_ifm(); +void subq_l_imm3_adr16_ifm(); +void subq_l_imm3_adr32_ifm(); +void sf_ds_ifm(); +void dbra_ds_rel16_ifm(); +void sf_ais_ifm(); +void sf_aips_ifm(); +void sf_pais_ifm(); +void sf_das_ifm(); +void sf_dais_ifm(); +void sf_adr16_ifm(); +void sf_adr32_ifm(); +void shi_ds_ifm(); +void dbhi_ds_rel16_ifm(); +void shi_ais_ifm(); +void shi_aips_ifm(); +void shi_pais_ifm(); +void shi_das_ifm(); +void shi_dais_ifm(); +void shi_adr16_ifm(); +void shi_adr32_ifm(); +void sls_ds_ifm(); +void dbls_ds_rel16_ifm(); +void sls_ais_ifm(); +void sls_aips_ifm(); +void sls_pais_ifm(); +void sls_das_ifm(); +void sls_dais_ifm(); +void sls_adr16_ifm(); +void sls_adr32_ifm(); +void scc_ds_ifm(); +void dbcc_ds_rel16_ifm(); +void scc_ais_ifm(); +void scc_aips_ifm(); +void scc_pais_ifm(); +void scc_das_ifm(); +void scc_dais_ifm(); +void scc_adr16_ifm(); +void scc_adr32_ifm(); +void scs_ds_ifm(); +void dbcs_ds_rel16_ifm(); +void scs_ais_ifm(); +void scs_aips_ifm(); +void scs_pais_ifm(); +void scs_das_ifm(); +void scs_dais_ifm(); +void scs_adr16_ifm(); +void scs_adr32_ifm(); +void sne_ds_ifm(); +void dbne_ds_rel16_ifm(); +void sne_ais_ifm(); +void sne_aips_ifm(); +void sne_pais_ifm(); +void sne_das_ifm(); +void sne_dais_ifm(); +void sne_adr16_ifm(); +void sne_adr32_ifm(); +void seq_ds_ifm(); +void dbeq_ds_rel16_ifm(); +void seq_ais_ifm(); +void seq_aips_ifm(); +void seq_pais_ifm(); +void seq_das_ifm(); +void seq_dais_ifm(); +void seq_adr16_ifm(); +void seq_adr32_ifm(); +void svc_ds_ifm(); +void dbvc_ds_rel16_ifm(); +void svc_ais_ifm(); +void svc_aips_ifm(); +void svc_pais_ifm(); +void svc_das_ifm(); +void svc_dais_ifm(); +void svc_adr16_ifm(); +void svc_adr32_ifm(); +void svs_ds_ifm(); +void dbvs_ds_rel16_ifm(); +void svs_ais_ifm(); +void svs_aips_ifm(); +void svs_pais_ifm(); +void svs_das_ifm(); +void svs_dais_ifm(); +void svs_adr16_ifm(); +void svs_adr32_ifm(); +void spl_ds_ifm(); +void dbpl_ds_rel16_ifm(); +void spl_ais_ifm(); +void spl_aips_ifm(); +void spl_pais_ifm(); +void spl_das_ifm(); +void spl_dais_ifm(); +void spl_adr16_ifm(); +void spl_adr32_ifm(); +void smi_ds_ifm(); +void dbmi_ds_rel16_ifm(); +void smi_ais_ifm(); +void smi_aips_ifm(); +void smi_pais_ifm(); +void smi_das_ifm(); +void smi_dais_ifm(); +void smi_adr16_ifm(); +void smi_adr32_ifm(); +void sge_ds_ifm(); +void dbge_ds_rel16_ifm(); +void sge_ais_ifm(); +void sge_aips_ifm(); +void sge_pais_ifm(); +void sge_das_ifm(); +void sge_dais_ifm(); +void sge_adr16_ifm(); +void sge_adr32_ifm(); +void slt_ds_ifm(); +void dblt_ds_rel16_ifm(); +void slt_ais_ifm(); +void slt_aips_ifm(); +void slt_pais_ifm(); +void slt_das_ifm(); +void slt_dais_ifm(); +void slt_adr16_ifm(); +void slt_adr32_ifm(); +void sgt_ds_ifm(); +void dbgt_ds_rel16_ifm(); +void sgt_ais_ifm(); +void sgt_aips_ifm(); +void sgt_pais_ifm(); +void sgt_das_ifm(); +void sgt_dais_ifm(); +void sgt_adr16_ifm(); +void sgt_adr32_ifm(); +void sle_ds_ifm(); +void dble_ds_rel16_ifm(); +void sle_ais_ifm(); +void sle_aips_ifm(); +void sle_pais_ifm(); +void sle_das_ifm(); +void sle_dais_ifm(); +void sle_adr16_ifm(); +void sle_adr32_ifm(); +void bra_rel16_ifm(); +void bra_rel8_ifm(); +void bsr_rel16_ifm(); +void bsr_rel8_ifm(); +void bhi_rel16_ifm(); +void bhi_rel8_ifm(); +void bls_rel16_ifm(); +void bls_rel8_ifm(); +void bcc_rel16_ifm(); +void bcc_rel8_ifm(); +void bcs_rel16_ifm(); +void bcs_rel8_ifm(); +void bne_rel16_ifm(); +void bne_rel8_ifm(); +void beq_rel16_ifm(); +void beq_rel8_ifm(); +void bvc_rel16_ifm(); +void bvc_rel8_ifm(); +void bvs_rel16_ifm(); +void bvs_rel8_ifm(); +void bpl_rel16_ifm(); +void bpl_rel8_ifm(); +void bmi_rel16_ifm(); +void bmi_rel8_ifm(); +void bge_rel16_ifm(); +void bge_rel8_ifm(); +void blt_rel16_ifm(); +void blt_rel8_ifm(); +void bgt_rel16_ifm(); +void bgt_rel8_ifm(); +void ble_rel16_ifm(); +void ble_rel8_ifm(); +void moveq_imm8o_dd_ifm(); +void or_b_ds_dd_ifm(); +void or_b_ais_dd_ifm(); +void or_b_aips_dd_ifm(); +void or_b_pais_dd_ifm(); +void or_b_das_dd_ifm(); +void or_b_dais_dd_ifm(); +void or_b_adr16_dd_ifm(); +void or_b_adr32_dd_ifm(); +void or_b_dpc_dd_ifm(); +void or_b_dpci_dd_ifm(); +void or_b_imm8_dd_ifm(); +void or_w_ds_dd_ifm(); +void or_w_ais_dd_ifm(); +void or_w_aips_dd_ifm(); +void or_w_pais_dd_ifm(); +void or_w_das_dd_ifm(); +void or_w_dais_dd_ifm(); +void or_w_adr16_dd_ifm(); +void or_w_adr32_dd_ifm(); +void or_w_dpc_dd_ifm(); +void or_w_dpci_dd_ifm(); +void or_w_imm16_dd_ifm(); +void or_l_ds_dd_ifm(); +void or_l_ais_dd_ifm(); +void or_l_aips_dd_ifm(); +void or_l_pais_dd_ifm(); +void or_l_das_dd_ifm(); +void or_l_dais_dd_ifm(); +void or_l_adr16_dd_ifm(); +void or_l_adr32_dd_ifm(); +void or_l_dpc_dd_ifm(); +void or_l_dpci_dd_ifm(); +void or_l_imm32_dd_ifm(); +void divu_w_ds_dd_ifm(); +void divu_w_ais_dd_ifm(); +void divu_w_aips_dd_ifm(); +void divu_w_pais_dd_ifm(); +void divu_w_das_dd_ifm(); +void divu_w_dais_dd_ifm(); +void divu_w_adr16_dd_ifm(); +void divu_w_adr32_dd_ifm(); +void divu_w_dpc_dd_ifm(); +void divu_w_dpci_dd_ifm(); +void divu_w_imm16_dd_ifm(); +void sbcd_ds_dd_ifm(); +void sbcd_pais_paid_ifm(); +void or_b_dd_ais_ifm(); +void or_b_dd_aips_ifm(); +void or_b_dd_pais_ifm(); +void or_b_dd_das_ifm(); +void or_b_dd_dais_ifm(); +void or_b_dd_adr16_ifm(); +void or_b_dd_adr32_ifm(); +void or_w_dd_ais_ifm(); +void or_w_dd_aips_ifm(); +void or_w_dd_pais_ifm(); +void or_w_dd_das_ifm(); +void or_w_dd_dais_ifm(); +void or_w_dd_adr16_ifm(); +void or_w_dd_adr32_ifm(); +void or_l_dd_ais_ifm(); +void or_l_dd_aips_ifm(); +void or_l_dd_pais_ifm(); +void or_l_dd_das_ifm(); +void or_l_dd_dais_ifm(); +void or_l_dd_adr16_ifm(); +void or_l_dd_adr32_ifm(); +void divs_w_ds_dd_ifm(); +void divs_w_ais_dd_ifm(); +void divs_w_aips_dd_ifm(); +void divs_w_pais_dd_ifm(); +void divs_w_das_dd_ifm(); +void divs_w_dais_dd_ifm(); +void divs_w_adr16_dd_ifm(); +void divs_w_adr32_dd_ifm(); +void divs_w_dpc_dd_ifm(); +void divs_w_dpci_dd_ifm(); +void divs_w_imm16_dd_ifm(); +void sub_b_ds_dd_ifm(); +void sub_b_ais_dd_ifm(); +void sub_b_aips_dd_ifm(); +void sub_b_pais_dd_ifm(); +void sub_b_das_dd_ifm(); +void sub_b_dais_dd_ifm(); +void sub_b_adr16_dd_ifm(); +void sub_b_adr32_dd_ifm(); +void sub_b_dpc_dd_ifm(); +void sub_b_dpci_dd_ifm(); +void sub_b_imm8_dd_ifm(); +void sub_w_ds_dd_ifm(); +void sub_w_as_dd_ifm(); +void sub_w_ais_dd_ifm(); +void sub_w_aips_dd_ifm(); +void sub_w_pais_dd_ifm(); +void sub_w_das_dd_ifm(); +void sub_w_dais_dd_ifm(); +void sub_w_adr16_dd_ifm(); +void sub_w_adr32_dd_ifm(); +void sub_w_dpc_dd_ifm(); +void sub_w_dpci_dd_ifm(); +void sub_w_imm16_dd_ifm(); +void sub_l_ds_dd_ifm(); +void sub_l_as_dd_ifm(); +void sub_l_ais_dd_ifm(); +void sub_l_aips_dd_ifm(); +void sub_l_pais_dd_ifm(); +void sub_l_das_dd_ifm(); +void sub_l_dais_dd_ifm(); +void sub_l_adr16_dd_ifm(); +void sub_l_adr32_dd_ifm(); +void sub_l_dpc_dd_ifm(); +void sub_l_dpci_dd_ifm(); +void sub_l_imm32_dd_ifm(); +void suba_w_ds_ad_ifm(); +void suba_w_as_ad_ifm(); +void suba_w_ais_ad_ifm(); +void suba_w_aips_ad_ifm(); +void suba_w_pais_ad_ifm(); +void suba_w_das_ad_ifm(); +void suba_w_dais_ad_ifm(); +void suba_w_adr16_ad_ifm(); +void suba_w_adr32_ad_ifm(); +void suba_w_dpc_ad_ifm(); +void suba_w_dpci_ad_ifm(); +void suba_w_imm16_ad_ifm(); +void subx_b_ds_dd_ifm(); +void subx_b_pais_paid_ifm(); +void sub_b_dd_ais_ifm(); +void sub_b_dd_aips_ifm(); +void sub_b_dd_pais_ifm(); +void sub_b_dd_das_ifm(); +void sub_b_dd_dais_ifm(); +void sub_b_dd_adr16_ifm(); +void sub_b_dd_adr32_ifm(); +void subx_w_ds_dd_ifm(); +void subx_w_pais_paid_ifm(); +void sub_w_dd_ais_ifm(); +void sub_w_dd_aips_ifm(); +void sub_w_dd_pais_ifm(); +void sub_w_dd_das_ifm(); +void sub_w_dd_dais_ifm(); +void sub_w_dd_adr16_ifm(); +void sub_w_dd_adr32_ifm(); +void subx_l_ds_dd_ifm(); +void subx_l_pais_paid_ifm(); +void sub_l_dd_ais_ifm(); +void sub_l_dd_aips_ifm(); +void sub_l_dd_pais_ifm(); +void sub_l_dd_das_ifm(); +void sub_l_dd_dais_ifm(); +void sub_l_dd_adr16_ifm(); +void sub_l_dd_adr32_ifm(); +void suba_l_ds_ad_ifm(); +void suba_l_as_ad_ifm(); +void suba_l_ais_ad_ifm(); +void suba_l_aips_ad_ifm(); +void suba_l_pais_ad_ifm(); +void suba_l_das_ad_ifm(); +void suba_l_dais_ad_ifm(); +void suba_l_adr16_ad_ifm(); +void suba_l_adr32_ad_ifm(); +void suba_l_dpc_ad_ifm(); +void suba_l_dpci_ad_ifm(); +void suba_l_imm32_ad_ifm(); +void cmp_b_ds_dd_ifm(); +void cmp_b_ais_dd_ifm(); +void cmp_b_aips_dd_ifm(); +void cmp_b_pais_dd_ifm(); +void cmp_b_das_dd_ifm(); +void cmp_b_dais_dd_ifm(); +void cmp_b_adr16_dd_ifm(); +void cmp_b_adr32_dd_ifm(); +void cmp_b_dpc_dd_ifm(); +void cmp_b_dpci_dd_ifm(); +void cmp_b_imm8_dd_ifm(); +void cmp_w_ds_dd_ifm(); +void cmp_w_as_dd_ifm(); +void cmp_w_ais_dd_ifm(); +void cmp_w_aips_dd_ifm(); +void cmp_w_pais_dd_ifm(); +void cmp_w_das_dd_ifm(); +void cmp_w_dais_dd_ifm(); +void cmp_w_adr16_dd_ifm(); +void cmp_w_adr32_dd_ifm(); +void cmp_w_dpc_dd_ifm(); +void cmp_w_dpci_dd_ifm(); +void cmp_w_imm16_dd_ifm(); +void cmp_l_ds_dd_ifm(); +void cmp_l_as_dd_ifm(); +void cmp_l_ais_dd_ifm(); +void cmp_l_aips_dd_ifm(); +void cmp_l_pais_dd_ifm(); +void cmp_l_das_dd_ifm(); +void cmp_l_dais_dd_ifm(); +void cmp_l_adr16_dd_ifm(); +void cmp_l_adr32_dd_ifm(); +void cmp_l_dpc_dd_ifm(); +void cmp_l_dpci_dd_ifm(); +void cmp_l_imm32_dd_ifm(); +void cmpa_w_ds_ad_ifm(); +void cmpa_w_as_ad_ifm(); +void cmpa_w_ais_ad_ifm(); +void cmpa_w_aips_ad_ifm(); +void cmpa_w_pais_ad_ifm(); +void cmpa_w_das_ad_ifm(); +void cmpa_w_dais_ad_ifm(); +void cmpa_w_adr16_ad_ifm(); +void cmpa_w_adr32_ad_ifm(); +void cmpa_w_dpc_ad_ifm(); +void cmpa_w_dpci_ad_ifm(); +void cmpa_w_imm16_ad_ifm(); +void eor_b_dd_ds_ifm(); +void cmpm_b_aips_aipd_ifm(); +void eor_b_dd_ais_ifm(); +void eor_b_dd_aips_ifm(); +void eor_b_dd_pais_ifm(); +void eor_b_dd_das_ifm(); +void eor_b_dd_dais_ifm(); +void eor_b_dd_adr16_ifm(); +void eor_b_dd_adr32_ifm(); +void eor_w_dd_ds_ifm(); +void cmpm_w_aips_aipd_ifm(); +void eor_w_dd_ais_ifm(); +void eor_w_dd_aips_ifm(); +void eor_w_dd_pais_ifm(); +void eor_w_dd_das_ifm(); +void eor_w_dd_dais_ifm(); +void eor_w_dd_adr16_ifm(); +void eor_w_dd_adr32_ifm(); +void eor_l_dd_ds_ifm(); +void cmpm_l_aips_aipd_ifm(); +void eor_l_dd_ais_ifm(); +void eor_l_dd_aips_ifm(); +void eor_l_dd_pais_ifm(); +void eor_l_dd_das_ifm(); +void eor_l_dd_dais_ifm(); +void eor_l_dd_adr16_ifm(); +void eor_l_dd_adr32_ifm(); +void cmpa_l_ds_ad_ifm(); +void cmpa_l_as_ad_ifm(); +void cmpa_l_ais_ad_ifm(); +void cmpa_l_aips_ad_ifm(); +void cmpa_l_pais_ad_ifm(); +void cmpa_l_das_ad_ifm(); +void cmpa_l_dais_ad_ifm(); +void cmpa_l_adr16_ad_ifm(); +void cmpa_l_adr32_ad_ifm(); +void cmpa_l_dpc_ad_ifm(); +void cmpa_l_dpci_ad_ifm(); +void cmpa_l_imm32_ad_ifm(); +void and_b_ds_dd_ifm(); +void and_b_ais_dd_ifm(); +void and_b_aips_dd_ifm(); +void and_b_pais_dd_ifm(); +void and_b_das_dd_ifm(); +void and_b_dais_dd_ifm(); +void and_b_adr16_dd_ifm(); +void and_b_adr32_dd_ifm(); +void and_b_dpc_dd_ifm(); +void and_b_dpci_dd_ifm(); +void and_b_imm8_dd_ifm(); +void and_w_ds_dd_ifm(); +void and_w_ais_dd_ifm(); +void and_w_aips_dd_ifm(); +void and_w_pais_dd_ifm(); +void and_w_das_dd_ifm(); +void and_w_dais_dd_ifm(); +void and_w_adr16_dd_ifm(); +void and_w_adr32_dd_ifm(); +void and_w_dpc_dd_ifm(); +void and_w_dpci_dd_ifm(); +void and_w_imm16_dd_ifm(); +void and_l_ds_dd_ifm(); +void and_l_ais_dd_ifm(); +void and_l_aips_dd_ifm(); +void and_l_pais_dd_ifm(); +void and_l_das_dd_ifm(); +void and_l_dais_dd_ifm(); +void and_l_adr16_dd_ifm(); +void and_l_adr32_dd_ifm(); +void and_l_dpc_dd_ifm(); +void and_l_dpci_dd_ifm(); +void and_l_imm32_dd_ifm(); +void mulu_w_ds_dd_ifm(); +void mulu_w_ais_dd_ifm(); +void mulu_w_aips_dd_ifm(); +void mulu_w_pais_dd_ifm(); +void mulu_w_das_dd_ifm(); +void mulu_w_dais_dd_ifm(); +void mulu_w_adr16_dd_ifm(); +void mulu_w_adr32_dd_ifm(); +void mulu_w_dpc_dd_ifm(); +void mulu_w_dpci_dd_ifm(); +void mulu_w_imm16_dd_ifm(); +void abcd_ds_dd_ifm(); +void abcd_pais_paid_ifm(); +void and_b_dd_ais_ifm(); +void and_b_dd_aips_ifm(); +void and_b_dd_pais_ifm(); +void and_b_dd_das_ifm(); +void and_b_dd_dais_ifm(); +void and_b_dd_adr16_ifm(); +void and_b_dd_adr32_ifm(); +void exg_dd_ds_ifm(); +void exg_ad_as_ifm(); +void and_w_dd_ais_ifm(); +void and_w_dd_aips_ifm(); +void and_w_dd_pais_ifm(); +void and_w_dd_das_ifm(); +void and_w_dd_dais_ifm(); +void and_w_dd_adr16_ifm(); +void and_w_dd_adr32_ifm(); +void exg_dd_as_ifm(); +void and_l_dd_ais_ifm(); +void and_l_dd_aips_ifm(); +void and_l_dd_pais_ifm(); +void and_l_dd_das_ifm(); +void and_l_dd_dais_ifm(); +void and_l_dd_adr16_ifm(); +void and_l_dd_adr32_ifm(); +void muls_w_ds_dd_ifm(); +void muls_w_ais_dd_ifm(); +void muls_w_aips_dd_ifm(); +void muls_w_pais_dd_ifm(); +void muls_w_das_dd_ifm(); +void muls_w_dais_dd_ifm(); +void muls_w_adr16_dd_ifm(); +void muls_w_adr32_dd_ifm(); +void muls_w_dpc_dd_ifm(); +void muls_w_dpci_dd_ifm(); +void muls_w_imm16_dd_ifm(); +void add_b_ds_dd_ifm(); +void add_b_ais_dd_ifm(); +void add_b_aips_dd_ifm(); +void add_b_pais_dd_ifm(); +void add_b_das_dd_ifm(); +void add_b_dais_dd_ifm(); +void add_b_adr16_dd_ifm(); +void add_b_adr32_dd_ifm(); +void add_b_dpc_dd_ifm(); +void add_b_dpci_dd_ifm(); +void add_b_imm8_dd_ifm(); +void add_w_ds_dd_ifm(); +void add_w_as_dd_ifm(); +void add_w_ais_dd_ifm(); +void add_w_aips_dd_ifm(); +void add_w_pais_dd_ifm(); +void add_w_das_dd_ifm(); +void add_w_dais_dd_ifm(); +void add_w_adr16_dd_ifm(); +void add_w_adr32_dd_ifm(); +void add_w_dpc_dd_ifm(); +void add_w_dpci_dd_ifm(); +void add_w_imm16_dd_ifm(); +void add_l_ds_dd_ifm(); +void add_l_as_dd_ifm(); +void add_l_ais_dd_ifm(); +void add_l_aips_dd_ifm(); +void add_l_pais_dd_ifm(); +void add_l_das_dd_ifm(); +void add_l_dais_dd_ifm(); +void add_l_adr16_dd_ifm(); +void add_l_adr32_dd_ifm(); +void add_l_dpc_dd_ifm(); +void add_l_dpci_dd_ifm(); +void add_l_imm32_dd_ifm(); +void adda_w_ds_ad_ifm(); +void adda_w_as_ad_ifm(); +void adda_w_ais_ad_ifm(); +void adda_w_aips_ad_ifm(); +void adda_w_pais_ad_ifm(); +void adda_w_das_ad_ifm(); +void adda_w_dais_ad_ifm(); +void adda_w_adr16_ad_ifm(); +void adda_w_adr32_ad_ifm(); +void adda_w_dpc_ad_ifm(); +void adda_w_dpci_ad_ifm(); +void adda_w_imm16_ad_ifm(); +void addx_b_ds_dd_ifm(); +void addx_b_pais_paid_ifm(); +void add_b_dd_ais_ifm(); +void add_b_dd_aips_ifm(); +void add_b_dd_pais_ifm(); +void add_b_dd_das_ifm(); +void add_b_dd_dais_ifm(); +void add_b_dd_adr16_ifm(); +void add_b_dd_adr32_ifm(); +void addx_w_ds_dd_ifm(); +void addx_w_pais_paid_ifm(); +void add_w_dd_ais_ifm(); +void add_w_dd_aips_ifm(); +void add_w_dd_pais_ifm(); +void add_w_dd_das_ifm(); +void add_w_dd_dais_ifm(); +void add_w_dd_adr16_ifm(); +void add_w_dd_adr32_ifm(); +void addx_l_ds_dd_ifm(); +void addx_l_pais_paid_ifm(); +void add_l_dd_ais_ifm(); +void add_l_dd_aips_ifm(); +void add_l_dd_pais_ifm(); +void add_l_dd_das_ifm(); +void add_l_dd_dais_ifm(); +void add_l_dd_adr16_ifm(); +void add_l_dd_adr32_ifm(); +void adda_l_ds_ad_ifm(); +void adda_l_as_ad_ifm(); +void adda_l_ais_ad_ifm(); +void adda_l_aips_ad_ifm(); +void adda_l_pais_ad_ifm(); +void adda_l_das_ad_ifm(); +void adda_l_dais_ad_ifm(); +void adda_l_adr16_ad_ifm(); +void adda_l_adr32_ad_ifm(); +void adda_l_dpc_ad_ifm(); +void adda_l_dpci_ad_ifm(); +void adda_l_imm32_ad_ifm(); +void asr_b_imm3_ds_ifm(); +void lsr_b_imm3_ds_ifm(); +void roxr_b_imm3_ds_ifm(); +void ror_b_imm3_ds_ifm(); +void asr_b_dd_ds_ifm(); +void lsr_b_dd_ds_ifm(); +void roxr_b_dd_ds_ifm(); +void ror_b_dd_ds_ifm(); +void asr_w_imm3_ds_ifm(); +void lsr_w_imm3_ds_ifm(); +void roxr_w_imm3_ds_ifm(); +void ror_w_imm3_ds_ifm(); +void asr_w_dd_ds_ifm(); +void lsr_w_dd_ds_ifm(); +void roxr_w_dd_ds_ifm(); +void ror_w_dd_ds_ifm(); +void asr_l_imm3_ds_ifm(); +void lsr_l_imm3_ds_ifm(); +void roxr_l_imm3_ds_ifm(); +void ror_l_imm3_ds_ifm(); +void asr_l_dd_ds_ifm(); +void lsr_l_dd_ds_ifm(); +void roxr_l_dd_ds_ifm(); +void ror_l_dd_ds_ifm(); +void asr_ais_ifm(); +void asr_aips_ifm(); +void asr_pais_ifm(); +void asr_das_ifm(); +void asr_dais_ifm(); +void asr_adr16_ifm(); +void asr_adr32_ifm(); +void asl_b_imm3_ds_ifm(); +void lsl_b_imm3_ds_ifm(); +void roxl_b_imm3_ds_ifm(); +void rol_b_imm3_ds_ifm(); +void asl_b_dd_ds_ifm(); +void lsl_b_dd_ds_ifm(); +void roxl_b_dd_ds_ifm(); +void rol_b_dd_ds_ifm(); +void asl_w_imm3_ds_ifm(); +void lsl_w_imm3_ds_ifm(); +void roxl_w_imm3_ds_ifm(); +void rol_w_imm3_ds_ifm(); +void asl_w_dd_ds_ifm(); +void lsl_w_dd_ds_ifm(); +void roxl_w_dd_ds_ifm(); +void rol_w_dd_ds_ifm(); +void asl_l_imm3_ds_ifm(); +void lsl_l_imm3_ds_ifm(); +void roxl_l_imm3_ds_ifm(); +void rol_l_imm3_ds_ifm(); +void asl_l_dd_ds_ifm(); +void lsl_l_dd_ds_ifm(); +void roxl_l_dd_ds_ifm(); +void rol_l_dd_ds_ifm(); +void asl_ais_ifm(); +void asl_aips_ifm(); +void asl_pais_ifm(); +void asl_das_ifm(); +void asl_dais_ifm(); +void asl_adr16_ifm(); +void asl_adr32_ifm(); +void lsr_ais_ifm(); +void lsr_aips_ifm(); +void lsr_pais_ifm(); +void lsr_das_ifm(); +void lsr_dais_ifm(); +void lsr_adr16_ifm(); +void lsr_adr32_ifm(); +void lsl_ais_ifm(); +void lsl_aips_ifm(); +void lsl_pais_ifm(); +void lsl_das_ifm(); +void lsl_dais_ifm(); +void lsl_adr16_ifm(); +void lsl_adr32_ifm(); +void roxr_ais_ifm(); +void roxr_aips_ifm(); +void roxr_pais_ifm(); +void roxr_das_ifm(); +void roxr_dais_ifm(); +void roxr_adr16_ifm(); +void roxr_adr32_ifm(); +void roxl_ais_ifm(); +void roxl_aips_ifm(); +void roxl_pais_ifm(); +void roxl_das_ifm(); +void roxl_dais_ifm(); +void roxl_adr16_ifm(); +void roxl_adr32_ifm(); +void ror_ais_ifm(); +void ror_aips_ifm(); +void ror_pais_ifm(); +void ror_das_ifm(); +void ror_dais_ifm(); +void ror_adr16_ifm(); +void ror_adr32_ifm(); +void rol_ais_ifm(); +void rol_aips_ifm(); +void rol_pais_ifm(); +void rol_das_ifm(); +void rol_dais_ifm(); +void rol_adr16_ifm(); +void rol_adr32_ifm(); +void state_reset_dpm(); +void state_bus_error_dpm(); +void state_address_error_dpm(); +void state_double_fault_dpm(); +void state_interrupt_dpm(); +void state_trace_dpm(); +void state_illegal_dpm(); +void state_priviledge_dpm(); +void state_linea_dpm(); +void state_linef_dpm(); +void ori_b_imm8_ds_dpm(); +void ori_b_imm8_ais_dpm(); +void ori_b_imm8_aips_dpm(); +void ori_b_imm8_pais_dpm(); +void ori_b_imm8_das_dpm(); +void ori_b_imm8_dais_dpm(); +void ori_b_imm8_adr16_dpm(); +void ori_b_imm8_adr32_dpm(); +void ori_imm8_ccr_dpm(); +void ori_w_imm16_ds_dpm(); +void ori_w_imm16_ais_dpm(); +void ori_w_imm16_aips_dpm(); +void ori_w_imm16_pais_dpm(); +void ori_w_imm16_das_dpm(); +void ori_w_imm16_dais_dpm(); +void ori_w_imm16_adr16_dpm(); +void ori_w_imm16_adr32_dpm(); +void ori_i16u_sr_dpm(); +void ori_l_imm32_ds_dpm(); +void ori_l_imm32_ais_dpm(); +void ori_l_imm32_aips_dpm(); +void ori_l_imm32_pais_dpm(); +void ori_l_imm32_das_dpm(); +void ori_l_imm32_dais_dpm(); +void ori_l_imm32_adr16_dpm(); +void ori_l_imm32_adr32_dpm(); +void btst_dd_ds_dpm(); +void movep_w_das_dd_dpm(); +void btst_dd_ais_dpm(); +void btst_dd_aips_dpm(); +void btst_dd_pais_dpm(); +void btst_dd_das_dpm(); +void btst_dd_dais_dpm(); +void btst_dd_adr16_dpm(); +void btst_dd_adr32_dpm(); +void btst_dd_dpc_dpm(); +void btst_dd_dpci_dpm(); +void btst_dd_imm_dpm(); +void bchg_dd_ds_dpm(); +void movep_l_das_dd_dpm(); +void bchg_dd_ais_dpm(); +void bchg_dd_aips_dpm(); +void bchg_dd_pais_dpm(); +void bchg_dd_das_dpm(); +void bchg_dd_dais_dpm(); +void bchg_dd_adr16_dpm(); +void bchg_dd_adr32_dpm(); +void bclr_dd_ds_dpm(); +void movep_w_dd_das_dpm(); +void bclr_dd_ais_dpm(); +void bclr_dd_aips_dpm(); +void bclr_dd_pais_dpm(); +void bclr_dd_das_dpm(); +void bclr_dd_dais_dpm(); +void bclr_dd_adr16_dpm(); +void bclr_dd_adr32_dpm(); +void bset_dd_ds_dpm(); +void movep_l_dd_das_dpm(); +void bset_dd_ais_dpm(); +void bset_dd_aips_dpm(); +void bset_dd_pais_dpm(); +void bset_dd_das_dpm(); +void bset_dd_dais_dpm(); +void bset_dd_adr16_dpm(); +void bset_dd_adr32_dpm(); +void andi_b_imm8_ds_dpm(); +void andi_b_imm8_ais_dpm(); +void andi_b_imm8_aips_dpm(); +void andi_b_imm8_pais_dpm(); +void andi_b_imm8_das_dpm(); +void andi_b_imm8_dais_dpm(); +void andi_b_imm8_adr16_dpm(); +void andi_b_imm8_adr32_dpm(); +void andi_imm8_ccr_dpm(); +void andi_w_imm16_ds_dpm(); +void andi_w_imm16_ais_dpm(); +void andi_w_imm16_aips_dpm(); +void andi_w_imm16_pais_dpm(); +void andi_w_imm16_das_dpm(); +void andi_w_imm16_dais_dpm(); +void andi_w_imm16_adr16_dpm(); +void andi_w_imm16_adr32_dpm(); +void andi_i16u_sr_dpm(); +void andi_l_imm32_ds_dpm(); +void andi_l_imm32_ais_dpm(); +void andi_l_imm32_aips_dpm(); +void andi_l_imm32_pais_dpm(); +void andi_l_imm32_das_dpm(); +void andi_l_imm32_dais_dpm(); +void andi_l_imm32_adr16_dpm(); +void andi_l_imm32_adr32_dpm(); +void subi_b_imm8_ds_dpm(); +void subi_b_imm8_ais_dpm(); +void subi_b_imm8_aips_dpm(); +void subi_b_imm8_pais_dpm(); +void subi_b_imm8_das_dpm(); +void subi_b_imm8_dais_dpm(); +void subi_b_imm8_adr16_dpm(); +void subi_b_imm8_adr32_dpm(); +void subi_w_imm16_ds_dpm(); +void subi_w_imm16_ais_dpm(); +void subi_w_imm16_aips_dpm(); +void subi_w_imm16_pais_dpm(); +void subi_w_imm16_das_dpm(); +void subi_w_imm16_dais_dpm(); +void subi_w_imm16_adr16_dpm(); +void subi_w_imm16_adr32_dpm(); +void subi_l_imm32_ds_dpm(); +void subi_l_imm32_ais_dpm(); +void subi_l_imm32_aips_dpm(); +void subi_l_imm32_pais_dpm(); +void subi_l_imm32_das_dpm(); +void subi_l_imm32_dais_dpm(); +void subi_l_imm32_adr16_dpm(); +void subi_l_imm32_adr32_dpm(); +void addi_b_imm8_ds_dpm(); +void addi_b_imm8_ais_dpm(); +void addi_b_imm8_aips_dpm(); +void addi_b_imm8_pais_dpm(); +void addi_b_imm8_das_dpm(); +void addi_b_imm8_dais_dpm(); +void addi_b_imm8_adr16_dpm(); +void addi_b_imm8_adr32_dpm(); +void addi_w_imm16_ds_dpm(); +void addi_w_imm16_ais_dpm(); +void addi_w_imm16_aips_dpm(); +void addi_w_imm16_pais_dpm(); +void addi_w_imm16_das_dpm(); +void addi_w_imm16_dais_dpm(); +void addi_w_imm16_adr16_dpm(); +void addi_w_imm16_adr32_dpm(); +void addi_l_imm32_ds_dpm(); +void addi_l_imm32_ais_dpm(); +void addi_l_imm32_aips_dpm(); +void addi_l_imm32_pais_dpm(); +void addi_l_imm32_das_dpm(); +void addi_l_imm32_dais_dpm(); +void addi_l_imm32_adr16_dpm(); +void addi_l_imm32_adr32_dpm(); +void btst_imm8_ds_dpm(); +void btst_imm8_ais_dpm(); +void btst_imm8_aips_dpm(); +void btst_imm8_pais_dpm(); +void btst_imm8_das_dpm(); +void btst_imm8_dais_dpm(); +void btst_imm8_adr16_dpm(); +void btst_imm8_adr32_dpm(); +void btst_imm8_dpc_dpm(); +void btst_imm8_dpci_dpm(); +void bchg_imm8_ds_dpm(); +void bchg_imm8_ais_dpm(); +void bchg_imm8_aips_dpm(); +void bchg_imm8_pais_dpm(); +void bchg_imm8_das_dpm(); +void bchg_imm8_dais_dpm(); +void bchg_imm8_adr16_dpm(); +void bchg_imm8_adr32_dpm(); +void bclr_imm8_ds_dpm(); +void bclr_imm8_ais_dpm(); +void bclr_imm8_aips_dpm(); +void bclr_imm8_pais_dpm(); +void bclr_imm8_das_dpm(); +void bclr_imm8_dais_dpm(); +void bclr_imm8_adr16_dpm(); +void bclr_imm8_adr32_dpm(); +void bset_imm8_ds_dpm(); +void bset_imm8_ais_dpm(); +void bset_imm8_aips_dpm(); +void bset_imm8_pais_dpm(); +void bset_imm8_das_dpm(); +void bset_imm8_dais_dpm(); +void bset_imm8_adr16_dpm(); +void bset_imm8_adr32_dpm(); +void eori_b_imm8_ds_dpm(); +void eori_b_imm8_ais_dpm(); +void eori_b_imm8_aips_dpm(); +void eori_b_imm8_pais_dpm(); +void eori_b_imm8_das_dpm(); +void eori_b_imm8_dais_dpm(); +void eori_b_imm8_adr16_dpm(); +void eori_b_imm8_adr32_dpm(); +void eori_imm8_ccr_dpm(); +void eori_w_imm16_ds_dpm(); +void eori_w_imm16_ais_dpm(); +void eori_w_imm16_aips_dpm(); +void eori_w_imm16_pais_dpm(); +void eori_w_imm16_das_dpm(); +void eori_w_imm16_dais_dpm(); +void eori_w_imm16_adr16_dpm(); +void eori_w_imm16_adr32_dpm(); +void eori_i16u_sr_dpm(); +void eori_l_imm32_ds_dpm(); +void eori_l_imm32_ais_dpm(); +void eori_l_imm32_aips_dpm(); +void eori_l_imm32_pais_dpm(); +void eori_l_imm32_das_dpm(); +void eori_l_imm32_dais_dpm(); +void eori_l_imm32_adr16_dpm(); +void eori_l_imm32_adr32_dpm(); +void cmpi_b_imm8_ds_dpm(); +void cmpi_b_imm8_ais_dpm(); +void cmpi_b_imm8_aips_dpm(); +void cmpi_b_imm8_pais_dpm(); +void cmpi_b_imm8_das_dpm(); +void cmpi_b_imm8_dais_dpm(); +void cmpi_b_imm8_adr16_dpm(); +void cmpi_b_imm8_adr32_dpm(); +void cmpi_w_imm16_ds_dpm(); +void cmpi_w_imm16_ais_dpm(); +void cmpi_w_imm16_aips_dpm(); +void cmpi_w_imm16_pais_dpm(); +void cmpi_w_imm16_das_dpm(); +void cmpi_w_imm16_dais_dpm(); +void cmpi_w_imm16_adr16_dpm(); +void cmpi_w_imm16_adr32_dpm(); +void cmpi_l_imm32_ds_dpm(); +void cmpi_l_imm32_ais_dpm(); +void cmpi_l_imm32_aips_dpm(); +void cmpi_l_imm32_pais_dpm(); +void cmpi_l_imm32_das_dpm(); +void cmpi_l_imm32_dais_dpm(); +void cmpi_l_imm32_adr16_dpm(); +void cmpi_l_imm32_adr32_dpm(); +void move_b_ds_dd_dpm(); +void move_b_ais_dd_dpm(); +void move_b_aips_dd_dpm(); +void move_b_pais_dd_dpm(); +void move_b_das_dd_dpm(); +void move_b_dais_dd_dpm(); +void move_b_adr16_dd_dpm(); +void move_b_adr32_dd_dpm(); +void move_b_dpc_dd_dpm(); +void move_b_dpci_dd_dpm(); +void move_b_imm8_dd_dpm(); +void move_b_ds_aid_dpm(); +void move_b_ais_aid_dpm(); +void move_b_aips_aid_dpm(); +void move_b_pais_aid_dpm(); +void move_b_das_aid_dpm(); +void move_b_dais_aid_dpm(); +void move_b_adr16_aid_dpm(); +void move_b_adr32_aid_dpm(); +void move_b_dpc_aid_dpm(); +void move_b_dpci_aid_dpm(); +void move_b_imm8_aid_dpm(); +void move_b_ds_aipd_dpm(); +void move_b_ais_aipd_dpm(); +void move_b_aips_aipd_dpm(); +void move_b_pais_aipd_dpm(); +void move_b_das_aipd_dpm(); +void move_b_dais_aipd_dpm(); +void move_b_adr16_aipd_dpm(); +void move_b_adr32_aipd_dpm(); +void move_b_dpc_aipd_dpm(); +void move_b_dpci_aipd_dpm(); +void move_b_imm8_aipd_dpm(); +void move_b_ds_paid_dpm(); +void move_b_ais_paid_dpm(); +void move_b_aips_paid_dpm(); +void move_b_pais_paid_dpm(); +void move_b_das_paid_dpm(); +void move_b_dais_paid_dpm(); +void move_b_adr16_paid_dpm(); +void move_b_adr32_paid_dpm(); +void move_b_dpc_paid_dpm(); +void move_b_dpci_paid_dpm(); +void move_b_imm8_paid_dpm(); +void move_b_ds_dad_dpm(); +void move_b_ais_dad_dpm(); +void move_b_aips_dad_dpm(); +void move_b_pais_dad_dpm(); +void move_b_das_dad_dpm(); +void move_b_dais_dad_dpm(); +void move_b_adr16_dad_dpm(); +void move_b_adr32_dad_dpm(); +void move_b_dpc_dad_dpm(); +void move_b_dpci_dad_dpm(); +void move_b_imm8_dad_dpm(); +void move_b_ds_daid_dpm(); +void move_b_ais_daid_dpm(); +void move_b_aips_daid_dpm(); +void move_b_pais_daid_dpm(); +void move_b_das_daid_dpm(); +void move_b_dais_daid_dpm(); +void move_b_adr16_daid_dpm(); +void move_b_adr32_daid_dpm(); +void move_b_dpc_daid_dpm(); +void move_b_dpci_daid_dpm(); +void move_b_imm8_daid_dpm(); +void move_b_ds_adr16_dpm(); +void move_b_ais_adr16_dpm(); +void move_b_aips_adr16_dpm(); +void move_b_pais_adr16_dpm(); +void move_b_das_adr16_dpm(); +void move_b_dais_adr16_dpm(); +void move_b_adr16_adr16_dpm(); +void move_b_adr32_adr16_dpm(); +void move_b_dpc_adr16_dpm(); +void move_b_dpci_adr16_dpm(); +void move_b_imm8_adr16_dpm(); +void move_b_ds_adr32_dpm(); +void move_b_ais_adr32_dpm(); +void move_b_aips_adr32_dpm(); +void move_b_pais_adr32_dpm(); +void move_b_das_adr32_dpm(); +void move_b_dais_adr32_dpm(); +void move_b_adr16_adr32_dpm(); +void move_b_adr32_adr32_dpm(); +void move_b_dpc_adr32_dpm(); +void move_b_dpci_adr32_dpm(); +void move_b_imm8_adr32_dpm(); +void move_l_ds_dd_dpm(); +void move_l_as_dd_dpm(); +void move_l_ais_dd_dpm(); +void move_l_aips_dd_dpm(); +void move_l_pais_dd_dpm(); +void move_l_das_dd_dpm(); +void move_l_dais_dd_dpm(); +void move_l_adr16_dd_dpm(); +void move_l_adr32_dd_dpm(); +void move_l_dpc_dd_dpm(); +void move_l_dpci_dd_dpm(); +void move_l_imm32_dd_dpm(); +void movea_l_ds_ad_dpm(); +void movea_l_as_ad_dpm(); +void movea_l_ais_ad_dpm(); +void movea_l_aips_ad_dpm(); +void movea_l_pais_ad_dpm(); +void movea_l_das_ad_dpm(); +void movea_l_dais_ad_dpm(); +void movea_l_adr16_ad_dpm(); +void movea_l_adr32_ad_dpm(); +void movea_l_dpc_ad_dpm(); +void movea_l_dpci_ad_dpm(); +void movea_l_imm32_ad_dpm(); +void move_l_ds_aid_dpm(); +void move_l_as_aid_dpm(); +void move_l_ais_aid_dpm(); +void move_l_aips_aid_dpm(); +void move_l_pais_aid_dpm(); +void move_l_das_aid_dpm(); +void move_l_dais_aid_dpm(); +void move_l_adr16_aid_dpm(); +void move_l_adr32_aid_dpm(); +void move_l_dpc_aid_dpm(); +void move_l_dpci_aid_dpm(); +void move_l_imm32_aid_dpm(); +void move_l_ds_aipd_dpm(); +void move_l_as_aipd_dpm(); +void move_l_ais_aipd_dpm(); +void move_l_aips_aipd_dpm(); +void move_l_pais_aipd_dpm(); +void move_l_das_aipd_dpm(); +void move_l_dais_aipd_dpm(); +void move_l_adr16_aipd_dpm(); +void move_l_adr32_aipd_dpm(); +void move_l_dpc_aipd_dpm(); +void move_l_dpci_aipd_dpm(); +void move_l_imm32_aipd_dpm(); +void move_l_ds_paid_dpm(); +void move_l_as_paid_dpm(); +void move_l_ais_paid_dpm(); +void move_l_aips_paid_dpm(); +void move_l_pais_paid_dpm(); +void move_l_das_paid_dpm(); +void move_l_dais_paid_dpm(); +void move_l_adr16_paid_dpm(); +void move_l_adr32_paid_dpm(); +void move_l_dpc_paid_dpm(); +void move_l_dpci_paid_dpm(); +void move_l_imm32_paid_dpm(); +void move_l_ds_dad_dpm(); +void move_l_as_dad_dpm(); +void move_l_ais_dad_dpm(); +void move_l_aips_dad_dpm(); +void move_l_pais_dad_dpm(); +void move_l_das_dad_dpm(); +void move_l_dais_dad_dpm(); +void move_l_adr16_dad_dpm(); +void move_l_adr32_dad_dpm(); +void move_l_dpc_dad_dpm(); +void move_l_dpci_dad_dpm(); +void move_l_imm32_dad_dpm(); +void move_l_ds_daid_dpm(); +void move_l_as_daid_dpm(); +void move_l_ais_daid_dpm(); +void move_l_aips_daid_dpm(); +void move_l_pais_daid_dpm(); +void move_l_das_daid_dpm(); +void move_l_dais_daid_dpm(); +void move_l_adr16_daid_dpm(); +void move_l_adr32_daid_dpm(); +void move_l_dpc_daid_dpm(); +void move_l_dpci_daid_dpm(); +void move_l_imm32_daid_dpm(); +void move_l_ds_adr16_dpm(); +void move_l_as_adr16_dpm(); +void move_l_ais_adr16_dpm(); +void move_l_aips_adr16_dpm(); +void move_l_pais_adr16_dpm(); +void move_l_das_adr16_dpm(); +void move_l_dais_adr16_dpm(); +void move_l_adr16_adr16_dpm(); +void move_l_adr32_adr16_dpm(); +void move_l_dpc_adr16_dpm(); +void move_l_dpci_adr16_dpm(); +void move_l_imm32_adr16_dpm(); +void move_l_ds_adr32_dpm(); +void move_l_as_adr32_dpm(); +void move_l_ais_adr32_dpm(); +void move_l_aips_adr32_dpm(); +void move_l_pais_adr32_dpm(); +void move_l_das_adr32_dpm(); +void move_l_dais_adr32_dpm(); +void move_l_adr16_adr32_dpm(); +void move_l_adr32_adr32_dpm(); +void move_l_dpc_adr32_dpm(); +void move_l_dpci_adr32_dpm(); +void move_l_imm32_adr32_dpm(); +void move_w_ds_dd_dpm(); +void move_w_as_dd_dpm(); +void move_w_ais_dd_dpm(); +void move_w_aips_dd_dpm(); +void move_w_pais_dd_dpm(); +void move_w_das_dd_dpm(); +void move_w_dais_dd_dpm(); +void move_w_adr16_dd_dpm(); +void move_w_adr32_dd_dpm(); +void move_w_dpc_dd_dpm(); +void move_w_dpci_dd_dpm(); +void move_w_imm16_dd_dpm(); +void movea_w_ds_ad_dpm(); +void movea_w_as_ad_dpm(); +void movea_w_ais_ad_dpm(); +void movea_w_aips_ad_dpm(); +void movea_w_pais_ad_dpm(); +void movea_w_das_ad_dpm(); +void movea_w_dais_ad_dpm(); +void movea_w_adr16_ad_dpm(); +void movea_w_adr32_ad_dpm(); +void movea_w_dpc_ad_dpm(); +void movea_w_dpci_ad_dpm(); +void movea_w_imm16_ad_dpm(); +void move_w_ds_aid_dpm(); +void move_w_as_aid_dpm(); +void move_w_ais_aid_dpm(); +void move_w_aips_aid_dpm(); +void move_w_pais_aid_dpm(); +void move_w_das_aid_dpm(); +void move_w_dais_aid_dpm(); +void move_w_adr16_aid_dpm(); +void move_w_adr32_aid_dpm(); +void move_w_dpc_aid_dpm(); +void move_w_dpci_aid_dpm(); +void move_w_imm16_aid_dpm(); +void move_w_ds_aipd_dpm(); +void move_w_as_aipd_dpm(); +void move_w_ais_aipd_dpm(); +void move_w_aips_aipd_dpm(); +void move_w_pais_aipd_dpm(); +void move_w_das_aipd_dpm(); +void move_w_dais_aipd_dpm(); +void move_w_adr16_aipd_dpm(); +void move_w_adr32_aipd_dpm(); +void move_w_dpc_aipd_dpm(); +void move_w_dpci_aipd_dpm(); +void move_w_imm16_aipd_dpm(); +void move_w_ds_paid_dpm(); +void move_w_as_paid_dpm(); +void move_w_ais_paid_dpm(); +void move_w_aips_paid_dpm(); +void move_w_pais_paid_dpm(); +void move_w_das_paid_dpm(); +void move_w_dais_paid_dpm(); +void move_w_adr16_paid_dpm(); +void move_w_adr32_paid_dpm(); +void move_w_dpc_paid_dpm(); +void move_w_dpci_paid_dpm(); +void move_w_imm16_paid_dpm(); +void move_w_ds_dad_dpm(); +void move_w_as_dad_dpm(); +void move_w_ais_dad_dpm(); +void move_w_aips_dad_dpm(); +void move_w_pais_dad_dpm(); +void move_w_das_dad_dpm(); +void move_w_dais_dad_dpm(); +void move_w_adr16_dad_dpm(); +void move_w_adr32_dad_dpm(); +void move_w_dpc_dad_dpm(); +void move_w_dpci_dad_dpm(); +void move_w_imm16_dad_dpm(); +void move_w_ds_daid_dpm(); +void move_w_as_daid_dpm(); +void move_w_ais_daid_dpm(); +void move_w_aips_daid_dpm(); +void move_w_pais_daid_dpm(); +void move_w_das_daid_dpm(); +void move_w_dais_daid_dpm(); +void move_w_adr16_daid_dpm(); +void move_w_adr32_daid_dpm(); +void move_w_dpc_daid_dpm(); +void move_w_dpci_daid_dpm(); +void move_w_imm16_daid_dpm(); +void move_w_ds_adr16_dpm(); +void move_w_as_adr16_dpm(); +void move_w_ais_adr16_dpm(); +void move_w_aips_adr16_dpm(); +void move_w_pais_adr16_dpm(); +void move_w_das_adr16_dpm(); +void move_w_dais_adr16_dpm(); +void move_w_adr16_adr16_dpm(); +void move_w_adr32_adr16_dpm(); +void move_w_dpc_adr16_dpm(); +void move_w_dpci_adr16_dpm(); +void move_w_imm16_adr16_dpm(); +void move_w_ds_adr32_dpm(); +void move_w_as_adr32_dpm(); +void move_w_ais_adr32_dpm(); +void move_w_aips_adr32_dpm(); +void move_w_pais_adr32_dpm(); +void move_w_das_adr32_dpm(); +void move_w_dais_adr32_dpm(); +void move_w_adr16_adr32_dpm(); +void move_w_adr32_adr32_dpm(); +void move_w_dpc_adr32_dpm(); +void move_w_dpci_adr32_dpm(); +void move_w_imm16_adr32_dpm(); +void negx_b_ds_dpm(); +void negx_b_ais_dpm(); +void negx_b_aips_dpm(); +void negx_b_pais_dpm(); +void negx_b_das_dpm(); +void negx_b_dais_dpm(); +void negx_b_adr16_dpm(); +void negx_b_adr32_dpm(); +void negx_w_ds_dpm(); +void negx_w_ais_dpm(); +void negx_w_aips_dpm(); +void negx_w_pais_dpm(); +void negx_w_das_dpm(); +void negx_w_dais_dpm(); +void negx_w_adr16_dpm(); +void negx_w_adr32_dpm(); +void negx_l_ds_dpm(); +void negx_l_ais_dpm(); +void negx_l_aips_dpm(); +void negx_l_pais_dpm(); +void negx_l_das_dpm(); +void negx_l_dais_dpm(); +void negx_l_adr16_dpm(); +void negx_l_adr32_dpm(); +void move_sr_ds_dpm(); +void move_sr_ais_dpm(); +void move_sr_aips_dpm(); +void move_sr_pais_dpm(); +void move_sr_das_dpm(); +void move_sr_dais_dpm(); +void move_sr_adr16_dpm(); +void move_sr_adr32_dpm(); +void chk_w_ds_dd_dpm(); +void chk_w_ais_dd_dpm(); +void chk_w_aips_dd_dpm(); +void chk_w_pais_dd_dpm(); +void chk_w_das_dd_dpm(); +void chk_w_dais_dd_dpm(); +void chk_w_adr16_dd_dpm(); +void chk_w_adr32_dd_dpm(); +void chk_w_dpc_dd_dpm(); +void chk_w_dpci_dd_dpm(); +void chk_w_imm16_dd_dpm(); +void lea_ais_ad_dpm(); +void lea_das_ad_dpm(); +void lea_dais_ad_dpm(); +void lea_adr16_ad_dpm(); +void lea_adr32_ad_dpm(); +void lea_dpc_ad_dpm(); +void lea_dpci_ad_dpm(); +void clr_b_ds_dpm(); +void clr_b_ais_dpm(); +void clr_b_aips_dpm(); +void clr_b_pais_dpm(); +void clr_b_das_dpm(); +void clr_b_dais_dpm(); +void clr_b_adr16_dpm(); +void clr_b_adr32_dpm(); +void clr_w_ds_dpm(); +void clr_w_ais_dpm(); +void clr_w_aips_dpm(); +void clr_w_pais_dpm(); +void clr_w_das_dpm(); +void clr_w_dais_dpm(); +void clr_w_adr16_dpm(); +void clr_w_adr32_dpm(); +void clr_l_ds_dpm(); +void clr_l_ais_dpm(); +void clr_l_aips_dpm(); +void clr_l_pais_dpm(); +void clr_l_das_dpm(); +void clr_l_dais_dpm(); +void clr_l_adr16_dpm(); +void clr_l_adr32_dpm(); +void neg_b_ds_dpm(); +void neg_b_ais_dpm(); +void neg_b_aips_dpm(); +void neg_b_pais_dpm(); +void neg_b_das_dpm(); +void neg_b_dais_dpm(); +void neg_b_adr16_dpm(); +void neg_b_adr32_dpm(); +void neg_w_ds_dpm(); +void neg_w_ais_dpm(); +void neg_w_aips_dpm(); +void neg_w_pais_dpm(); +void neg_w_das_dpm(); +void neg_w_dais_dpm(); +void neg_w_adr16_dpm(); +void neg_w_adr32_dpm(); +void neg_l_ds_dpm(); +void neg_l_ais_dpm(); +void neg_l_aips_dpm(); +void neg_l_pais_dpm(); +void neg_l_das_dpm(); +void neg_l_dais_dpm(); +void neg_l_adr16_dpm(); +void neg_l_adr32_dpm(); +void move_ds_ccr_dpm(); +void move_ais_ccr_dpm(); +void move_aips_ccr_dpm(); +void move_pais_ccr_dpm(); +void move_das_ccr_dpm(); +void move_dais_ccr_dpm(); +void move_adr16_ccr_dpm(); +void move_adr32_ccr_dpm(); +void move_dpc_ccr_dpm(); +void move_dpci_ccr_dpm(); +void move_imm8_ccr_dpm(); +void not_b_ds_dpm(); +void not_b_ais_dpm(); +void not_b_aips_dpm(); +void not_b_pais_dpm(); +void not_b_das_dpm(); +void not_b_dais_dpm(); +void not_b_adr16_dpm(); +void not_b_adr32_dpm(); +void not_w_ds_dpm(); +void not_w_ais_dpm(); +void not_w_aips_dpm(); +void not_w_pais_dpm(); +void not_w_das_dpm(); +void not_w_dais_dpm(); +void not_w_adr16_dpm(); +void not_w_adr32_dpm(); +void not_l_ds_dpm(); +void not_l_ais_dpm(); +void not_l_aips_dpm(); +void not_l_pais_dpm(); +void not_l_das_dpm(); +void not_l_dais_dpm(); +void not_l_adr16_dpm(); +void not_l_adr32_dpm(); +void move_ds_sr_dpm(); +void move_ais_sr_dpm(); +void move_aips_sr_dpm(); +void move_pais_sr_dpm(); +void move_das_sr_dpm(); +void move_dais_sr_dpm(); +void move_adr16_sr_dpm(); +void move_adr32_sr_dpm(); +void move_dpc_sr_dpm(); +void move_dpci_sr_dpm(); +void move_i16u_sr_dpm(); +void nbcd_b_ds_dpm(); +void nbcd_b_ais_dpm(); +void nbcd_b_aips_dpm(); +void nbcd_b_pais_dpm(); +void nbcd_b_das_dpm(); +void nbcd_b_dais_dpm(); +void nbcd_b_adr16_dpm(); +void nbcd_b_adr32_dpm(); +void swap_ds_dpm(); +void pea_ais_dpm(); +void pea_das_dpm(); +void pea_dais_dpm(); +void pea_adr16_dpm(); +void pea_adr32_dpm(); +void pea_dpc_dpm(); +void pea_dpci_dpm(); +void ext_w_ds_dpm(); +void movem_w_list_ais_dpm(); +void movem_w_listp_pais_dpm(); +void movem_w_list_das_dpm(); +void movem_w_list_dais_dpm(); +void movem_w_list_adr16_dpm(); +void movem_w_list_adr32_dpm(); +void ext_l_ds_dpm(); +void movem_l_list_ais_dpm(); +void movem_l_listp_pais_dpm(); +void movem_l_list_das_dpm(); +void movem_l_list_dais_dpm(); +void movem_l_list_adr16_dpm(); +void movem_l_list_adr32_dpm(); +void tst_b_ds_dpm(); +void tst_b_ais_dpm(); +void tst_b_aips_dpm(); +void tst_b_pais_dpm(); +void tst_b_das_dpm(); +void tst_b_dais_dpm(); +void tst_b_adr16_dpm(); +void tst_b_adr32_dpm(); +void tst_w_ds_dpm(); +void tst_w_ais_dpm(); +void tst_w_aips_dpm(); +void tst_w_pais_dpm(); +void tst_w_das_dpm(); +void tst_w_dais_dpm(); +void tst_w_adr16_dpm(); +void tst_w_adr32_dpm(); +void tst_l_ds_dpm(); +void tst_l_ais_dpm(); +void tst_l_aips_dpm(); +void tst_l_pais_dpm(); +void tst_l_das_dpm(); +void tst_l_dais_dpm(); +void tst_l_adr16_dpm(); +void tst_l_adr32_dpm(); +void tas_ds_dpm(); +void tas_ais_dpm(); +void tas_aips_dpm(); +void tas_pais_dpm(); +void tas_das_dpm(); +void tas_dais_dpm(); +void tas_adr16_dpm(); +void tas_adr32_dpm(); +void movem_w_ais_list_dpm(); +void movem_w_aips_list_dpm(); +void movem_w_das_list_dpm(); +void movem_w_dais_list_dpm(); +void movem_w_adr16_list_dpm(); +void movem_w_adr32_list_dpm(); +void movem_w_dpc_list_dpm(); +void movem_w_dpci_list_dpm(); +void movem_l_ais_list_dpm(); +void movem_l_aips_list_dpm(); +void movem_l_das_list_dpm(); +void movem_l_dais_list_dpm(); +void movem_l_adr16_list_dpm(); +void movem_l_adr32_list_dpm(); +void movem_l_dpc_list_dpm(); +void movem_l_dpci_list_dpm(); +void trap_imm4_dpm(); +void link_as_imm16_dpm(); +void unlk_as_dpm(); +void move_as_usp_dpm(); +void move_usp_as_dpm(); +void reset_dpm(); +void nop_dpm(); +void stop_i16u_dpm(); +void rte_dpm(); +void rts_dpm(); +void trapv_dpm(); +void rtr_dpm(); +void jsr_ais_dpm(); +void jsr_das_dpm(); +void jsr_dais_dpm(); +void jsr_adr16_dpm(); +void jsr_adr32_dpm(); +void jsr_dpc_dpm(); +void jsr_dpci_dpm(); +void jmp_ais_dpm(); +void jmp_das_dpm(); +void jmp_dais_dpm(); +void jmp_adr16_dpm(); +void jmp_adr32_dpm(); +void jmp_dpc_dpm(); +void jmp_dpci_dpm(); +void addq_b_imm3_ds_dpm(); +void addq_b_imm3_ais_dpm(); +void addq_b_imm3_aips_dpm(); +void addq_b_imm3_pais_dpm(); +void addq_b_imm3_das_dpm(); +void addq_b_imm3_dais_dpm(); +void addq_b_imm3_adr16_dpm(); +void addq_b_imm3_adr32_dpm(); +void addq_w_imm3_ds_dpm(); +void addq_w_imm3_as_dpm(); +void addq_w_imm3_ais_dpm(); +void addq_w_imm3_aips_dpm(); +void addq_w_imm3_pais_dpm(); +void addq_w_imm3_das_dpm(); +void addq_w_imm3_dais_dpm(); +void addq_w_imm3_adr16_dpm(); +void addq_w_imm3_adr32_dpm(); +void addq_l_imm3_ds_dpm(); +void addq_l_imm3_as_dpm(); +void addq_l_imm3_ais_dpm(); +void addq_l_imm3_aips_dpm(); +void addq_l_imm3_pais_dpm(); +void addq_l_imm3_das_dpm(); +void addq_l_imm3_dais_dpm(); +void addq_l_imm3_adr16_dpm(); +void addq_l_imm3_adr32_dpm(); +void st_ds_dpm(); +void dbt_ds_rel16_dpm(); +void st_ais_dpm(); +void st_aips_dpm(); +void st_pais_dpm(); +void st_das_dpm(); +void st_dais_dpm(); +void st_adr16_dpm(); +void st_adr32_dpm(); +void subq_b_imm3_ds_dpm(); +void subq_b_imm3_ais_dpm(); +void subq_b_imm3_aips_dpm(); +void subq_b_imm3_pais_dpm(); +void subq_b_imm3_das_dpm(); +void subq_b_imm3_dais_dpm(); +void subq_b_imm3_adr16_dpm(); +void subq_b_imm3_adr32_dpm(); +void subq_w_imm3_ds_dpm(); +void subq_w_imm3_as_dpm(); +void subq_w_imm3_ais_dpm(); +void subq_w_imm3_aips_dpm(); +void subq_w_imm3_pais_dpm(); +void subq_w_imm3_das_dpm(); +void subq_w_imm3_dais_dpm(); +void subq_w_imm3_adr16_dpm(); +void subq_w_imm3_adr32_dpm(); +void subq_l_imm3_ds_dpm(); +void subq_l_imm3_as_dpm(); +void subq_l_imm3_ais_dpm(); +void subq_l_imm3_aips_dpm(); +void subq_l_imm3_pais_dpm(); +void subq_l_imm3_das_dpm(); +void subq_l_imm3_dais_dpm(); +void subq_l_imm3_adr16_dpm(); +void subq_l_imm3_adr32_dpm(); +void sf_ds_dpm(); +void dbra_ds_rel16_dpm(); +void sf_ais_dpm(); +void sf_aips_dpm(); +void sf_pais_dpm(); +void sf_das_dpm(); +void sf_dais_dpm(); +void sf_adr16_dpm(); +void sf_adr32_dpm(); +void shi_ds_dpm(); +void dbhi_ds_rel16_dpm(); +void shi_ais_dpm(); +void shi_aips_dpm(); +void shi_pais_dpm(); +void shi_das_dpm(); +void shi_dais_dpm(); +void shi_adr16_dpm(); +void shi_adr32_dpm(); +void sls_ds_dpm(); +void dbls_ds_rel16_dpm(); +void sls_ais_dpm(); +void sls_aips_dpm(); +void sls_pais_dpm(); +void sls_das_dpm(); +void sls_dais_dpm(); +void sls_adr16_dpm(); +void sls_adr32_dpm(); +void scc_ds_dpm(); +void dbcc_ds_rel16_dpm(); +void scc_ais_dpm(); +void scc_aips_dpm(); +void scc_pais_dpm(); +void scc_das_dpm(); +void scc_dais_dpm(); +void scc_adr16_dpm(); +void scc_adr32_dpm(); +void scs_ds_dpm(); +void dbcs_ds_rel16_dpm(); +void scs_ais_dpm(); +void scs_aips_dpm(); +void scs_pais_dpm(); +void scs_das_dpm(); +void scs_dais_dpm(); +void scs_adr16_dpm(); +void scs_adr32_dpm(); +void sne_ds_dpm(); +void dbne_ds_rel16_dpm(); +void sne_ais_dpm(); +void sne_aips_dpm(); +void sne_pais_dpm(); +void sne_das_dpm(); +void sne_dais_dpm(); +void sne_adr16_dpm(); +void sne_adr32_dpm(); +void seq_ds_dpm(); +void dbeq_ds_rel16_dpm(); +void seq_ais_dpm(); +void seq_aips_dpm(); +void seq_pais_dpm(); +void seq_das_dpm(); +void seq_dais_dpm(); +void seq_adr16_dpm(); +void seq_adr32_dpm(); +void svc_ds_dpm(); +void dbvc_ds_rel16_dpm(); +void svc_ais_dpm(); +void svc_aips_dpm(); +void svc_pais_dpm(); +void svc_das_dpm(); +void svc_dais_dpm(); +void svc_adr16_dpm(); +void svc_adr32_dpm(); +void svs_ds_dpm(); +void dbvs_ds_rel16_dpm(); +void svs_ais_dpm(); +void svs_aips_dpm(); +void svs_pais_dpm(); +void svs_das_dpm(); +void svs_dais_dpm(); +void svs_adr16_dpm(); +void svs_adr32_dpm(); +void spl_ds_dpm(); +void dbpl_ds_rel16_dpm(); +void spl_ais_dpm(); +void spl_aips_dpm(); +void spl_pais_dpm(); +void spl_das_dpm(); +void spl_dais_dpm(); +void spl_adr16_dpm(); +void spl_adr32_dpm(); +void smi_ds_dpm(); +void dbmi_ds_rel16_dpm(); +void smi_ais_dpm(); +void smi_aips_dpm(); +void smi_pais_dpm(); +void smi_das_dpm(); +void smi_dais_dpm(); +void smi_adr16_dpm(); +void smi_adr32_dpm(); +void sge_ds_dpm(); +void dbge_ds_rel16_dpm(); +void sge_ais_dpm(); +void sge_aips_dpm(); +void sge_pais_dpm(); +void sge_das_dpm(); +void sge_dais_dpm(); +void sge_adr16_dpm(); +void sge_adr32_dpm(); +void slt_ds_dpm(); +void dblt_ds_rel16_dpm(); +void slt_ais_dpm(); +void slt_aips_dpm(); +void slt_pais_dpm(); +void slt_das_dpm(); +void slt_dais_dpm(); +void slt_adr16_dpm(); +void slt_adr32_dpm(); +void sgt_ds_dpm(); +void dbgt_ds_rel16_dpm(); +void sgt_ais_dpm(); +void sgt_aips_dpm(); +void sgt_pais_dpm(); +void sgt_das_dpm(); +void sgt_dais_dpm(); +void sgt_adr16_dpm(); +void sgt_adr32_dpm(); +void sle_ds_dpm(); +void dble_ds_rel16_dpm(); +void sle_ais_dpm(); +void sle_aips_dpm(); +void sle_pais_dpm(); +void sle_das_dpm(); +void sle_dais_dpm(); +void sle_adr16_dpm(); +void sle_adr32_dpm(); +void bra_rel16_dpm(); +void bra_rel8_dpm(); +void bsr_rel16_dpm(); +void bsr_rel8_dpm(); +void bhi_rel16_dpm(); +void bhi_rel8_dpm(); +void bls_rel16_dpm(); +void bls_rel8_dpm(); +void bcc_rel16_dpm(); +void bcc_rel8_dpm(); +void bcs_rel16_dpm(); +void bcs_rel8_dpm(); +void bne_rel16_dpm(); +void bne_rel8_dpm(); +void beq_rel16_dpm(); +void beq_rel8_dpm(); +void bvc_rel16_dpm(); +void bvc_rel8_dpm(); +void bvs_rel16_dpm(); +void bvs_rel8_dpm(); +void bpl_rel16_dpm(); +void bpl_rel8_dpm(); +void bmi_rel16_dpm(); +void bmi_rel8_dpm(); +void bge_rel16_dpm(); +void bge_rel8_dpm(); +void blt_rel16_dpm(); +void blt_rel8_dpm(); +void bgt_rel16_dpm(); +void bgt_rel8_dpm(); +void ble_rel16_dpm(); +void ble_rel8_dpm(); +void moveq_imm8o_dd_dpm(); +void or_b_ds_dd_dpm(); +void or_b_ais_dd_dpm(); +void or_b_aips_dd_dpm(); +void or_b_pais_dd_dpm(); +void or_b_das_dd_dpm(); +void or_b_dais_dd_dpm(); +void or_b_adr16_dd_dpm(); +void or_b_adr32_dd_dpm(); +void or_b_dpc_dd_dpm(); +void or_b_dpci_dd_dpm(); +void or_b_imm8_dd_dpm(); +void or_w_ds_dd_dpm(); +void or_w_ais_dd_dpm(); +void or_w_aips_dd_dpm(); +void or_w_pais_dd_dpm(); +void or_w_das_dd_dpm(); +void or_w_dais_dd_dpm(); +void or_w_adr16_dd_dpm(); +void or_w_adr32_dd_dpm(); +void or_w_dpc_dd_dpm(); +void or_w_dpci_dd_dpm(); +void or_w_imm16_dd_dpm(); +void or_l_ds_dd_dpm(); +void or_l_ais_dd_dpm(); +void or_l_aips_dd_dpm(); +void or_l_pais_dd_dpm(); +void or_l_das_dd_dpm(); +void or_l_dais_dd_dpm(); +void or_l_adr16_dd_dpm(); +void or_l_adr32_dd_dpm(); +void or_l_dpc_dd_dpm(); +void or_l_dpci_dd_dpm(); +void or_l_imm32_dd_dpm(); +void divu_w_ds_dd_dpm(); +void divu_w_ais_dd_dpm(); +void divu_w_aips_dd_dpm(); +void divu_w_pais_dd_dpm(); +void divu_w_das_dd_dpm(); +void divu_w_dais_dd_dpm(); +void divu_w_adr16_dd_dpm(); +void divu_w_adr32_dd_dpm(); +void divu_w_dpc_dd_dpm(); +void divu_w_dpci_dd_dpm(); +void divu_w_imm16_dd_dpm(); +void sbcd_ds_dd_dpm(); +void sbcd_pais_paid_dpm(); +void or_b_dd_ais_dpm(); +void or_b_dd_aips_dpm(); +void or_b_dd_pais_dpm(); +void or_b_dd_das_dpm(); +void or_b_dd_dais_dpm(); +void or_b_dd_adr16_dpm(); +void or_b_dd_adr32_dpm(); +void or_w_dd_ais_dpm(); +void or_w_dd_aips_dpm(); +void or_w_dd_pais_dpm(); +void or_w_dd_das_dpm(); +void or_w_dd_dais_dpm(); +void or_w_dd_adr16_dpm(); +void or_w_dd_adr32_dpm(); +void or_l_dd_ais_dpm(); +void or_l_dd_aips_dpm(); +void or_l_dd_pais_dpm(); +void or_l_dd_das_dpm(); +void or_l_dd_dais_dpm(); +void or_l_dd_adr16_dpm(); +void or_l_dd_adr32_dpm(); +void divs_w_ds_dd_dpm(); +void divs_w_ais_dd_dpm(); +void divs_w_aips_dd_dpm(); +void divs_w_pais_dd_dpm(); +void divs_w_das_dd_dpm(); +void divs_w_dais_dd_dpm(); +void divs_w_adr16_dd_dpm(); +void divs_w_adr32_dd_dpm(); +void divs_w_dpc_dd_dpm(); +void divs_w_dpci_dd_dpm(); +void divs_w_imm16_dd_dpm(); +void sub_b_ds_dd_dpm(); +void sub_b_ais_dd_dpm(); +void sub_b_aips_dd_dpm(); +void sub_b_pais_dd_dpm(); +void sub_b_das_dd_dpm(); +void sub_b_dais_dd_dpm(); +void sub_b_adr16_dd_dpm(); +void sub_b_adr32_dd_dpm(); +void sub_b_dpc_dd_dpm(); +void sub_b_dpci_dd_dpm(); +void sub_b_imm8_dd_dpm(); +void sub_w_ds_dd_dpm(); +void sub_w_as_dd_dpm(); +void sub_w_ais_dd_dpm(); +void sub_w_aips_dd_dpm(); +void sub_w_pais_dd_dpm(); +void sub_w_das_dd_dpm(); +void sub_w_dais_dd_dpm(); +void sub_w_adr16_dd_dpm(); +void sub_w_adr32_dd_dpm(); +void sub_w_dpc_dd_dpm(); +void sub_w_dpci_dd_dpm(); +void sub_w_imm16_dd_dpm(); +void sub_l_ds_dd_dpm(); +void sub_l_as_dd_dpm(); +void sub_l_ais_dd_dpm(); +void sub_l_aips_dd_dpm(); +void sub_l_pais_dd_dpm(); +void sub_l_das_dd_dpm(); +void sub_l_dais_dd_dpm(); +void sub_l_adr16_dd_dpm(); +void sub_l_adr32_dd_dpm(); +void sub_l_dpc_dd_dpm(); +void sub_l_dpci_dd_dpm(); +void sub_l_imm32_dd_dpm(); +void suba_w_ds_ad_dpm(); +void suba_w_as_ad_dpm(); +void suba_w_ais_ad_dpm(); +void suba_w_aips_ad_dpm(); +void suba_w_pais_ad_dpm(); +void suba_w_das_ad_dpm(); +void suba_w_dais_ad_dpm(); +void suba_w_adr16_ad_dpm(); +void suba_w_adr32_ad_dpm(); +void suba_w_dpc_ad_dpm(); +void suba_w_dpci_ad_dpm(); +void suba_w_imm16_ad_dpm(); +void subx_b_ds_dd_dpm(); +void subx_b_pais_paid_dpm(); +void sub_b_dd_ais_dpm(); +void sub_b_dd_aips_dpm(); +void sub_b_dd_pais_dpm(); +void sub_b_dd_das_dpm(); +void sub_b_dd_dais_dpm(); +void sub_b_dd_adr16_dpm(); +void sub_b_dd_adr32_dpm(); +void subx_w_ds_dd_dpm(); +void subx_w_pais_paid_dpm(); +void sub_w_dd_ais_dpm(); +void sub_w_dd_aips_dpm(); +void sub_w_dd_pais_dpm(); +void sub_w_dd_das_dpm(); +void sub_w_dd_dais_dpm(); +void sub_w_dd_adr16_dpm(); +void sub_w_dd_adr32_dpm(); +void subx_l_ds_dd_dpm(); +void subx_l_pais_paid_dpm(); +void sub_l_dd_ais_dpm(); +void sub_l_dd_aips_dpm(); +void sub_l_dd_pais_dpm(); +void sub_l_dd_das_dpm(); +void sub_l_dd_dais_dpm(); +void sub_l_dd_adr16_dpm(); +void sub_l_dd_adr32_dpm(); +void suba_l_ds_ad_dpm(); +void suba_l_as_ad_dpm(); +void suba_l_ais_ad_dpm(); +void suba_l_aips_ad_dpm(); +void suba_l_pais_ad_dpm(); +void suba_l_das_ad_dpm(); +void suba_l_dais_ad_dpm(); +void suba_l_adr16_ad_dpm(); +void suba_l_adr32_ad_dpm(); +void suba_l_dpc_ad_dpm(); +void suba_l_dpci_ad_dpm(); +void suba_l_imm32_ad_dpm(); +void cmp_b_ds_dd_dpm(); +void cmp_b_ais_dd_dpm(); +void cmp_b_aips_dd_dpm(); +void cmp_b_pais_dd_dpm(); +void cmp_b_das_dd_dpm(); +void cmp_b_dais_dd_dpm(); +void cmp_b_adr16_dd_dpm(); +void cmp_b_adr32_dd_dpm(); +void cmp_b_dpc_dd_dpm(); +void cmp_b_dpci_dd_dpm(); +void cmp_b_imm8_dd_dpm(); +void cmp_w_ds_dd_dpm(); +void cmp_w_as_dd_dpm(); +void cmp_w_ais_dd_dpm(); +void cmp_w_aips_dd_dpm(); +void cmp_w_pais_dd_dpm(); +void cmp_w_das_dd_dpm(); +void cmp_w_dais_dd_dpm(); +void cmp_w_adr16_dd_dpm(); +void cmp_w_adr32_dd_dpm(); +void cmp_w_dpc_dd_dpm(); +void cmp_w_dpci_dd_dpm(); +void cmp_w_imm16_dd_dpm(); +void cmp_l_ds_dd_dpm(); +void cmp_l_as_dd_dpm(); +void cmp_l_ais_dd_dpm(); +void cmp_l_aips_dd_dpm(); +void cmp_l_pais_dd_dpm(); +void cmp_l_das_dd_dpm(); +void cmp_l_dais_dd_dpm(); +void cmp_l_adr16_dd_dpm(); +void cmp_l_adr32_dd_dpm(); +void cmp_l_dpc_dd_dpm(); +void cmp_l_dpci_dd_dpm(); +void cmp_l_imm32_dd_dpm(); +void cmpa_w_ds_ad_dpm(); +void cmpa_w_as_ad_dpm(); +void cmpa_w_ais_ad_dpm(); +void cmpa_w_aips_ad_dpm(); +void cmpa_w_pais_ad_dpm(); +void cmpa_w_das_ad_dpm(); +void cmpa_w_dais_ad_dpm(); +void cmpa_w_adr16_ad_dpm(); +void cmpa_w_adr32_ad_dpm(); +void cmpa_w_dpc_ad_dpm(); +void cmpa_w_dpci_ad_dpm(); +void cmpa_w_imm16_ad_dpm(); +void eor_b_dd_ds_dpm(); +void cmpm_b_aips_aipd_dpm(); +void eor_b_dd_ais_dpm(); +void eor_b_dd_aips_dpm(); +void eor_b_dd_pais_dpm(); +void eor_b_dd_das_dpm(); +void eor_b_dd_dais_dpm(); +void eor_b_dd_adr16_dpm(); +void eor_b_dd_adr32_dpm(); +void eor_w_dd_ds_dpm(); +void cmpm_w_aips_aipd_dpm(); +void eor_w_dd_ais_dpm(); +void eor_w_dd_aips_dpm(); +void eor_w_dd_pais_dpm(); +void eor_w_dd_das_dpm(); +void eor_w_dd_dais_dpm(); +void eor_w_dd_adr16_dpm(); +void eor_w_dd_adr32_dpm(); +void eor_l_dd_ds_dpm(); +void cmpm_l_aips_aipd_dpm(); +void eor_l_dd_ais_dpm(); +void eor_l_dd_aips_dpm(); +void eor_l_dd_pais_dpm(); +void eor_l_dd_das_dpm(); +void eor_l_dd_dais_dpm(); +void eor_l_dd_adr16_dpm(); +void eor_l_dd_adr32_dpm(); +void cmpa_l_ds_ad_dpm(); +void cmpa_l_as_ad_dpm(); +void cmpa_l_ais_ad_dpm(); +void cmpa_l_aips_ad_dpm(); +void cmpa_l_pais_ad_dpm(); +void cmpa_l_das_ad_dpm(); +void cmpa_l_dais_ad_dpm(); +void cmpa_l_adr16_ad_dpm(); +void cmpa_l_adr32_ad_dpm(); +void cmpa_l_dpc_ad_dpm(); +void cmpa_l_dpci_ad_dpm(); +void cmpa_l_imm32_ad_dpm(); +void and_b_ds_dd_dpm(); +void and_b_ais_dd_dpm(); +void and_b_aips_dd_dpm(); +void and_b_pais_dd_dpm(); +void and_b_das_dd_dpm(); +void and_b_dais_dd_dpm(); +void and_b_adr16_dd_dpm(); +void and_b_adr32_dd_dpm(); +void and_b_dpc_dd_dpm(); +void and_b_dpci_dd_dpm(); +void and_b_imm8_dd_dpm(); +void and_w_ds_dd_dpm(); +void and_w_ais_dd_dpm(); +void and_w_aips_dd_dpm(); +void and_w_pais_dd_dpm(); +void and_w_das_dd_dpm(); +void and_w_dais_dd_dpm(); +void and_w_adr16_dd_dpm(); +void and_w_adr32_dd_dpm(); +void and_w_dpc_dd_dpm(); +void and_w_dpci_dd_dpm(); +void and_w_imm16_dd_dpm(); +void and_l_ds_dd_dpm(); +void and_l_ais_dd_dpm(); +void and_l_aips_dd_dpm(); +void and_l_pais_dd_dpm(); +void and_l_das_dd_dpm(); +void and_l_dais_dd_dpm(); +void and_l_adr16_dd_dpm(); +void and_l_adr32_dd_dpm(); +void and_l_dpc_dd_dpm(); +void and_l_dpci_dd_dpm(); +void and_l_imm32_dd_dpm(); +void mulu_w_ds_dd_dpm(); +void mulu_w_ais_dd_dpm(); +void mulu_w_aips_dd_dpm(); +void mulu_w_pais_dd_dpm(); +void mulu_w_das_dd_dpm(); +void mulu_w_dais_dd_dpm(); +void mulu_w_adr16_dd_dpm(); +void mulu_w_adr32_dd_dpm(); +void mulu_w_dpc_dd_dpm(); +void mulu_w_dpci_dd_dpm(); +void mulu_w_imm16_dd_dpm(); +void abcd_ds_dd_dpm(); +void abcd_pais_paid_dpm(); +void and_b_dd_ais_dpm(); +void and_b_dd_aips_dpm(); +void and_b_dd_pais_dpm(); +void and_b_dd_das_dpm(); +void and_b_dd_dais_dpm(); +void and_b_dd_adr16_dpm(); +void and_b_dd_adr32_dpm(); +void exg_dd_ds_dpm(); +void exg_ad_as_dpm(); +void and_w_dd_ais_dpm(); +void and_w_dd_aips_dpm(); +void and_w_dd_pais_dpm(); +void and_w_dd_das_dpm(); +void and_w_dd_dais_dpm(); +void and_w_dd_adr16_dpm(); +void and_w_dd_adr32_dpm(); +void exg_dd_as_dpm(); +void and_l_dd_ais_dpm(); +void and_l_dd_aips_dpm(); +void and_l_dd_pais_dpm(); +void and_l_dd_das_dpm(); +void and_l_dd_dais_dpm(); +void and_l_dd_adr16_dpm(); +void and_l_dd_adr32_dpm(); +void muls_w_ds_dd_dpm(); +void muls_w_ais_dd_dpm(); +void muls_w_aips_dd_dpm(); +void muls_w_pais_dd_dpm(); +void muls_w_das_dd_dpm(); +void muls_w_dais_dd_dpm(); +void muls_w_adr16_dd_dpm(); +void muls_w_adr32_dd_dpm(); +void muls_w_dpc_dd_dpm(); +void muls_w_dpci_dd_dpm(); +void muls_w_imm16_dd_dpm(); +void add_b_ds_dd_dpm(); +void add_b_ais_dd_dpm(); +void add_b_aips_dd_dpm(); +void add_b_pais_dd_dpm(); +void add_b_das_dd_dpm(); +void add_b_dais_dd_dpm(); +void add_b_adr16_dd_dpm(); +void add_b_adr32_dd_dpm(); +void add_b_dpc_dd_dpm(); +void add_b_dpci_dd_dpm(); +void add_b_imm8_dd_dpm(); +void add_w_ds_dd_dpm(); +void add_w_as_dd_dpm(); +void add_w_ais_dd_dpm(); +void add_w_aips_dd_dpm(); +void add_w_pais_dd_dpm(); +void add_w_das_dd_dpm(); +void add_w_dais_dd_dpm(); +void add_w_adr16_dd_dpm(); +void add_w_adr32_dd_dpm(); +void add_w_dpc_dd_dpm(); +void add_w_dpci_dd_dpm(); +void add_w_imm16_dd_dpm(); +void add_l_ds_dd_dpm(); +void add_l_as_dd_dpm(); +void add_l_ais_dd_dpm(); +void add_l_aips_dd_dpm(); +void add_l_pais_dd_dpm(); +void add_l_das_dd_dpm(); +void add_l_dais_dd_dpm(); +void add_l_adr16_dd_dpm(); +void add_l_adr32_dd_dpm(); +void add_l_dpc_dd_dpm(); +void add_l_dpci_dd_dpm(); +void add_l_imm32_dd_dpm(); +void adda_w_ds_ad_dpm(); +void adda_w_as_ad_dpm(); +void adda_w_ais_ad_dpm(); +void adda_w_aips_ad_dpm(); +void adda_w_pais_ad_dpm(); +void adda_w_das_ad_dpm(); +void adda_w_dais_ad_dpm(); +void adda_w_adr16_ad_dpm(); +void adda_w_adr32_ad_dpm(); +void adda_w_dpc_ad_dpm(); +void adda_w_dpci_ad_dpm(); +void adda_w_imm16_ad_dpm(); +void addx_b_ds_dd_dpm(); +void addx_b_pais_paid_dpm(); +void add_b_dd_ais_dpm(); +void add_b_dd_aips_dpm(); +void add_b_dd_pais_dpm(); +void add_b_dd_das_dpm(); +void add_b_dd_dais_dpm(); +void add_b_dd_adr16_dpm(); +void add_b_dd_adr32_dpm(); +void addx_w_ds_dd_dpm(); +void addx_w_pais_paid_dpm(); +void add_w_dd_ais_dpm(); +void add_w_dd_aips_dpm(); +void add_w_dd_pais_dpm(); +void add_w_dd_das_dpm(); +void add_w_dd_dais_dpm(); +void add_w_dd_adr16_dpm(); +void add_w_dd_adr32_dpm(); +void addx_l_ds_dd_dpm(); +void addx_l_pais_paid_dpm(); +void add_l_dd_ais_dpm(); +void add_l_dd_aips_dpm(); +void add_l_dd_pais_dpm(); +void add_l_dd_das_dpm(); +void add_l_dd_dais_dpm(); +void add_l_dd_adr16_dpm(); +void add_l_dd_adr32_dpm(); +void adda_l_ds_ad_dpm(); +void adda_l_as_ad_dpm(); +void adda_l_ais_ad_dpm(); +void adda_l_aips_ad_dpm(); +void adda_l_pais_ad_dpm(); +void adda_l_das_ad_dpm(); +void adda_l_dais_ad_dpm(); +void adda_l_adr16_ad_dpm(); +void adda_l_adr32_ad_dpm(); +void adda_l_dpc_ad_dpm(); +void adda_l_dpci_ad_dpm(); +void adda_l_imm32_ad_dpm(); +void asr_b_imm3_ds_dpm(); +void lsr_b_imm3_ds_dpm(); +void roxr_b_imm3_ds_dpm(); +void ror_b_imm3_ds_dpm(); +void asr_b_dd_ds_dpm(); +void lsr_b_dd_ds_dpm(); +void roxr_b_dd_ds_dpm(); +void ror_b_dd_ds_dpm(); +void asr_w_imm3_ds_dpm(); +void lsr_w_imm3_ds_dpm(); +void roxr_w_imm3_ds_dpm(); +void ror_w_imm3_ds_dpm(); +void asr_w_dd_ds_dpm(); +void lsr_w_dd_ds_dpm(); +void roxr_w_dd_ds_dpm(); +void ror_w_dd_ds_dpm(); +void asr_l_imm3_ds_dpm(); +void lsr_l_imm3_ds_dpm(); +void roxr_l_imm3_ds_dpm(); +void ror_l_imm3_ds_dpm(); +void asr_l_dd_ds_dpm(); +void lsr_l_dd_ds_dpm(); +void roxr_l_dd_ds_dpm(); +void ror_l_dd_ds_dpm(); +void asr_ais_dpm(); +void asr_aips_dpm(); +void asr_pais_dpm(); +void asr_das_dpm(); +void asr_dais_dpm(); +void asr_adr16_dpm(); +void asr_adr32_dpm(); +void asl_b_imm3_ds_dpm(); +void lsl_b_imm3_ds_dpm(); +void roxl_b_imm3_ds_dpm(); +void rol_b_imm3_ds_dpm(); +void asl_b_dd_ds_dpm(); +void lsl_b_dd_ds_dpm(); +void roxl_b_dd_ds_dpm(); +void rol_b_dd_ds_dpm(); +void asl_w_imm3_ds_dpm(); +void lsl_w_imm3_ds_dpm(); +void roxl_w_imm3_ds_dpm(); +void rol_w_imm3_ds_dpm(); +void asl_w_dd_ds_dpm(); +void lsl_w_dd_ds_dpm(); +void roxl_w_dd_ds_dpm(); +void rol_w_dd_ds_dpm(); +void asl_l_imm3_ds_dpm(); +void lsl_l_imm3_ds_dpm(); +void roxl_l_imm3_ds_dpm(); +void rol_l_imm3_ds_dpm(); +void asl_l_dd_ds_dpm(); +void lsl_l_dd_ds_dpm(); +void roxl_l_dd_ds_dpm(); +void rol_l_dd_ds_dpm(); +void asl_ais_dpm(); +void asl_aips_dpm(); +void asl_pais_dpm(); +void asl_das_dpm(); +void asl_dais_dpm(); +void asl_adr16_dpm(); +void asl_adr32_dpm(); +void lsr_ais_dpm(); +void lsr_aips_dpm(); +void lsr_pais_dpm(); +void lsr_das_dpm(); +void lsr_dais_dpm(); +void lsr_adr16_dpm(); +void lsr_adr32_dpm(); +void lsl_ais_dpm(); +void lsl_aips_dpm(); +void lsl_pais_dpm(); +void lsl_das_dpm(); +void lsl_dais_dpm(); +void lsl_adr16_dpm(); +void lsl_adr32_dpm(); +void roxr_ais_dpm(); +void roxr_aips_dpm(); +void roxr_pais_dpm(); +void roxr_das_dpm(); +void roxr_dais_dpm(); +void roxr_adr16_dpm(); +void roxr_adr32_dpm(); +void roxl_ais_dpm(); +void roxl_aips_dpm(); +void roxl_pais_dpm(); +void roxl_das_dpm(); +void roxl_dais_dpm(); +void roxl_adr16_dpm(); +void roxl_adr32_dpm(); +void ror_ais_dpm(); +void ror_aips_dpm(); +void ror_pais_dpm(); +void ror_das_dpm(); +void ror_dais_dpm(); +void ror_adr16_dpm(); +void ror_adr32_dpm(); +void rol_ais_dpm(); +void rol_aips_dpm(); +void rol_pais_dpm(); +void rol_das_dpm(); +void rol_dais_dpm(); +void rol_adr16_dpm(); +void rol_adr32_dpm(); +void state_reset_ipm(); +void state_bus_error_ipm(); +void state_address_error_ipm(); +void state_double_fault_ipm(); +void state_interrupt_ipm(); +void state_trace_ipm(); +void state_illegal_ipm(); +void state_priviledge_ipm(); +void state_linea_ipm(); +void state_linef_ipm(); +void ori_b_imm8_ds_ipm(); +void ori_b_imm8_ais_ipm(); +void ori_b_imm8_aips_ipm(); +void ori_b_imm8_pais_ipm(); +void ori_b_imm8_das_ipm(); +void ori_b_imm8_dais_ipm(); +void ori_b_imm8_adr16_ipm(); +void ori_b_imm8_adr32_ipm(); +void ori_imm8_ccr_ipm(); +void ori_w_imm16_ds_ipm(); +void ori_w_imm16_ais_ipm(); +void ori_w_imm16_aips_ipm(); +void ori_w_imm16_pais_ipm(); +void ori_w_imm16_das_ipm(); +void ori_w_imm16_dais_ipm(); +void ori_w_imm16_adr16_ipm(); +void ori_w_imm16_adr32_ipm(); +void ori_i16u_sr_ipm(); +void ori_l_imm32_ds_ipm(); +void ori_l_imm32_ais_ipm(); +void ori_l_imm32_aips_ipm(); +void ori_l_imm32_pais_ipm(); +void ori_l_imm32_das_ipm(); +void ori_l_imm32_dais_ipm(); +void ori_l_imm32_adr16_ipm(); +void ori_l_imm32_adr32_ipm(); +void btst_dd_ds_ipm(); +void movep_w_das_dd_ipm(); +void btst_dd_ais_ipm(); +void btst_dd_aips_ipm(); +void btst_dd_pais_ipm(); +void btst_dd_das_ipm(); +void btst_dd_dais_ipm(); +void btst_dd_adr16_ipm(); +void btst_dd_adr32_ipm(); +void btst_dd_dpc_ipm(); +void btst_dd_dpci_ipm(); +void btst_dd_imm_ipm(); +void bchg_dd_ds_ipm(); +void movep_l_das_dd_ipm(); +void bchg_dd_ais_ipm(); +void bchg_dd_aips_ipm(); +void bchg_dd_pais_ipm(); +void bchg_dd_das_ipm(); +void bchg_dd_dais_ipm(); +void bchg_dd_adr16_ipm(); +void bchg_dd_adr32_ipm(); +void bclr_dd_ds_ipm(); +void movep_w_dd_das_ipm(); +void bclr_dd_ais_ipm(); +void bclr_dd_aips_ipm(); +void bclr_dd_pais_ipm(); +void bclr_dd_das_ipm(); +void bclr_dd_dais_ipm(); +void bclr_dd_adr16_ipm(); +void bclr_dd_adr32_ipm(); +void bset_dd_ds_ipm(); +void movep_l_dd_das_ipm(); +void bset_dd_ais_ipm(); +void bset_dd_aips_ipm(); +void bset_dd_pais_ipm(); +void bset_dd_das_ipm(); +void bset_dd_dais_ipm(); +void bset_dd_adr16_ipm(); +void bset_dd_adr32_ipm(); +void andi_b_imm8_ds_ipm(); +void andi_b_imm8_ais_ipm(); +void andi_b_imm8_aips_ipm(); +void andi_b_imm8_pais_ipm(); +void andi_b_imm8_das_ipm(); +void andi_b_imm8_dais_ipm(); +void andi_b_imm8_adr16_ipm(); +void andi_b_imm8_adr32_ipm(); +void andi_imm8_ccr_ipm(); +void andi_w_imm16_ds_ipm(); +void andi_w_imm16_ais_ipm(); +void andi_w_imm16_aips_ipm(); +void andi_w_imm16_pais_ipm(); +void andi_w_imm16_das_ipm(); +void andi_w_imm16_dais_ipm(); +void andi_w_imm16_adr16_ipm(); +void andi_w_imm16_adr32_ipm(); +void andi_i16u_sr_ipm(); +void andi_l_imm32_ds_ipm(); +void andi_l_imm32_ais_ipm(); +void andi_l_imm32_aips_ipm(); +void andi_l_imm32_pais_ipm(); +void andi_l_imm32_das_ipm(); +void andi_l_imm32_dais_ipm(); +void andi_l_imm32_adr16_ipm(); +void andi_l_imm32_adr32_ipm(); +void subi_b_imm8_ds_ipm(); +void subi_b_imm8_ais_ipm(); +void subi_b_imm8_aips_ipm(); +void subi_b_imm8_pais_ipm(); +void subi_b_imm8_das_ipm(); +void subi_b_imm8_dais_ipm(); +void subi_b_imm8_adr16_ipm(); +void subi_b_imm8_adr32_ipm(); +void subi_w_imm16_ds_ipm(); +void subi_w_imm16_ais_ipm(); +void subi_w_imm16_aips_ipm(); +void subi_w_imm16_pais_ipm(); +void subi_w_imm16_das_ipm(); +void subi_w_imm16_dais_ipm(); +void subi_w_imm16_adr16_ipm(); +void subi_w_imm16_adr32_ipm(); +void subi_l_imm32_ds_ipm(); +void subi_l_imm32_ais_ipm(); +void subi_l_imm32_aips_ipm(); +void subi_l_imm32_pais_ipm(); +void subi_l_imm32_das_ipm(); +void subi_l_imm32_dais_ipm(); +void subi_l_imm32_adr16_ipm(); +void subi_l_imm32_adr32_ipm(); +void addi_b_imm8_ds_ipm(); +void addi_b_imm8_ais_ipm(); +void addi_b_imm8_aips_ipm(); +void addi_b_imm8_pais_ipm(); +void addi_b_imm8_das_ipm(); +void addi_b_imm8_dais_ipm(); +void addi_b_imm8_adr16_ipm(); +void addi_b_imm8_adr32_ipm(); +void addi_w_imm16_ds_ipm(); +void addi_w_imm16_ais_ipm(); +void addi_w_imm16_aips_ipm(); +void addi_w_imm16_pais_ipm(); +void addi_w_imm16_das_ipm(); +void addi_w_imm16_dais_ipm(); +void addi_w_imm16_adr16_ipm(); +void addi_w_imm16_adr32_ipm(); +void addi_l_imm32_ds_ipm(); +void addi_l_imm32_ais_ipm(); +void addi_l_imm32_aips_ipm(); +void addi_l_imm32_pais_ipm(); +void addi_l_imm32_das_ipm(); +void addi_l_imm32_dais_ipm(); +void addi_l_imm32_adr16_ipm(); +void addi_l_imm32_adr32_ipm(); +void btst_imm8_ds_ipm(); +void btst_imm8_ais_ipm(); +void btst_imm8_aips_ipm(); +void btst_imm8_pais_ipm(); +void btst_imm8_das_ipm(); +void btst_imm8_dais_ipm(); +void btst_imm8_adr16_ipm(); +void btst_imm8_adr32_ipm(); +void btst_imm8_dpc_ipm(); +void btst_imm8_dpci_ipm(); +void bchg_imm8_ds_ipm(); +void bchg_imm8_ais_ipm(); +void bchg_imm8_aips_ipm(); +void bchg_imm8_pais_ipm(); +void bchg_imm8_das_ipm(); +void bchg_imm8_dais_ipm(); +void bchg_imm8_adr16_ipm(); +void bchg_imm8_adr32_ipm(); +void bclr_imm8_ds_ipm(); +void bclr_imm8_ais_ipm(); +void bclr_imm8_aips_ipm(); +void bclr_imm8_pais_ipm(); +void bclr_imm8_das_ipm(); +void bclr_imm8_dais_ipm(); +void bclr_imm8_adr16_ipm(); +void bclr_imm8_adr32_ipm(); +void bset_imm8_ds_ipm(); +void bset_imm8_ais_ipm(); +void bset_imm8_aips_ipm(); +void bset_imm8_pais_ipm(); +void bset_imm8_das_ipm(); +void bset_imm8_dais_ipm(); +void bset_imm8_adr16_ipm(); +void bset_imm8_adr32_ipm(); +void eori_b_imm8_ds_ipm(); +void eori_b_imm8_ais_ipm(); +void eori_b_imm8_aips_ipm(); +void eori_b_imm8_pais_ipm(); +void eori_b_imm8_das_ipm(); +void eori_b_imm8_dais_ipm(); +void eori_b_imm8_adr16_ipm(); +void eori_b_imm8_adr32_ipm(); +void eori_imm8_ccr_ipm(); +void eori_w_imm16_ds_ipm(); +void eori_w_imm16_ais_ipm(); +void eori_w_imm16_aips_ipm(); +void eori_w_imm16_pais_ipm(); +void eori_w_imm16_das_ipm(); +void eori_w_imm16_dais_ipm(); +void eori_w_imm16_adr16_ipm(); +void eori_w_imm16_adr32_ipm(); +void eori_i16u_sr_ipm(); +void eori_l_imm32_ds_ipm(); +void eori_l_imm32_ais_ipm(); +void eori_l_imm32_aips_ipm(); +void eori_l_imm32_pais_ipm(); +void eori_l_imm32_das_ipm(); +void eori_l_imm32_dais_ipm(); +void eori_l_imm32_adr16_ipm(); +void eori_l_imm32_adr32_ipm(); +void cmpi_b_imm8_ds_ipm(); +void cmpi_b_imm8_ais_ipm(); +void cmpi_b_imm8_aips_ipm(); +void cmpi_b_imm8_pais_ipm(); +void cmpi_b_imm8_das_ipm(); +void cmpi_b_imm8_dais_ipm(); +void cmpi_b_imm8_adr16_ipm(); +void cmpi_b_imm8_adr32_ipm(); +void cmpi_w_imm16_ds_ipm(); +void cmpi_w_imm16_ais_ipm(); +void cmpi_w_imm16_aips_ipm(); +void cmpi_w_imm16_pais_ipm(); +void cmpi_w_imm16_das_ipm(); +void cmpi_w_imm16_dais_ipm(); +void cmpi_w_imm16_adr16_ipm(); +void cmpi_w_imm16_adr32_ipm(); +void cmpi_l_imm32_ds_ipm(); +void cmpi_l_imm32_ais_ipm(); +void cmpi_l_imm32_aips_ipm(); +void cmpi_l_imm32_pais_ipm(); +void cmpi_l_imm32_das_ipm(); +void cmpi_l_imm32_dais_ipm(); +void cmpi_l_imm32_adr16_ipm(); +void cmpi_l_imm32_adr32_ipm(); +void move_b_ds_dd_ipm(); +void move_b_ais_dd_ipm(); +void move_b_aips_dd_ipm(); +void move_b_pais_dd_ipm(); +void move_b_das_dd_ipm(); +void move_b_dais_dd_ipm(); +void move_b_adr16_dd_ipm(); +void move_b_adr32_dd_ipm(); +void move_b_dpc_dd_ipm(); +void move_b_dpci_dd_ipm(); +void move_b_imm8_dd_ipm(); +void move_b_ds_aid_ipm(); +void move_b_ais_aid_ipm(); +void move_b_aips_aid_ipm(); +void move_b_pais_aid_ipm(); +void move_b_das_aid_ipm(); +void move_b_dais_aid_ipm(); +void move_b_adr16_aid_ipm(); +void move_b_adr32_aid_ipm(); +void move_b_dpc_aid_ipm(); +void move_b_dpci_aid_ipm(); +void move_b_imm8_aid_ipm(); +void move_b_ds_aipd_ipm(); +void move_b_ais_aipd_ipm(); +void move_b_aips_aipd_ipm(); +void move_b_pais_aipd_ipm(); +void move_b_das_aipd_ipm(); +void move_b_dais_aipd_ipm(); +void move_b_adr16_aipd_ipm(); +void move_b_adr32_aipd_ipm(); +void move_b_dpc_aipd_ipm(); +void move_b_dpci_aipd_ipm(); +void move_b_imm8_aipd_ipm(); +void move_b_ds_paid_ipm(); +void move_b_ais_paid_ipm(); +void move_b_aips_paid_ipm(); +void move_b_pais_paid_ipm(); +void move_b_das_paid_ipm(); +void move_b_dais_paid_ipm(); +void move_b_adr16_paid_ipm(); +void move_b_adr32_paid_ipm(); +void move_b_dpc_paid_ipm(); +void move_b_dpci_paid_ipm(); +void move_b_imm8_paid_ipm(); +void move_b_ds_dad_ipm(); +void move_b_ais_dad_ipm(); +void move_b_aips_dad_ipm(); +void move_b_pais_dad_ipm(); +void move_b_das_dad_ipm(); +void move_b_dais_dad_ipm(); +void move_b_adr16_dad_ipm(); +void move_b_adr32_dad_ipm(); +void move_b_dpc_dad_ipm(); +void move_b_dpci_dad_ipm(); +void move_b_imm8_dad_ipm(); +void move_b_ds_daid_ipm(); +void move_b_ais_daid_ipm(); +void move_b_aips_daid_ipm(); +void move_b_pais_daid_ipm(); +void move_b_das_daid_ipm(); +void move_b_dais_daid_ipm(); +void move_b_adr16_daid_ipm(); +void move_b_adr32_daid_ipm(); +void move_b_dpc_daid_ipm(); +void move_b_dpci_daid_ipm(); +void move_b_imm8_daid_ipm(); +void move_b_ds_adr16_ipm(); +void move_b_ais_adr16_ipm(); +void move_b_aips_adr16_ipm(); +void move_b_pais_adr16_ipm(); +void move_b_das_adr16_ipm(); +void move_b_dais_adr16_ipm(); +void move_b_adr16_adr16_ipm(); +void move_b_adr32_adr16_ipm(); +void move_b_dpc_adr16_ipm(); +void move_b_dpci_adr16_ipm(); +void move_b_imm8_adr16_ipm(); +void move_b_ds_adr32_ipm(); +void move_b_ais_adr32_ipm(); +void move_b_aips_adr32_ipm(); +void move_b_pais_adr32_ipm(); +void move_b_das_adr32_ipm(); +void move_b_dais_adr32_ipm(); +void move_b_adr16_adr32_ipm(); +void move_b_adr32_adr32_ipm(); +void move_b_dpc_adr32_ipm(); +void move_b_dpci_adr32_ipm(); +void move_b_imm8_adr32_ipm(); +void move_l_ds_dd_ipm(); +void move_l_as_dd_ipm(); +void move_l_ais_dd_ipm(); +void move_l_aips_dd_ipm(); +void move_l_pais_dd_ipm(); +void move_l_das_dd_ipm(); +void move_l_dais_dd_ipm(); +void move_l_adr16_dd_ipm(); +void move_l_adr32_dd_ipm(); +void move_l_dpc_dd_ipm(); +void move_l_dpci_dd_ipm(); +void move_l_imm32_dd_ipm(); +void movea_l_ds_ad_ipm(); +void movea_l_as_ad_ipm(); +void movea_l_ais_ad_ipm(); +void movea_l_aips_ad_ipm(); +void movea_l_pais_ad_ipm(); +void movea_l_das_ad_ipm(); +void movea_l_dais_ad_ipm(); +void movea_l_adr16_ad_ipm(); +void movea_l_adr32_ad_ipm(); +void movea_l_dpc_ad_ipm(); +void movea_l_dpci_ad_ipm(); +void movea_l_imm32_ad_ipm(); +void move_l_ds_aid_ipm(); +void move_l_as_aid_ipm(); +void move_l_ais_aid_ipm(); +void move_l_aips_aid_ipm(); +void move_l_pais_aid_ipm(); +void move_l_das_aid_ipm(); +void move_l_dais_aid_ipm(); +void move_l_adr16_aid_ipm(); +void move_l_adr32_aid_ipm(); +void move_l_dpc_aid_ipm(); +void move_l_dpci_aid_ipm(); +void move_l_imm32_aid_ipm(); +void move_l_ds_aipd_ipm(); +void move_l_as_aipd_ipm(); +void move_l_ais_aipd_ipm(); +void move_l_aips_aipd_ipm(); +void move_l_pais_aipd_ipm(); +void move_l_das_aipd_ipm(); +void move_l_dais_aipd_ipm(); +void move_l_adr16_aipd_ipm(); +void move_l_adr32_aipd_ipm(); +void move_l_dpc_aipd_ipm(); +void move_l_dpci_aipd_ipm(); +void move_l_imm32_aipd_ipm(); +void move_l_ds_paid_ipm(); +void move_l_as_paid_ipm(); +void move_l_ais_paid_ipm(); +void move_l_aips_paid_ipm(); +void move_l_pais_paid_ipm(); +void move_l_das_paid_ipm(); +void move_l_dais_paid_ipm(); +void move_l_adr16_paid_ipm(); +void move_l_adr32_paid_ipm(); +void move_l_dpc_paid_ipm(); +void move_l_dpci_paid_ipm(); +void move_l_imm32_paid_ipm(); +void move_l_ds_dad_ipm(); +void move_l_as_dad_ipm(); +void move_l_ais_dad_ipm(); +void move_l_aips_dad_ipm(); +void move_l_pais_dad_ipm(); +void move_l_das_dad_ipm(); +void move_l_dais_dad_ipm(); +void move_l_adr16_dad_ipm(); +void move_l_adr32_dad_ipm(); +void move_l_dpc_dad_ipm(); +void move_l_dpci_dad_ipm(); +void move_l_imm32_dad_ipm(); +void move_l_ds_daid_ipm(); +void move_l_as_daid_ipm(); +void move_l_ais_daid_ipm(); +void move_l_aips_daid_ipm(); +void move_l_pais_daid_ipm(); +void move_l_das_daid_ipm(); +void move_l_dais_daid_ipm(); +void move_l_adr16_daid_ipm(); +void move_l_adr32_daid_ipm(); +void move_l_dpc_daid_ipm(); +void move_l_dpci_daid_ipm(); +void move_l_imm32_daid_ipm(); +void move_l_ds_adr16_ipm(); +void move_l_as_adr16_ipm(); +void move_l_ais_adr16_ipm(); +void move_l_aips_adr16_ipm(); +void move_l_pais_adr16_ipm(); +void move_l_das_adr16_ipm(); +void move_l_dais_adr16_ipm(); +void move_l_adr16_adr16_ipm(); +void move_l_adr32_adr16_ipm(); +void move_l_dpc_adr16_ipm(); +void move_l_dpci_adr16_ipm(); +void move_l_imm32_adr16_ipm(); +void move_l_ds_adr32_ipm(); +void move_l_as_adr32_ipm(); +void move_l_ais_adr32_ipm(); +void move_l_aips_adr32_ipm(); +void move_l_pais_adr32_ipm(); +void move_l_das_adr32_ipm(); +void move_l_dais_adr32_ipm(); +void move_l_adr16_adr32_ipm(); +void move_l_adr32_adr32_ipm(); +void move_l_dpc_adr32_ipm(); +void move_l_dpci_adr32_ipm(); +void move_l_imm32_adr32_ipm(); +void move_w_ds_dd_ipm(); +void move_w_as_dd_ipm(); +void move_w_ais_dd_ipm(); +void move_w_aips_dd_ipm(); +void move_w_pais_dd_ipm(); +void move_w_das_dd_ipm(); +void move_w_dais_dd_ipm(); +void move_w_adr16_dd_ipm(); +void move_w_adr32_dd_ipm(); +void move_w_dpc_dd_ipm(); +void move_w_dpci_dd_ipm(); +void move_w_imm16_dd_ipm(); +void movea_w_ds_ad_ipm(); +void movea_w_as_ad_ipm(); +void movea_w_ais_ad_ipm(); +void movea_w_aips_ad_ipm(); +void movea_w_pais_ad_ipm(); +void movea_w_das_ad_ipm(); +void movea_w_dais_ad_ipm(); +void movea_w_adr16_ad_ipm(); +void movea_w_adr32_ad_ipm(); +void movea_w_dpc_ad_ipm(); +void movea_w_dpci_ad_ipm(); +void movea_w_imm16_ad_ipm(); +void move_w_ds_aid_ipm(); +void move_w_as_aid_ipm(); +void move_w_ais_aid_ipm(); +void move_w_aips_aid_ipm(); +void move_w_pais_aid_ipm(); +void move_w_das_aid_ipm(); +void move_w_dais_aid_ipm(); +void move_w_adr16_aid_ipm(); +void move_w_adr32_aid_ipm(); +void move_w_dpc_aid_ipm(); +void move_w_dpci_aid_ipm(); +void move_w_imm16_aid_ipm(); +void move_w_ds_aipd_ipm(); +void move_w_as_aipd_ipm(); +void move_w_ais_aipd_ipm(); +void move_w_aips_aipd_ipm(); +void move_w_pais_aipd_ipm(); +void move_w_das_aipd_ipm(); +void move_w_dais_aipd_ipm(); +void move_w_adr16_aipd_ipm(); +void move_w_adr32_aipd_ipm(); +void move_w_dpc_aipd_ipm(); +void move_w_dpci_aipd_ipm(); +void move_w_imm16_aipd_ipm(); +void move_w_ds_paid_ipm(); +void move_w_as_paid_ipm(); +void move_w_ais_paid_ipm(); +void move_w_aips_paid_ipm(); +void move_w_pais_paid_ipm(); +void move_w_das_paid_ipm(); +void move_w_dais_paid_ipm(); +void move_w_adr16_paid_ipm(); +void move_w_adr32_paid_ipm(); +void move_w_dpc_paid_ipm(); +void move_w_dpci_paid_ipm(); +void move_w_imm16_paid_ipm(); +void move_w_ds_dad_ipm(); +void move_w_as_dad_ipm(); +void move_w_ais_dad_ipm(); +void move_w_aips_dad_ipm(); +void move_w_pais_dad_ipm(); +void move_w_das_dad_ipm(); +void move_w_dais_dad_ipm(); +void move_w_adr16_dad_ipm(); +void move_w_adr32_dad_ipm(); +void move_w_dpc_dad_ipm(); +void move_w_dpci_dad_ipm(); +void move_w_imm16_dad_ipm(); +void move_w_ds_daid_ipm(); +void move_w_as_daid_ipm(); +void move_w_ais_daid_ipm(); +void move_w_aips_daid_ipm(); +void move_w_pais_daid_ipm(); +void move_w_das_daid_ipm(); +void move_w_dais_daid_ipm(); +void move_w_adr16_daid_ipm(); +void move_w_adr32_daid_ipm(); +void move_w_dpc_daid_ipm(); +void move_w_dpci_daid_ipm(); +void move_w_imm16_daid_ipm(); +void move_w_ds_adr16_ipm(); +void move_w_as_adr16_ipm(); +void move_w_ais_adr16_ipm(); +void move_w_aips_adr16_ipm(); +void move_w_pais_adr16_ipm(); +void move_w_das_adr16_ipm(); +void move_w_dais_adr16_ipm(); +void move_w_adr16_adr16_ipm(); +void move_w_adr32_adr16_ipm(); +void move_w_dpc_adr16_ipm(); +void move_w_dpci_adr16_ipm(); +void move_w_imm16_adr16_ipm(); +void move_w_ds_adr32_ipm(); +void move_w_as_adr32_ipm(); +void move_w_ais_adr32_ipm(); +void move_w_aips_adr32_ipm(); +void move_w_pais_adr32_ipm(); +void move_w_das_adr32_ipm(); +void move_w_dais_adr32_ipm(); +void move_w_adr16_adr32_ipm(); +void move_w_adr32_adr32_ipm(); +void move_w_dpc_adr32_ipm(); +void move_w_dpci_adr32_ipm(); +void move_w_imm16_adr32_ipm(); +void negx_b_ds_ipm(); +void negx_b_ais_ipm(); +void negx_b_aips_ipm(); +void negx_b_pais_ipm(); +void negx_b_das_ipm(); +void negx_b_dais_ipm(); +void negx_b_adr16_ipm(); +void negx_b_adr32_ipm(); +void negx_w_ds_ipm(); +void negx_w_ais_ipm(); +void negx_w_aips_ipm(); +void negx_w_pais_ipm(); +void negx_w_das_ipm(); +void negx_w_dais_ipm(); +void negx_w_adr16_ipm(); +void negx_w_adr32_ipm(); +void negx_l_ds_ipm(); +void negx_l_ais_ipm(); +void negx_l_aips_ipm(); +void negx_l_pais_ipm(); +void negx_l_das_ipm(); +void negx_l_dais_ipm(); +void negx_l_adr16_ipm(); +void negx_l_adr32_ipm(); +void move_sr_ds_ipm(); +void move_sr_ais_ipm(); +void move_sr_aips_ipm(); +void move_sr_pais_ipm(); +void move_sr_das_ipm(); +void move_sr_dais_ipm(); +void move_sr_adr16_ipm(); +void move_sr_adr32_ipm(); +void chk_w_ds_dd_ipm(); +void chk_w_ais_dd_ipm(); +void chk_w_aips_dd_ipm(); +void chk_w_pais_dd_ipm(); +void chk_w_das_dd_ipm(); +void chk_w_dais_dd_ipm(); +void chk_w_adr16_dd_ipm(); +void chk_w_adr32_dd_ipm(); +void chk_w_dpc_dd_ipm(); +void chk_w_dpci_dd_ipm(); +void chk_w_imm16_dd_ipm(); +void lea_ais_ad_ipm(); +void lea_das_ad_ipm(); +void lea_dais_ad_ipm(); +void lea_adr16_ad_ipm(); +void lea_adr32_ad_ipm(); +void lea_dpc_ad_ipm(); +void lea_dpci_ad_ipm(); +void clr_b_ds_ipm(); +void clr_b_ais_ipm(); +void clr_b_aips_ipm(); +void clr_b_pais_ipm(); +void clr_b_das_ipm(); +void clr_b_dais_ipm(); +void clr_b_adr16_ipm(); +void clr_b_adr32_ipm(); +void clr_w_ds_ipm(); +void clr_w_ais_ipm(); +void clr_w_aips_ipm(); +void clr_w_pais_ipm(); +void clr_w_das_ipm(); +void clr_w_dais_ipm(); +void clr_w_adr16_ipm(); +void clr_w_adr32_ipm(); +void clr_l_ds_ipm(); +void clr_l_ais_ipm(); +void clr_l_aips_ipm(); +void clr_l_pais_ipm(); +void clr_l_das_ipm(); +void clr_l_dais_ipm(); +void clr_l_adr16_ipm(); +void clr_l_adr32_ipm(); +void neg_b_ds_ipm(); +void neg_b_ais_ipm(); +void neg_b_aips_ipm(); +void neg_b_pais_ipm(); +void neg_b_das_ipm(); +void neg_b_dais_ipm(); +void neg_b_adr16_ipm(); +void neg_b_adr32_ipm(); +void neg_w_ds_ipm(); +void neg_w_ais_ipm(); +void neg_w_aips_ipm(); +void neg_w_pais_ipm(); +void neg_w_das_ipm(); +void neg_w_dais_ipm(); +void neg_w_adr16_ipm(); +void neg_w_adr32_ipm(); +void neg_l_ds_ipm(); +void neg_l_ais_ipm(); +void neg_l_aips_ipm(); +void neg_l_pais_ipm(); +void neg_l_das_ipm(); +void neg_l_dais_ipm(); +void neg_l_adr16_ipm(); +void neg_l_adr32_ipm(); +void move_ds_ccr_ipm(); +void move_ais_ccr_ipm(); +void move_aips_ccr_ipm(); +void move_pais_ccr_ipm(); +void move_das_ccr_ipm(); +void move_dais_ccr_ipm(); +void move_adr16_ccr_ipm(); +void move_adr32_ccr_ipm(); +void move_dpc_ccr_ipm(); +void move_dpci_ccr_ipm(); +void move_imm8_ccr_ipm(); +void not_b_ds_ipm(); +void not_b_ais_ipm(); +void not_b_aips_ipm(); +void not_b_pais_ipm(); +void not_b_das_ipm(); +void not_b_dais_ipm(); +void not_b_adr16_ipm(); +void not_b_adr32_ipm(); +void not_w_ds_ipm(); +void not_w_ais_ipm(); +void not_w_aips_ipm(); +void not_w_pais_ipm(); +void not_w_das_ipm(); +void not_w_dais_ipm(); +void not_w_adr16_ipm(); +void not_w_adr32_ipm(); +void not_l_ds_ipm(); +void not_l_ais_ipm(); +void not_l_aips_ipm(); +void not_l_pais_ipm(); +void not_l_das_ipm(); +void not_l_dais_ipm(); +void not_l_adr16_ipm(); +void not_l_adr32_ipm(); +void move_ds_sr_ipm(); +void move_ais_sr_ipm(); +void move_aips_sr_ipm(); +void move_pais_sr_ipm(); +void move_das_sr_ipm(); +void move_dais_sr_ipm(); +void move_adr16_sr_ipm(); +void move_adr32_sr_ipm(); +void move_dpc_sr_ipm(); +void move_dpci_sr_ipm(); +void move_i16u_sr_ipm(); +void nbcd_b_ds_ipm(); +void nbcd_b_ais_ipm(); +void nbcd_b_aips_ipm(); +void nbcd_b_pais_ipm(); +void nbcd_b_das_ipm(); +void nbcd_b_dais_ipm(); +void nbcd_b_adr16_ipm(); +void nbcd_b_adr32_ipm(); +void swap_ds_ipm(); +void pea_ais_ipm(); +void pea_das_ipm(); +void pea_dais_ipm(); +void pea_adr16_ipm(); +void pea_adr32_ipm(); +void pea_dpc_ipm(); +void pea_dpci_ipm(); +void ext_w_ds_ipm(); +void movem_w_list_ais_ipm(); +void movem_w_listp_pais_ipm(); +void movem_w_list_das_ipm(); +void movem_w_list_dais_ipm(); +void movem_w_list_adr16_ipm(); +void movem_w_list_adr32_ipm(); +void ext_l_ds_ipm(); +void movem_l_list_ais_ipm(); +void movem_l_listp_pais_ipm(); +void movem_l_list_das_ipm(); +void movem_l_list_dais_ipm(); +void movem_l_list_adr16_ipm(); +void movem_l_list_adr32_ipm(); +void tst_b_ds_ipm(); +void tst_b_ais_ipm(); +void tst_b_aips_ipm(); +void tst_b_pais_ipm(); +void tst_b_das_ipm(); +void tst_b_dais_ipm(); +void tst_b_adr16_ipm(); +void tst_b_adr32_ipm(); +void tst_w_ds_ipm(); +void tst_w_ais_ipm(); +void tst_w_aips_ipm(); +void tst_w_pais_ipm(); +void tst_w_das_ipm(); +void tst_w_dais_ipm(); +void tst_w_adr16_ipm(); +void tst_w_adr32_ipm(); +void tst_l_ds_ipm(); +void tst_l_ais_ipm(); +void tst_l_aips_ipm(); +void tst_l_pais_ipm(); +void tst_l_das_ipm(); +void tst_l_dais_ipm(); +void tst_l_adr16_ipm(); +void tst_l_adr32_ipm(); +void tas_ds_ipm(); +void tas_ais_ipm(); +void tas_aips_ipm(); +void tas_pais_ipm(); +void tas_das_ipm(); +void tas_dais_ipm(); +void tas_adr16_ipm(); +void tas_adr32_ipm(); +void movem_w_ais_list_ipm(); +void movem_w_aips_list_ipm(); +void movem_w_das_list_ipm(); +void movem_w_dais_list_ipm(); +void movem_w_adr16_list_ipm(); +void movem_w_adr32_list_ipm(); +void movem_w_dpc_list_ipm(); +void movem_w_dpci_list_ipm(); +void movem_l_ais_list_ipm(); +void movem_l_aips_list_ipm(); +void movem_l_das_list_ipm(); +void movem_l_dais_list_ipm(); +void movem_l_adr16_list_ipm(); +void movem_l_adr32_list_ipm(); +void movem_l_dpc_list_ipm(); +void movem_l_dpci_list_ipm(); +void trap_imm4_ipm(); +void link_as_imm16_ipm(); +void unlk_as_ipm(); +void move_as_usp_ipm(); +void move_usp_as_ipm(); +void reset_ipm(); +void nop_ipm(); +void stop_i16u_ipm(); +void rte_ipm(); +void rts_ipm(); +void trapv_ipm(); +void rtr_ipm(); +void jsr_ais_ipm(); +void jsr_das_ipm(); +void jsr_dais_ipm(); +void jsr_adr16_ipm(); +void jsr_adr32_ipm(); +void jsr_dpc_ipm(); +void jsr_dpci_ipm(); +void jmp_ais_ipm(); +void jmp_das_ipm(); +void jmp_dais_ipm(); +void jmp_adr16_ipm(); +void jmp_adr32_ipm(); +void jmp_dpc_ipm(); +void jmp_dpci_ipm(); +void addq_b_imm3_ds_ipm(); +void addq_b_imm3_ais_ipm(); +void addq_b_imm3_aips_ipm(); +void addq_b_imm3_pais_ipm(); +void addq_b_imm3_das_ipm(); +void addq_b_imm3_dais_ipm(); +void addq_b_imm3_adr16_ipm(); +void addq_b_imm3_adr32_ipm(); +void addq_w_imm3_ds_ipm(); +void addq_w_imm3_as_ipm(); +void addq_w_imm3_ais_ipm(); +void addq_w_imm3_aips_ipm(); +void addq_w_imm3_pais_ipm(); +void addq_w_imm3_das_ipm(); +void addq_w_imm3_dais_ipm(); +void addq_w_imm3_adr16_ipm(); +void addq_w_imm3_adr32_ipm(); +void addq_l_imm3_ds_ipm(); +void addq_l_imm3_as_ipm(); +void addq_l_imm3_ais_ipm(); +void addq_l_imm3_aips_ipm(); +void addq_l_imm3_pais_ipm(); +void addq_l_imm3_das_ipm(); +void addq_l_imm3_dais_ipm(); +void addq_l_imm3_adr16_ipm(); +void addq_l_imm3_adr32_ipm(); +void st_ds_ipm(); +void dbt_ds_rel16_ipm(); +void st_ais_ipm(); +void st_aips_ipm(); +void st_pais_ipm(); +void st_das_ipm(); +void st_dais_ipm(); +void st_adr16_ipm(); +void st_adr32_ipm(); +void subq_b_imm3_ds_ipm(); +void subq_b_imm3_ais_ipm(); +void subq_b_imm3_aips_ipm(); +void subq_b_imm3_pais_ipm(); +void subq_b_imm3_das_ipm(); +void subq_b_imm3_dais_ipm(); +void subq_b_imm3_adr16_ipm(); +void subq_b_imm3_adr32_ipm(); +void subq_w_imm3_ds_ipm(); +void subq_w_imm3_as_ipm(); +void subq_w_imm3_ais_ipm(); +void subq_w_imm3_aips_ipm(); +void subq_w_imm3_pais_ipm(); +void subq_w_imm3_das_ipm(); +void subq_w_imm3_dais_ipm(); +void subq_w_imm3_adr16_ipm(); +void subq_w_imm3_adr32_ipm(); +void subq_l_imm3_ds_ipm(); +void subq_l_imm3_as_ipm(); +void subq_l_imm3_ais_ipm(); +void subq_l_imm3_aips_ipm(); +void subq_l_imm3_pais_ipm(); +void subq_l_imm3_das_ipm(); +void subq_l_imm3_dais_ipm(); +void subq_l_imm3_adr16_ipm(); +void subq_l_imm3_adr32_ipm(); +void sf_ds_ipm(); +void dbra_ds_rel16_ipm(); +void sf_ais_ipm(); +void sf_aips_ipm(); +void sf_pais_ipm(); +void sf_das_ipm(); +void sf_dais_ipm(); +void sf_adr16_ipm(); +void sf_adr32_ipm(); +void shi_ds_ipm(); +void dbhi_ds_rel16_ipm(); +void shi_ais_ipm(); +void shi_aips_ipm(); +void shi_pais_ipm(); +void shi_das_ipm(); +void shi_dais_ipm(); +void shi_adr16_ipm(); +void shi_adr32_ipm(); +void sls_ds_ipm(); +void dbls_ds_rel16_ipm(); +void sls_ais_ipm(); +void sls_aips_ipm(); +void sls_pais_ipm(); +void sls_das_ipm(); +void sls_dais_ipm(); +void sls_adr16_ipm(); +void sls_adr32_ipm(); +void scc_ds_ipm(); +void dbcc_ds_rel16_ipm(); +void scc_ais_ipm(); +void scc_aips_ipm(); +void scc_pais_ipm(); +void scc_das_ipm(); +void scc_dais_ipm(); +void scc_adr16_ipm(); +void scc_adr32_ipm(); +void scs_ds_ipm(); +void dbcs_ds_rel16_ipm(); +void scs_ais_ipm(); +void scs_aips_ipm(); +void scs_pais_ipm(); +void scs_das_ipm(); +void scs_dais_ipm(); +void scs_adr16_ipm(); +void scs_adr32_ipm(); +void sne_ds_ipm(); +void dbne_ds_rel16_ipm(); +void sne_ais_ipm(); +void sne_aips_ipm(); +void sne_pais_ipm(); +void sne_das_ipm(); +void sne_dais_ipm(); +void sne_adr16_ipm(); +void sne_adr32_ipm(); +void seq_ds_ipm(); +void dbeq_ds_rel16_ipm(); +void seq_ais_ipm(); +void seq_aips_ipm(); +void seq_pais_ipm(); +void seq_das_ipm(); +void seq_dais_ipm(); +void seq_adr16_ipm(); +void seq_adr32_ipm(); +void svc_ds_ipm(); +void dbvc_ds_rel16_ipm(); +void svc_ais_ipm(); +void svc_aips_ipm(); +void svc_pais_ipm(); +void svc_das_ipm(); +void svc_dais_ipm(); +void svc_adr16_ipm(); +void svc_adr32_ipm(); +void svs_ds_ipm(); +void dbvs_ds_rel16_ipm(); +void svs_ais_ipm(); +void svs_aips_ipm(); +void svs_pais_ipm(); +void svs_das_ipm(); +void svs_dais_ipm(); +void svs_adr16_ipm(); +void svs_adr32_ipm(); +void spl_ds_ipm(); +void dbpl_ds_rel16_ipm(); +void spl_ais_ipm(); +void spl_aips_ipm(); +void spl_pais_ipm(); +void spl_das_ipm(); +void spl_dais_ipm(); +void spl_adr16_ipm(); +void spl_adr32_ipm(); +void smi_ds_ipm(); +void dbmi_ds_rel16_ipm(); +void smi_ais_ipm(); +void smi_aips_ipm(); +void smi_pais_ipm(); +void smi_das_ipm(); +void smi_dais_ipm(); +void smi_adr16_ipm(); +void smi_adr32_ipm(); +void sge_ds_ipm(); +void dbge_ds_rel16_ipm(); +void sge_ais_ipm(); +void sge_aips_ipm(); +void sge_pais_ipm(); +void sge_das_ipm(); +void sge_dais_ipm(); +void sge_adr16_ipm(); +void sge_adr32_ipm(); +void slt_ds_ipm(); +void dblt_ds_rel16_ipm(); +void slt_ais_ipm(); +void slt_aips_ipm(); +void slt_pais_ipm(); +void slt_das_ipm(); +void slt_dais_ipm(); +void slt_adr16_ipm(); +void slt_adr32_ipm(); +void sgt_ds_ipm(); +void dbgt_ds_rel16_ipm(); +void sgt_ais_ipm(); +void sgt_aips_ipm(); +void sgt_pais_ipm(); +void sgt_das_ipm(); +void sgt_dais_ipm(); +void sgt_adr16_ipm(); +void sgt_adr32_ipm(); +void sle_ds_ipm(); +void dble_ds_rel16_ipm(); +void sle_ais_ipm(); +void sle_aips_ipm(); +void sle_pais_ipm(); +void sle_das_ipm(); +void sle_dais_ipm(); +void sle_adr16_ipm(); +void sle_adr32_ipm(); +void bra_rel16_ipm(); +void bra_rel8_ipm(); +void bsr_rel16_ipm(); +void bsr_rel8_ipm(); +void bhi_rel16_ipm(); +void bhi_rel8_ipm(); +void bls_rel16_ipm(); +void bls_rel8_ipm(); +void bcc_rel16_ipm(); +void bcc_rel8_ipm(); +void bcs_rel16_ipm(); +void bcs_rel8_ipm(); +void bne_rel16_ipm(); +void bne_rel8_ipm(); +void beq_rel16_ipm(); +void beq_rel8_ipm(); +void bvc_rel16_ipm(); +void bvc_rel8_ipm(); +void bvs_rel16_ipm(); +void bvs_rel8_ipm(); +void bpl_rel16_ipm(); +void bpl_rel8_ipm(); +void bmi_rel16_ipm(); +void bmi_rel8_ipm(); +void bge_rel16_ipm(); +void bge_rel8_ipm(); +void blt_rel16_ipm(); +void blt_rel8_ipm(); +void bgt_rel16_ipm(); +void bgt_rel8_ipm(); +void ble_rel16_ipm(); +void ble_rel8_ipm(); +void moveq_imm8o_dd_ipm(); +void or_b_ds_dd_ipm(); +void or_b_ais_dd_ipm(); +void or_b_aips_dd_ipm(); +void or_b_pais_dd_ipm(); +void or_b_das_dd_ipm(); +void or_b_dais_dd_ipm(); +void or_b_adr16_dd_ipm(); +void or_b_adr32_dd_ipm(); +void or_b_dpc_dd_ipm(); +void or_b_dpci_dd_ipm(); +void or_b_imm8_dd_ipm(); +void or_w_ds_dd_ipm(); +void or_w_ais_dd_ipm(); +void or_w_aips_dd_ipm(); +void or_w_pais_dd_ipm(); +void or_w_das_dd_ipm(); +void or_w_dais_dd_ipm(); +void or_w_adr16_dd_ipm(); +void or_w_adr32_dd_ipm(); +void or_w_dpc_dd_ipm(); +void or_w_dpci_dd_ipm(); +void or_w_imm16_dd_ipm(); +void or_l_ds_dd_ipm(); +void or_l_ais_dd_ipm(); +void or_l_aips_dd_ipm(); +void or_l_pais_dd_ipm(); +void or_l_das_dd_ipm(); +void or_l_dais_dd_ipm(); +void or_l_adr16_dd_ipm(); +void or_l_adr32_dd_ipm(); +void or_l_dpc_dd_ipm(); +void or_l_dpci_dd_ipm(); +void or_l_imm32_dd_ipm(); +void divu_w_ds_dd_ipm(); +void divu_w_ais_dd_ipm(); +void divu_w_aips_dd_ipm(); +void divu_w_pais_dd_ipm(); +void divu_w_das_dd_ipm(); +void divu_w_dais_dd_ipm(); +void divu_w_adr16_dd_ipm(); +void divu_w_adr32_dd_ipm(); +void divu_w_dpc_dd_ipm(); +void divu_w_dpci_dd_ipm(); +void divu_w_imm16_dd_ipm(); +void sbcd_ds_dd_ipm(); +void sbcd_pais_paid_ipm(); +void or_b_dd_ais_ipm(); +void or_b_dd_aips_ipm(); +void or_b_dd_pais_ipm(); +void or_b_dd_das_ipm(); +void or_b_dd_dais_ipm(); +void or_b_dd_adr16_ipm(); +void or_b_dd_adr32_ipm(); +void or_w_dd_ais_ipm(); +void or_w_dd_aips_ipm(); +void or_w_dd_pais_ipm(); +void or_w_dd_das_ipm(); +void or_w_dd_dais_ipm(); +void or_w_dd_adr16_ipm(); +void or_w_dd_adr32_ipm(); +void or_l_dd_ais_ipm(); +void or_l_dd_aips_ipm(); +void or_l_dd_pais_ipm(); +void or_l_dd_das_ipm(); +void or_l_dd_dais_ipm(); +void or_l_dd_adr16_ipm(); +void or_l_dd_adr32_ipm(); +void divs_w_ds_dd_ipm(); +void divs_w_ais_dd_ipm(); +void divs_w_aips_dd_ipm(); +void divs_w_pais_dd_ipm(); +void divs_w_das_dd_ipm(); +void divs_w_dais_dd_ipm(); +void divs_w_adr16_dd_ipm(); +void divs_w_adr32_dd_ipm(); +void divs_w_dpc_dd_ipm(); +void divs_w_dpci_dd_ipm(); +void divs_w_imm16_dd_ipm(); +void sub_b_ds_dd_ipm(); +void sub_b_ais_dd_ipm(); +void sub_b_aips_dd_ipm(); +void sub_b_pais_dd_ipm(); +void sub_b_das_dd_ipm(); +void sub_b_dais_dd_ipm(); +void sub_b_adr16_dd_ipm(); +void sub_b_adr32_dd_ipm(); +void sub_b_dpc_dd_ipm(); +void sub_b_dpci_dd_ipm(); +void sub_b_imm8_dd_ipm(); +void sub_w_ds_dd_ipm(); +void sub_w_as_dd_ipm(); +void sub_w_ais_dd_ipm(); +void sub_w_aips_dd_ipm(); +void sub_w_pais_dd_ipm(); +void sub_w_das_dd_ipm(); +void sub_w_dais_dd_ipm(); +void sub_w_adr16_dd_ipm(); +void sub_w_adr32_dd_ipm(); +void sub_w_dpc_dd_ipm(); +void sub_w_dpci_dd_ipm(); +void sub_w_imm16_dd_ipm(); +void sub_l_ds_dd_ipm(); +void sub_l_as_dd_ipm(); +void sub_l_ais_dd_ipm(); +void sub_l_aips_dd_ipm(); +void sub_l_pais_dd_ipm(); +void sub_l_das_dd_ipm(); +void sub_l_dais_dd_ipm(); +void sub_l_adr16_dd_ipm(); +void sub_l_adr32_dd_ipm(); +void sub_l_dpc_dd_ipm(); +void sub_l_dpci_dd_ipm(); +void sub_l_imm32_dd_ipm(); +void suba_w_ds_ad_ipm(); +void suba_w_as_ad_ipm(); +void suba_w_ais_ad_ipm(); +void suba_w_aips_ad_ipm(); +void suba_w_pais_ad_ipm(); +void suba_w_das_ad_ipm(); +void suba_w_dais_ad_ipm(); +void suba_w_adr16_ad_ipm(); +void suba_w_adr32_ad_ipm(); +void suba_w_dpc_ad_ipm(); +void suba_w_dpci_ad_ipm(); +void suba_w_imm16_ad_ipm(); +void subx_b_ds_dd_ipm(); +void subx_b_pais_paid_ipm(); +void sub_b_dd_ais_ipm(); +void sub_b_dd_aips_ipm(); +void sub_b_dd_pais_ipm(); +void sub_b_dd_das_ipm(); +void sub_b_dd_dais_ipm(); +void sub_b_dd_adr16_ipm(); +void sub_b_dd_adr32_ipm(); +void subx_w_ds_dd_ipm(); +void subx_w_pais_paid_ipm(); +void sub_w_dd_ais_ipm(); +void sub_w_dd_aips_ipm(); +void sub_w_dd_pais_ipm(); +void sub_w_dd_das_ipm(); +void sub_w_dd_dais_ipm(); +void sub_w_dd_adr16_ipm(); +void sub_w_dd_adr32_ipm(); +void subx_l_ds_dd_ipm(); +void subx_l_pais_paid_ipm(); +void sub_l_dd_ais_ipm(); +void sub_l_dd_aips_ipm(); +void sub_l_dd_pais_ipm(); +void sub_l_dd_das_ipm(); +void sub_l_dd_dais_ipm(); +void sub_l_dd_adr16_ipm(); +void sub_l_dd_adr32_ipm(); +void suba_l_ds_ad_ipm(); +void suba_l_as_ad_ipm(); +void suba_l_ais_ad_ipm(); +void suba_l_aips_ad_ipm(); +void suba_l_pais_ad_ipm(); +void suba_l_das_ad_ipm(); +void suba_l_dais_ad_ipm(); +void suba_l_adr16_ad_ipm(); +void suba_l_adr32_ad_ipm(); +void suba_l_dpc_ad_ipm(); +void suba_l_dpci_ad_ipm(); +void suba_l_imm32_ad_ipm(); +void cmp_b_ds_dd_ipm(); +void cmp_b_ais_dd_ipm(); +void cmp_b_aips_dd_ipm(); +void cmp_b_pais_dd_ipm(); +void cmp_b_das_dd_ipm(); +void cmp_b_dais_dd_ipm(); +void cmp_b_adr16_dd_ipm(); +void cmp_b_adr32_dd_ipm(); +void cmp_b_dpc_dd_ipm(); +void cmp_b_dpci_dd_ipm(); +void cmp_b_imm8_dd_ipm(); +void cmp_w_ds_dd_ipm(); +void cmp_w_as_dd_ipm(); +void cmp_w_ais_dd_ipm(); +void cmp_w_aips_dd_ipm(); +void cmp_w_pais_dd_ipm(); +void cmp_w_das_dd_ipm(); +void cmp_w_dais_dd_ipm(); +void cmp_w_adr16_dd_ipm(); +void cmp_w_adr32_dd_ipm(); +void cmp_w_dpc_dd_ipm(); +void cmp_w_dpci_dd_ipm(); +void cmp_w_imm16_dd_ipm(); +void cmp_l_ds_dd_ipm(); +void cmp_l_as_dd_ipm(); +void cmp_l_ais_dd_ipm(); +void cmp_l_aips_dd_ipm(); +void cmp_l_pais_dd_ipm(); +void cmp_l_das_dd_ipm(); +void cmp_l_dais_dd_ipm(); +void cmp_l_adr16_dd_ipm(); +void cmp_l_adr32_dd_ipm(); +void cmp_l_dpc_dd_ipm(); +void cmp_l_dpci_dd_ipm(); +void cmp_l_imm32_dd_ipm(); +void cmpa_w_ds_ad_ipm(); +void cmpa_w_as_ad_ipm(); +void cmpa_w_ais_ad_ipm(); +void cmpa_w_aips_ad_ipm(); +void cmpa_w_pais_ad_ipm(); +void cmpa_w_das_ad_ipm(); +void cmpa_w_dais_ad_ipm(); +void cmpa_w_adr16_ad_ipm(); +void cmpa_w_adr32_ad_ipm(); +void cmpa_w_dpc_ad_ipm(); +void cmpa_w_dpci_ad_ipm(); +void cmpa_w_imm16_ad_ipm(); +void eor_b_dd_ds_ipm(); +void cmpm_b_aips_aipd_ipm(); +void eor_b_dd_ais_ipm(); +void eor_b_dd_aips_ipm(); +void eor_b_dd_pais_ipm(); +void eor_b_dd_das_ipm(); +void eor_b_dd_dais_ipm(); +void eor_b_dd_adr16_ipm(); +void eor_b_dd_adr32_ipm(); +void eor_w_dd_ds_ipm(); +void cmpm_w_aips_aipd_ipm(); +void eor_w_dd_ais_ipm(); +void eor_w_dd_aips_ipm(); +void eor_w_dd_pais_ipm(); +void eor_w_dd_das_ipm(); +void eor_w_dd_dais_ipm(); +void eor_w_dd_adr16_ipm(); +void eor_w_dd_adr32_ipm(); +void eor_l_dd_ds_ipm(); +void cmpm_l_aips_aipd_ipm(); +void eor_l_dd_ais_ipm(); +void eor_l_dd_aips_ipm(); +void eor_l_dd_pais_ipm(); +void eor_l_dd_das_ipm(); +void eor_l_dd_dais_ipm(); +void eor_l_dd_adr16_ipm(); +void eor_l_dd_adr32_ipm(); +void cmpa_l_ds_ad_ipm(); +void cmpa_l_as_ad_ipm(); +void cmpa_l_ais_ad_ipm(); +void cmpa_l_aips_ad_ipm(); +void cmpa_l_pais_ad_ipm(); +void cmpa_l_das_ad_ipm(); +void cmpa_l_dais_ad_ipm(); +void cmpa_l_adr16_ad_ipm(); +void cmpa_l_adr32_ad_ipm(); +void cmpa_l_dpc_ad_ipm(); +void cmpa_l_dpci_ad_ipm(); +void cmpa_l_imm32_ad_ipm(); +void and_b_ds_dd_ipm(); +void and_b_ais_dd_ipm(); +void and_b_aips_dd_ipm(); +void and_b_pais_dd_ipm(); +void and_b_das_dd_ipm(); +void and_b_dais_dd_ipm(); +void and_b_adr16_dd_ipm(); +void and_b_adr32_dd_ipm(); +void and_b_dpc_dd_ipm(); +void and_b_dpci_dd_ipm(); +void and_b_imm8_dd_ipm(); +void and_w_ds_dd_ipm(); +void and_w_ais_dd_ipm(); +void and_w_aips_dd_ipm(); +void and_w_pais_dd_ipm(); +void and_w_das_dd_ipm(); +void and_w_dais_dd_ipm(); +void and_w_adr16_dd_ipm(); +void and_w_adr32_dd_ipm(); +void and_w_dpc_dd_ipm(); +void and_w_dpci_dd_ipm(); +void and_w_imm16_dd_ipm(); +void and_l_ds_dd_ipm(); +void and_l_ais_dd_ipm(); +void and_l_aips_dd_ipm(); +void and_l_pais_dd_ipm(); +void and_l_das_dd_ipm(); +void and_l_dais_dd_ipm(); +void and_l_adr16_dd_ipm(); +void and_l_adr32_dd_ipm(); +void and_l_dpc_dd_ipm(); +void and_l_dpci_dd_ipm(); +void and_l_imm32_dd_ipm(); +void mulu_w_ds_dd_ipm(); +void mulu_w_ais_dd_ipm(); +void mulu_w_aips_dd_ipm(); +void mulu_w_pais_dd_ipm(); +void mulu_w_das_dd_ipm(); +void mulu_w_dais_dd_ipm(); +void mulu_w_adr16_dd_ipm(); +void mulu_w_adr32_dd_ipm(); +void mulu_w_dpc_dd_ipm(); +void mulu_w_dpci_dd_ipm(); +void mulu_w_imm16_dd_ipm(); +void abcd_ds_dd_ipm(); +void abcd_pais_paid_ipm(); +void and_b_dd_ais_ipm(); +void and_b_dd_aips_ipm(); +void and_b_dd_pais_ipm(); +void and_b_dd_das_ipm(); +void and_b_dd_dais_ipm(); +void and_b_dd_adr16_ipm(); +void and_b_dd_adr32_ipm(); +void exg_dd_ds_ipm(); +void exg_ad_as_ipm(); +void and_w_dd_ais_ipm(); +void and_w_dd_aips_ipm(); +void and_w_dd_pais_ipm(); +void and_w_dd_das_ipm(); +void and_w_dd_dais_ipm(); +void and_w_dd_adr16_ipm(); +void and_w_dd_adr32_ipm(); +void exg_dd_as_ipm(); +void and_l_dd_ais_ipm(); +void and_l_dd_aips_ipm(); +void and_l_dd_pais_ipm(); +void and_l_dd_das_ipm(); +void and_l_dd_dais_ipm(); +void and_l_dd_adr16_ipm(); +void and_l_dd_adr32_ipm(); +void muls_w_ds_dd_ipm(); +void muls_w_ais_dd_ipm(); +void muls_w_aips_dd_ipm(); +void muls_w_pais_dd_ipm(); +void muls_w_das_dd_ipm(); +void muls_w_dais_dd_ipm(); +void muls_w_adr16_dd_ipm(); +void muls_w_adr32_dd_ipm(); +void muls_w_dpc_dd_ipm(); +void muls_w_dpci_dd_ipm(); +void muls_w_imm16_dd_ipm(); +void add_b_ds_dd_ipm(); +void add_b_ais_dd_ipm(); +void add_b_aips_dd_ipm(); +void add_b_pais_dd_ipm(); +void add_b_das_dd_ipm(); +void add_b_dais_dd_ipm(); +void add_b_adr16_dd_ipm(); +void add_b_adr32_dd_ipm(); +void add_b_dpc_dd_ipm(); +void add_b_dpci_dd_ipm(); +void add_b_imm8_dd_ipm(); +void add_w_ds_dd_ipm(); +void add_w_as_dd_ipm(); +void add_w_ais_dd_ipm(); +void add_w_aips_dd_ipm(); +void add_w_pais_dd_ipm(); +void add_w_das_dd_ipm(); +void add_w_dais_dd_ipm(); +void add_w_adr16_dd_ipm(); +void add_w_adr32_dd_ipm(); +void add_w_dpc_dd_ipm(); +void add_w_dpci_dd_ipm(); +void add_w_imm16_dd_ipm(); +void add_l_ds_dd_ipm(); +void add_l_as_dd_ipm(); +void add_l_ais_dd_ipm(); +void add_l_aips_dd_ipm(); +void add_l_pais_dd_ipm(); +void add_l_das_dd_ipm(); +void add_l_dais_dd_ipm(); +void add_l_adr16_dd_ipm(); +void add_l_adr32_dd_ipm(); +void add_l_dpc_dd_ipm(); +void add_l_dpci_dd_ipm(); +void add_l_imm32_dd_ipm(); +void adda_w_ds_ad_ipm(); +void adda_w_as_ad_ipm(); +void adda_w_ais_ad_ipm(); +void adda_w_aips_ad_ipm(); +void adda_w_pais_ad_ipm(); +void adda_w_das_ad_ipm(); +void adda_w_dais_ad_ipm(); +void adda_w_adr16_ad_ipm(); +void adda_w_adr32_ad_ipm(); +void adda_w_dpc_ad_ipm(); +void adda_w_dpci_ad_ipm(); +void adda_w_imm16_ad_ipm(); +void addx_b_ds_dd_ipm(); +void addx_b_pais_paid_ipm(); +void add_b_dd_ais_ipm(); +void add_b_dd_aips_ipm(); +void add_b_dd_pais_ipm(); +void add_b_dd_das_ipm(); +void add_b_dd_dais_ipm(); +void add_b_dd_adr16_ipm(); +void add_b_dd_adr32_ipm(); +void addx_w_ds_dd_ipm(); +void addx_w_pais_paid_ipm(); +void add_w_dd_ais_ipm(); +void add_w_dd_aips_ipm(); +void add_w_dd_pais_ipm(); +void add_w_dd_das_ipm(); +void add_w_dd_dais_ipm(); +void add_w_dd_adr16_ipm(); +void add_w_dd_adr32_ipm(); +void addx_l_ds_dd_ipm(); +void addx_l_pais_paid_ipm(); +void add_l_dd_ais_ipm(); +void add_l_dd_aips_ipm(); +void add_l_dd_pais_ipm(); +void add_l_dd_das_ipm(); +void add_l_dd_dais_ipm(); +void add_l_dd_adr16_ipm(); +void add_l_dd_adr32_ipm(); +void adda_l_ds_ad_ipm(); +void adda_l_as_ad_ipm(); +void adda_l_ais_ad_ipm(); +void adda_l_aips_ad_ipm(); +void adda_l_pais_ad_ipm(); +void adda_l_das_ad_ipm(); +void adda_l_dais_ad_ipm(); +void adda_l_adr16_ad_ipm(); +void adda_l_adr32_ad_ipm(); +void adda_l_dpc_ad_ipm(); +void adda_l_dpci_ad_ipm(); +void adda_l_imm32_ad_ipm(); +void asr_b_imm3_ds_ipm(); +void lsr_b_imm3_ds_ipm(); +void roxr_b_imm3_ds_ipm(); +void ror_b_imm3_ds_ipm(); +void asr_b_dd_ds_ipm(); +void lsr_b_dd_ds_ipm(); +void roxr_b_dd_ds_ipm(); +void ror_b_dd_ds_ipm(); +void asr_w_imm3_ds_ipm(); +void lsr_w_imm3_ds_ipm(); +void roxr_w_imm3_ds_ipm(); +void ror_w_imm3_ds_ipm(); +void asr_w_dd_ds_ipm(); +void lsr_w_dd_ds_ipm(); +void roxr_w_dd_ds_ipm(); +void ror_w_dd_ds_ipm(); +void asr_l_imm3_ds_ipm(); +void lsr_l_imm3_ds_ipm(); +void roxr_l_imm3_ds_ipm(); +void ror_l_imm3_ds_ipm(); +void asr_l_dd_ds_ipm(); +void lsr_l_dd_ds_ipm(); +void roxr_l_dd_ds_ipm(); +void ror_l_dd_ds_ipm(); +void asr_ais_ipm(); +void asr_aips_ipm(); +void asr_pais_ipm(); +void asr_das_ipm(); +void asr_dais_ipm(); +void asr_adr16_ipm(); +void asr_adr32_ipm(); +void asl_b_imm3_ds_ipm(); +void lsl_b_imm3_ds_ipm(); +void roxl_b_imm3_ds_ipm(); +void rol_b_imm3_ds_ipm(); +void asl_b_dd_ds_ipm(); +void lsl_b_dd_ds_ipm(); +void roxl_b_dd_ds_ipm(); +void rol_b_dd_ds_ipm(); +void asl_w_imm3_ds_ipm(); +void lsl_w_imm3_ds_ipm(); +void roxl_w_imm3_ds_ipm(); +void rol_w_imm3_ds_ipm(); +void asl_w_dd_ds_ipm(); +void lsl_w_dd_ds_ipm(); +void roxl_w_dd_ds_ipm(); +void rol_w_dd_ds_ipm(); +void asl_l_imm3_ds_ipm(); +void lsl_l_imm3_ds_ipm(); +void roxl_l_imm3_ds_ipm(); +void rol_l_imm3_ds_ipm(); +void asl_l_dd_ds_ipm(); +void lsl_l_dd_ds_ipm(); +void roxl_l_dd_ds_ipm(); +void rol_l_dd_ds_ipm(); +void asl_ais_ipm(); +void asl_aips_ipm(); +void asl_pais_ipm(); +void asl_das_ipm(); +void asl_dais_ipm(); +void asl_adr16_ipm(); +void asl_adr32_ipm(); +void lsr_ais_ipm(); +void lsr_aips_ipm(); +void lsr_pais_ipm(); +void lsr_das_ipm(); +void lsr_dais_ipm(); +void lsr_adr16_ipm(); +void lsr_adr32_ipm(); +void lsl_ais_ipm(); +void lsl_aips_ipm(); +void lsl_pais_ipm(); +void lsl_das_ipm(); +void lsl_dais_ipm(); +void lsl_adr16_ipm(); +void lsl_adr32_ipm(); +void roxr_ais_ipm(); +void roxr_aips_ipm(); +void roxr_pais_ipm(); +void roxr_das_ipm(); +void roxr_dais_ipm(); +void roxr_adr16_ipm(); +void roxr_adr32_ipm(); +void roxl_ais_ipm(); +void roxl_aips_ipm(); +void roxl_pais_ipm(); +void roxl_das_ipm(); +void roxl_dais_ipm(); +void roxl_adr16_ipm(); +void roxl_adr32_ipm(); +void ror_ais_ipm(); +void ror_aips_ipm(); +void ror_pais_ipm(); +void ror_das_ipm(); +void ror_dais_ipm(); +void ror_adr16_ipm(); +void ror_adr32_ipm(); +void rol_ais_ipm(); +void rol_aips_ipm(); +void rol_pais_ipm(); +void rol_das_ipm(); +void rol_dais_ipm(); +void rol_adr16_ipm(); +void rol_adr32_ipm(); diff --git a/src/devices/cpu/m68000/m68000-sdfm.cpp b/src/devices/cpu/m68000/m68000mcu-sdfm.cpp similarity index 96% rename from src/devices/cpu/m68000/m68000-sdfm.cpp rename to src/devices/cpu/m68000/m68000mcu-sdfm.cpp index 93442f4db13..bbdda5edd7e 100644 --- a/src/devices/cpu/m68000/m68000-sdfm.cpp +++ b/src/devices/cpu/m68000/m68000mcu-sdfm.cpp @@ -1,11 +1,11 @@ // Instruction handlers for the m68000 (direct, full, mcu) // -// Generated by m68000gen.py sdfm m68000.lst m68000-sdfm.cpp +// Generated by m68000gen.py sdfm m68000.lst m68000mcu-sdfm.cpp #include "emu.h" -#include "m68000.h" +#include "m68000mcu.h" -void m68000_device::state_reset_dfm() +void m68000_mcu_device::state_reset_dfm() { // 002 rstp3 m_icount -= 2; @@ -172,7 +172,7 @@ void m68000_device::state_reset_dfm() return; } -void m68000_device::state_bus_error_dfm() +void m68000_mcu_device::state_bus_error_dfm() { // 003 bser1 m_ssw = m_base_ssw | (m_sr & SR_S ? SSW_S : 0); @@ -451,7 +451,7 @@ void m68000_device::state_bus_error_dfm() return; } -void m68000_device::state_address_error_dfm() +void m68000_mcu_device::state_address_error_dfm() { // 003 bser1 m_ssw = m_base_ssw | (m_sr & SR_S ? SSW_S : 0); @@ -730,13 +730,13 @@ void m68000_device::state_address_error_dfm() return; } -void m68000_device::state_double_fault_dfm() +void m68000_mcu_device::state_double_fault_dfm() { // 001 halt1 m_icount = m_bcount; } -void m68000_device::state_interrupt_dfm() +void m68000_mcu_device::state_interrupt_dfm() { // 1c4 itlx1 m_ftu = m_sr; @@ -956,7 +956,7 @@ void m68000_device::state_interrupt_dfm() return; } -void m68000_device::state_trace_dfm() +void m68000_mcu_device::state_trace_dfm() { // 1c0 trac1 m_ftu = m_sr; @@ -1140,7 +1140,7 @@ void m68000_device::state_trace_dfm() return; } -void m68000_device::state_illegal_dfm() +void m68000_mcu_device::state_illegal_dfm() { // 1c0 trac1 m_ftu = m_sr; @@ -1324,7 +1324,7 @@ void m68000_device::state_illegal_dfm() return; } -void m68000_device::state_priviledge_dfm() +void m68000_mcu_device::state_priviledge_dfm() { // 1c0 trac1 m_ftu = m_sr; @@ -1508,7 +1508,7 @@ void m68000_device::state_priviledge_dfm() return; } -void m68000_device::state_linea_dfm() +void m68000_mcu_device::state_linea_dfm() { // 1c0 trac1 m_ftu = m_sr; @@ -1692,7 +1692,7 @@ void m68000_device::state_linea_dfm() return; } -void m68000_device::state_linef_dfm() +void m68000_mcu_device::state_linef_dfm() { // 1c0 trac1 m_ftu = m_sr; @@ -1876,7 +1876,7 @@ void m68000_device::state_linef_dfm() return; } -void m68000_device::ori_b_imm8_ds_dfm() // 0000 fff8 +void m68000_mcu_device::ori_b_imm8_ds_dfm() // 0000 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -1941,7 +1941,7 @@ void m68000_device::ori_b_imm8_ds_dfm() // 0000 fff8 return; } -void m68000_device::ori_b_imm8_ais_dfm() // 0010 fff8 +void m68000_mcu_device::ori_b_imm8_ais_dfm() // 0010 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -2041,7 +2041,7 @@ void m68000_device::ori_b_imm8_ais_dfm() // 0010 fff8 return; } -void m68000_device::ori_b_imm8_aips_dfm() // 0018 fff8 +void m68000_mcu_device::ori_b_imm8_aips_dfm() // 0018 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -2146,7 +2146,7 @@ void m68000_device::ori_b_imm8_aips_dfm() // 0018 fff8 return; } -void m68000_device::ori_b_imm8_pais_dfm() // 0020 fff8 +void m68000_mcu_device::ori_b_imm8_pais_dfm() // 0020 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -2253,7 +2253,7 @@ void m68000_device::ori_b_imm8_pais_dfm() // 0020 fff8 return; } -void m68000_device::ori_b_imm8_das_dfm() // 0028 fff8 +void m68000_mcu_device::ori_b_imm8_das_dfm() // 0028 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -2376,7 +2376,7 @@ void m68000_device::ori_b_imm8_das_dfm() // 0028 fff8 return; } -void m68000_device::ori_b_imm8_dais_dfm() // 0030 fff8 +void m68000_mcu_device::ori_b_imm8_dais_dfm() // 0030 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -2539,7 +2539,7 @@ adsw2: return; } -void m68000_device::ori_b_imm8_adr16_dfm() // 0038 ffff +void m68000_mcu_device::ori_b_imm8_adr16_dfm() // 0038 ffff { // 2b9 o#w1 m_aob = m_au; @@ -2661,7 +2661,7 @@ void m68000_device::ori_b_imm8_adr16_dfm() // 0038 ffff return; } -void m68000_device::ori_b_imm8_adr32_dfm() // 0039 ffff +void m68000_mcu_device::ori_b_imm8_adr32_dfm() // 0039 ffff { // 2b9 o#w1 m_aob = m_au; @@ -2805,7 +2805,7 @@ void m68000_device::ori_b_imm8_adr32_dfm() // 0039 ffff return; } -void m68000_device::ori_imm8_ccr_dfm() // 003c ffff +void m68000_mcu_device::ori_imm8_ccr_dfm() // 003c ffff { // 2b9 o#w1 m_aob = m_au; @@ -2910,7 +2910,7 @@ void m68000_device::ori_imm8_ccr_dfm() // 003c ffff return; } -void m68000_device::ori_w_imm16_ds_dfm() // 0040 fff8 +void m68000_mcu_device::ori_w_imm16_ds_dfm() // 0040 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -2975,7 +2975,7 @@ void m68000_device::ori_w_imm16_ds_dfm() // 0040 fff8 return; } -void m68000_device::ori_w_imm16_ais_dfm() // 0050 fff8 +void m68000_mcu_device::ori_w_imm16_ais_dfm() // 0050 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -3083,7 +3083,7 @@ void m68000_device::ori_w_imm16_ais_dfm() // 0050 fff8 return; } -void m68000_device::ori_w_imm16_aips_dfm() // 0058 fff8 +void m68000_mcu_device::ori_w_imm16_aips_dfm() // 0058 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -3196,7 +3196,7 @@ void m68000_device::ori_w_imm16_aips_dfm() // 0058 fff8 return; } -void m68000_device::ori_w_imm16_pais_dfm() // 0060 fff8 +void m68000_mcu_device::ori_w_imm16_pais_dfm() // 0060 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -3311,7 +3311,7 @@ void m68000_device::ori_w_imm16_pais_dfm() // 0060 fff8 return; } -void m68000_device::ori_w_imm16_das_dfm() // 0068 fff8 +void m68000_mcu_device::ori_w_imm16_das_dfm() // 0068 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -3442,7 +3442,7 @@ void m68000_device::ori_w_imm16_das_dfm() // 0068 fff8 return; } -void m68000_device::ori_w_imm16_dais_dfm() // 0070 fff8 +void m68000_mcu_device::ori_w_imm16_dais_dfm() // 0070 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -3613,7 +3613,7 @@ adsw2: return; } -void m68000_device::ori_w_imm16_adr16_dfm() // 0078 ffff +void m68000_mcu_device::ori_w_imm16_adr16_dfm() // 0078 ffff { // 2b9 o#w1 m_aob = m_au; @@ -3743,7 +3743,7 @@ void m68000_device::ori_w_imm16_adr16_dfm() // 0078 ffff return; } -void m68000_device::ori_w_imm16_adr32_dfm() // 0079 ffff +void m68000_mcu_device::ori_w_imm16_adr32_dfm() // 0079 ffff { // 2b9 o#w1 m_aob = m_au; @@ -3895,7 +3895,7 @@ void m68000_device::ori_w_imm16_adr32_dfm() // 0079 ffff return; } -void m68000_device::ori_i16u_sr_dfm() // 007c ffff +void m68000_mcu_device::ori_i16u_sr_dfm() // 007c ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -4006,7 +4006,7 @@ void m68000_device::ori_i16u_sr_dfm() // 007c ffff return; } -void m68000_device::ori_l_imm32_ds_dfm() // 0080 fff8 +void m68000_mcu_device::ori_l_imm32_ds_dfm() // 0080 fff8 { int ry = m_irdi & 7; // 3e0 o#l1 @@ -4102,7 +4102,7 @@ void m68000_device::ori_l_imm32_ds_dfm() // 0080 fff8 return; } -void m68000_device::ori_l_imm32_ais_dfm() // 0090 fff8 +void m68000_mcu_device::ori_l_imm32_ais_dfm() // 0090 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -4276,7 +4276,7 @@ void m68000_device::ori_l_imm32_ais_dfm() // 0090 fff8 return; } -void m68000_device::ori_l_imm32_aips_dfm() // 0098 fff8 +void m68000_mcu_device::ori_l_imm32_aips_dfm() // 0098 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -4454,7 +4454,7 @@ void m68000_device::ori_l_imm32_aips_dfm() // 0098 fff8 return; } -void m68000_device::ori_l_imm32_pais_dfm() // 00a0 fff8 +void m68000_mcu_device::ori_l_imm32_pais_dfm() // 00a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -4633,7 +4633,7 @@ void m68000_device::ori_l_imm32_pais_dfm() // 00a0 fff8 return; } -void m68000_device::ori_l_imm32_das_dfm() // 00a8 fff8 +void m68000_mcu_device::ori_l_imm32_das_dfm() // 00a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -4829,7 +4829,7 @@ void m68000_device::ori_l_imm32_das_dfm() // 00a8 fff8 return; } -void m68000_device::ori_l_imm32_dais_dfm() // 00b0 fff8 +void m68000_mcu_device::ori_l_imm32_dais_dfm() // 00b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -5065,7 +5065,7 @@ adsl2: return; } -void m68000_device::ori_l_imm32_adr16_dfm() // 00b8 ffff +void m68000_mcu_device::ori_l_imm32_adr16_dfm() // 00b8 ffff { // 3e0 o#l1 m_aob = m_au; @@ -5264,7 +5264,7 @@ void m68000_device::ori_l_imm32_adr16_dfm() // 00b8 ffff return; } -void m68000_device::ori_l_imm32_adr32_dfm() // 00b9 ffff +void m68000_mcu_device::ori_l_imm32_adr32_dfm() // 00b9 ffff { // 3e0 o#l1 m_aob = m_au; @@ -5485,7 +5485,7 @@ void m68000_device::ori_l_imm32_adr32_dfm() // 00b9 ffff return; } -void m68000_device::btst_dd_ds_dfm() // 0100 f1f8 +void m68000_mcu_device::btst_dd_ds_dfm() // 0100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -5555,7 +5555,7 @@ btsr3: return; } -void m68000_device::movep_w_das_dd_dfm() // 0108 f1f8 +void m68000_mcu_device::movep_w_das_dd_dfm() // 0108 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -5651,7 +5651,7 @@ void m68000_device::movep_w_das_dd_dfm() // 0108 f1f8 return; } -void m68000_device::btst_dd_ais_dfm() // 0110 f1f8 +void m68000_mcu_device::btst_dd_ais_dfm() // 0110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -5714,7 +5714,7 @@ void m68000_device::btst_dd_ais_dfm() // 0110 f1f8 return; } -void m68000_device::btst_dd_aips_dfm() // 0118 f1f8 +void m68000_mcu_device::btst_dd_aips_dfm() // 0118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -5782,7 +5782,7 @@ void m68000_device::btst_dd_aips_dfm() // 0118 f1f8 return; } -void m68000_device::btst_dd_pais_dfm() // 0120 f1f8 +void m68000_mcu_device::btst_dd_pais_dfm() // 0120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -5852,7 +5852,7 @@ void m68000_device::btst_dd_pais_dfm() // 0120 f1f8 return; } -void m68000_device::btst_dd_das_dfm() // 0128 f1f8 +void m68000_mcu_device::btst_dd_das_dfm() // 0128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -5938,7 +5938,7 @@ void m68000_device::btst_dd_das_dfm() // 0128 f1f8 return; } -void m68000_device::btst_dd_dais_dfm() // 0130 f1f8 +void m68000_mcu_device::btst_dd_dais_dfm() // 0130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6064,7 +6064,7 @@ adsw2: return; } -void m68000_device::btst_dd_adr16_dfm() // 0138 f1ff +void m68000_mcu_device::btst_dd_adr16_dfm() // 0138 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -6149,7 +6149,7 @@ void m68000_device::btst_dd_adr16_dfm() // 0138 f1ff return; } -void m68000_device::btst_dd_adr32_dfm() // 0139 f1ff +void m68000_mcu_device::btst_dd_adr32_dfm() // 0139 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -6256,7 +6256,7 @@ void m68000_device::btst_dd_adr32_dfm() // 0139 f1ff return; } -void m68000_device::btst_dd_dpc_dfm() // 013a f1ff +void m68000_mcu_device::btst_dd_dpc_dfm() // 013a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -6341,7 +6341,7 @@ void m68000_device::btst_dd_dpc_dfm() // 013a f1ff return; } -void m68000_device::btst_dd_dpci_dfm() // 013b f1ff +void m68000_mcu_device::btst_dd_dpci_dfm() // 013b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -6466,7 +6466,7 @@ adsw2: return; } -void m68000_device::btst_dd_imm_dfm() // 013c f1ff +void m68000_mcu_device::btst_dd_imm_dfm() // 013c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -6558,7 +6558,7 @@ btsr3: return; } -void m68000_device::bchg_dd_ds_dfm() // 0140 f1f8 +void m68000_mcu_device::bchg_dd_ds_dfm() // 0140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -6634,7 +6634,7 @@ bcsr3: return; } -void m68000_device::movep_l_das_dd_dfm() // 0148 f1f8 +void m68000_mcu_device::movep_l_das_dd_dfm() // 0148 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6767,7 +6767,7 @@ void m68000_device::movep_l_das_dd_dfm() // 0148 f1f8 return; } -void m68000_device::bchg_dd_ais_dfm() // 0150 f1f8 +void m68000_mcu_device::bchg_dd_ais_dfm() // 0150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6845,7 +6845,7 @@ void m68000_device::bchg_dd_ais_dfm() // 0150 f1f8 return; } -void m68000_device::bchg_dd_aips_dfm() // 0158 f1f8 +void m68000_mcu_device::bchg_dd_aips_dfm() // 0158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6928,7 +6928,7 @@ void m68000_device::bchg_dd_aips_dfm() // 0158 f1f8 return; } -void m68000_device::bchg_dd_pais_dfm() // 0160 f1f8 +void m68000_mcu_device::bchg_dd_pais_dfm() // 0160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7013,7 +7013,7 @@ void m68000_device::bchg_dd_pais_dfm() // 0160 f1f8 return; } -void m68000_device::bchg_dd_das_dfm() // 0168 f1f8 +void m68000_mcu_device::bchg_dd_das_dfm() // 0168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7114,7 +7114,7 @@ void m68000_device::bchg_dd_das_dfm() // 0168 f1f8 return; } -void m68000_device::bchg_dd_dais_dfm() // 0170 f1f8 +void m68000_mcu_device::bchg_dd_dais_dfm() // 0170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7255,7 +7255,7 @@ adsw2: return; } -void m68000_device::bchg_dd_adr16_dfm() // 0178 f1ff +void m68000_mcu_device::bchg_dd_adr16_dfm() // 0178 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -7355,7 +7355,7 @@ void m68000_device::bchg_dd_adr16_dfm() // 0178 f1ff return; } -void m68000_device::bchg_dd_adr32_dfm() // 0179 f1ff +void m68000_mcu_device::bchg_dd_adr32_dfm() // 0179 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -7477,7 +7477,7 @@ void m68000_device::bchg_dd_adr32_dfm() // 0179 f1ff return; } -void m68000_device::bclr_dd_ds_dfm() // 0180 f1f8 +void m68000_mcu_device::bclr_dd_ds_dfm() // 0180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -7561,7 +7561,7 @@ bclr3: return; } -void m68000_device::movep_w_dd_das_dfm() // 0188 f1f8 +void m68000_mcu_device::movep_w_dd_das_dfm() // 0188 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7655,7 +7655,7 @@ void m68000_device::movep_w_dd_das_dfm() // 0188 f1f8 return; } -void m68000_device::bclr_dd_ais_dfm() // 0190 f1f8 +void m68000_mcu_device::bclr_dd_ais_dfm() // 0190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7737,7 +7737,7 @@ void m68000_device::bclr_dd_ais_dfm() // 0190 f1f8 return; } -void m68000_device::bclr_dd_aips_dfm() // 0198 f1f8 +void m68000_mcu_device::bclr_dd_aips_dfm() // 0198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7824,7 +7824,7 @@ void m68000_device::bclr_dd_aips_dfm() // 0198 f1f8 return; } -void m68000_device::bclr_dd_pais_dfm() // 01a0 f1f8 +void m68000_mcu_device::bclr_dd_pais_dfm() // 01a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7913,7 +7913,7 @@ void m68000_device::bclr_dd_pais_dfm() // 01a0 f1f8 return; } -void m68000_device::bclr_dd_das_dfm() // 01a8 f1f8 +void m68000_mcu_device::bclr_dd_das_dfm() // 01a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8018,7 +8018,7 @@ void m68000_device::bclr_dd_das_dfm() // 01a8 f1f8 return; } -void m68000_device::bclr_dd_dais_dfm() // 01b0 f1f8 +void m68000_mcu_device::bclr_dd_dais_dfm() // 01b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8163,7 +8163,7 @@ adsw2: return; } -void m68000_device::bclr_dd_adr16_dfm() // 01b8 f1ff +void m68000_mcu_device::bclr_dd_adr16_dfm() // 01b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -8267,7 +8267,7 @@ void m68000_device::bclr_dd_adr16_dfm() // 01b8 f1ff return; } -void m68000_device::bclr_dd_adr32_dfm() // 01b9 f1ff +void m68000_mcu_device::bclr_dd_adr32_dfm() // 01b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -8393,7 +8393,7 @@ void m68000_device::bclr_dd_adr32_dfm() // 01b9 f1ff return; } -void m68000_device::bset_dd_ds_dfm() // 01c0 f1f8 +void m68000_mcu_device::bset_dd_ds_dfm() // 01c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -8469,7 +8469,7 @@ bcsr3: return; } -void m68000_device::movep_l_dd_das_dfm() // 01c8 f1f8 +void m68000_mcu_device::movep_l_dd_das_dfm() // 01c8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8595,7 +8595,7 @@ void m68000_device::movep_l_dd_das_dfm() // 01c8 f1f8 return; } -void m68000_device::bset_dd_ais_dfm() // 01d0 f1f8 +void m68000_mcu_device::bset_dd_ais_dfm() // 01d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8673,7 +8673,7 @@ void m68000_device::bset_dd_ais_dfm() // 01d0 f1f8 return; } -void m68000_device::bset_dd_aips_dfm() // 01d8 f1f8 +void m68000_mcu_device::bset_dd_aips_dfm() // 01d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8756,7 +8756,7 @@ void m68000_device::bset_dd_aips_dfm() // 01d8 f1f8 return; } -void m68000_device::bset_dd_pais_dfm() // 01e0 f1f8 +void m68000_mcu_device::bset_dd_pais_dfm() // 01e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8841,7 +8841,7 @@ void m68000_device::bset_dd_pais_dfm() // 01e0 f1f8 return; } -void m68000_device::bset_dd_das_dfm() // 01e8 f1f8 +void m68000_mcu_device::bset_dd_das_dfm() // 01e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8942,7 +8942,7 @@ void m68000_device::bset_dd_das_dfm() // 01e8 f1f8 return; } -void m68000_device::bset_dd_dais_dfm() // 01f0 f1f8 +void m68000_mcu_device::bset_dd_dais_dfm() // 01f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -9083,7 +9083,7 @@ adsw2: return; } -void m68000_device::bset_dd_adr16_dfm() // 01f8 f1ff +void m68000_mcu_device::bset_dd_adr16_dfm() // 01f8 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -9183,7 +9183,7 @@ void m68000_device::bset_dd_adr16_dfm() // 01f8 f1ff return; } -void m68000_device::bset_dd_adr32_dfm() // 01f9 f1ff +void m68000_mcu_device::bset_dd_adr32_dfm() // 01f9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -9305,7 +9305,7 @@ void m68000_device::bset_dd_adr32_dfm() // 01f9 f1ff return; } -void m68000_device::andi_b_imm8_ds_dfm() // 0200 fff8 +void m68000_mcu_device::andi_b_imm8_ds_dfm() // 0200 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -9370,7 +9370,7 @@ void m68000_device::andi_b_imm8_ds_dfm() // 0200 fff8 return; } -void m68000_device::andi_b_imm8_ais_dfm() // 0210 fff8 +void m68000_mcu_device::andi_b_imm8_ais_dfm() // 0210 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -9470,7 +9470,7 @@ void m68000_device::andi_b_imm8_ais_dfm() // 0210 fff8 return; } -void m68000_device::andi_b_imm8_aips_dfm() // 0218 fff8 +void m68000_mcu_device::andi_b_imm8_aips_dfm() // 0218 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -9575,7 +9575,7 @@ void m68000_device::andi_b_imm8_aips_dfm() // 0218 fff8 return; } -void m68000_device::andi_b_imm8_pais_dfm() // 0220 fff8 +void m68000_mcu_device::andi_b_imm8_pais_dfm() // 0220 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -9682,7 +9682,7 @@ void m68000_device::andi_b_imm8_pais_dfm() // 0220 fff8 return; } -void m68000_device::andi_b_imm8_das_dfm() // 0228 fff8 +void m68000_mcu_device::andi_b_imm8_das_dfm() // 0228 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -9805,7 +9805,7 @@ void m68000_device::andi_b_imm8_das_dfm() // 0228 fff8 return; } -void m68000_device::andi_b_imm8_dais_dfm() // 0230 fff8 +void m68000_mcu_device::andi_b_imm8_dais_dfm() // 0230 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -9968,7 +9968,7 @@ adsw2: return; } -void m68000_device::andi_b_imm8_adr16_dfm() // 0238 ffff +void m68000_mcu_device::andi_b_imm8_adr16_dfm() // 0238 ffff { // 2b9 o#w1 m_aob = m_au; @@ -10090,7 +10090,7 @@ void m68000_device::andi_b_imm8_adr16_dfm() // 0238 ffff return; } -void m68000_device::andi_b_imm8_adr32_dfm() // 0239 ffff +void m68000_mcu_device::andi_b_imm8_adr32_dfm() // 0239 ffff { // 2b9 o#w1 m_aob = m_au; @@ -10234,7 +10234,7 @@ void m68000_device::andi_b_imm8_adr32_dfm() // 0239 ffff return; } -void m68000_device::andi_imm8_ccr_dfm() // 023c ffff +void m68000_mcu_device::andi_imm8_ccr_dfm() // 023c ffff { // 2b9 o#w1 m_aob = m_au; @@ -10339,7 +10339,7 @@ void m68000_device::andi_imm8_ccr_dfm() // 023c ffff return; } -void m68000_device::andi_w_imm16_ds_dfm() // 0240 fff8 +void m68000_mcu_device::andi_w_imm16_ds_dfm() // 0240 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -10404,7 +10404,7 @@ void m68000_device::andi_w_imm16_ds_dfm() // 0240 fff8 return; } -void m68000_device::andi_w_imm16_ais_dfm() // 0250 fff8 +void m68000_mcu_device::andi_w_imm16_ais_dfm() // 0250 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -10512,7 +10512,7 @@ void m68000_device::andi_w_imm16_ais_dfm() // 0250 fff8 return; } -void m68000_device::andi_w_imm16_aips_dfm() // 0258 fff8 +void m68000_mcu_device::andi_w_imm16_aips_dfm() // 0258 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -10625,7 +10625,7 @@ void m68000_device::andi_w_imm16_aips_dfm() // 0258 fff8 return; } -void m68000_device::andi_w_imm16_pais_dfm() // 0260 fff8 +void m68000_mcu_device::andi_w_imm16_pais_dfm() // 0260 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -10740,7 +10740,7 @@ void m68000_device::andi_w_imm16_pais_dfm() // 0260 fff8 return; } -void m68000_device::andi_w_imm16_das_dfm() // 0268 fff8 +void m68000_mcu_device::andi_w_imm16_das_dfm() // 0268 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -10871,7 +10871,7 @@ void m68000_device::andi_w_imm16_das_dfm() // 0268 fff8 return; } -void m68000_device::andi_w_imm16_dais_dfm() // 0270 fff8 +void m68000_mcu_device::andi_w_imm16_dais_dfm() // 0270 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -11042,7 +11042,7 @@ adsw2: return; } -void m68000_device::andi_w_imm16_adr16_dfm() // 0278 ffff +void m68000_mcu_device::andi_w_imm16_adr16_dfm() // 0278 ffff { // 2b9 o#w1 m_aob = m_au; @@ -11172,7 +11172,7 @@ void m68000_device::andi_w_imm16_adr16_dfm() // 0278 ffff return; } -void m68000_device::andi_w_imm16_adr32_dfm() // 0279 ffff +void m68000_mcu_device::andi_w_imm16_adr32_dfm() // 0279 ffff { // 2b9 o#w1 m_aob = m_au; @@ -11324,7 +11324,7 @@ void m68000_device::andi_w_imm16_adr32_dfm() // 0279 ffff return; } -void m68000_device::andi_i16u_sr_dfm() // 027c ffff +void m68000_mcu_device::andi_i16u_sr_dfm() // 027c ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -11435,7 +11435,7 @@ void m68000_device::andi_i16u_sr_dfm() // 027c ffff return; } -void m68000_device::andi_l_imm32_ds_dfm() // 0280 fff8 +void m68000_mcu_device::andi_l_imm32_ds_dfm() // 0280 fff8 { int ry = m_irdi & 7; // 3e0 o#l1 @@ -11531,7 +11531,7 @@ void m68000_device::andi_l_imm32_ds_dfm() // 0280 fff8 return; } -void m68000_device::andi_l_imm32_ais_dfm() // 0290 fff8 +void m68000_mcu_device::andi_l_imm32_ais_dfm() // 0290 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -11705,7 +11705,7 @@ void m68000_device::andi_l_imm32_ais_dfm() // 0290 fff8 return; } -void m68000_device::andi_l_imm32_aips_dfm() // 0298 fff8 +void m68000_mcu_device::andi_l_imm32_aips_dfm() // 0298 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -11883,7 +11883,7 @@ void m68000_device::andi_l_imm32_aips_dfm() // 0298 fff8 return; } -void m68000_device::andi_l_imm32_pais_dfm() // 02a0 fff8 +void m68000_mcu_device::andi_l_imm32_pais_dfm() // 02a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -12062,7 +12062,7 @@ void m68000_device::andi_l_imm32_pais_dfm() // 02a0 fff8 return; } -void m68000_device::andi_l_imm32_das_dfm() // 02a8 fff8 +void m68000_mcu_device::andi_l_imm32_das_dfm() // 02a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -12258,7 +12258,7 @@ void m68000_device::andi_l_imm32_das_dfm() // 02a8 fff8 return; } -void m68000_device::andi_l_imm32_dais_dfm() // 02b0 fff8 +void m68000_mcu_device::andi_l_imm32_dais_dfm() // 02b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -12494,7 +12494,7 @@ adsl2: return; } -void m68000_device::andi_l_imm32_adr16_dfm() // 02b8 ffff +void m68000_mcu_device::andi_l_imm32_adr16_dfm() // 02b8 ffff { // 3e0 o#l1 m_aob = m_au; @@ -12693,7 +12693,7 @@ void m68000_device::andi_l_imm32_adr16_dfm() // 02b8 ffff return; } -void m68000_device::andi_l_imm32_adr32_dfm() // 02b9 ffff +void m68000_mcu_device::andi_l_imm32_adr32_dfm() // 02b9 ffff { // 3e0 o#l1 m_aob = m_au; @@ -12914,7 +12914,7 @@ void m68000_device::andi_l_imm32_adr32_dfm() // 02b9 ffff return; } -void m68000_device::subi_b_imm8_ds_dfm() // 0400 fff8 +void m68000_mcu_device::subi_b_imm8_ds_dfm() // 0400 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -12977,7 +12977,7 @@ void m68000_device::subi_b_imm8_ds_dfm() // 0400 fff8 return; } -void m68000_device::subi_b_imm8_ais_dfm() // 0410 fff8 +void m68000_mcu_device::subi_b_imm8_ais_dfm() // 0410 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -13074,7 +13074,7 @@ void m68000_device::subi_b_imm8_ais_dfm() // 0410 fff8 return; } -void m68000_device::subi_b_imm8_aips_dfm() // 0418 fff8 +void m68000_mcu_device::subi_b_imm8_aips_dfm() // 0418 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -13175,7 +13175,7 @@ void m68000_device::subi_b_imm8_aips_dfm() // 0418 fff8 return; } -void m68000_device::subi_b_imm8_pais_dfm() // 0420 fff8 +void m68000_mcu_device::subi_b_imm8_pais_dfm() // 0420 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -13278,7 +13278,7 @@ void m68000_device::subi_b_imm8_pais_dfm() // 0420 fff8 return; } -void m68000_device::subi_b_imm8_das_dfm() // 0428 fff8 +void m68000_mcu_device::subi_b_imm8_das_dfm() // 0428 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -13397,7 +13397,7 @@ void m68000_device::subi_b_imm8_das_dfm() // 0428 fff8 return; } -void m68000_device::subi_b_imm8_dais_dfm() // 0430 fff8 +void m68000_mcu_device::subi_b_imm8_dais_dfm() // 0430 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -13554,7 +13554,7 @@ adsw2: return; } -void m68000_device::subi_b_imm8_adr16_dfm() // 0438 ffff +void m68000_mcu_device::subi_b_imm8_adr16_dfm() // 0438 ffff { // 2b9 o#w1 m_aob = m_au; @@ -13672,7 +13672,7 @@ void m68000_device::subi_b_imm8_adr16_dfm() // 0438 ffff return; } -void m68000_device::subi_b_imm8_adr32_dfm() // 0439 ffff +void m68000_mcu_device::subi_b_imm8_adr32_dfm() // 0439 ffff { // 2b9 o#w1 m_aob = m_au; @@ -13811,7 +13811,7 @@ void m68000_device::subi_b_imm8_adr32_dfm() // 0439 ffff return; } -void m68000_device::subi_w_imm16_ds_dfm() // 0440 fff8 +void m68000_mcu_device::subi_w_imm16_ds_dfm() // 0440 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -13874,7 +13874,7 @@ void m68000_device::subi_w_imm16_ds_dfm() // 0440 fff8 return; } -void m68000_device::subi_w_imm16_ais_dfm() // 0450 fff8 +void m68000_mcu_device::subi_w_imm16_ais_dfm() // 0450 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -13979,7 +13979,7 @@ void m68000_device::subi_w_imm16_ais_dfm() // 0450 fff8 return; } -void m68000_device::subi_w_imm16_aips_dfm() // 0458 fff8 +void m68000_mcu_device::subi_w_imm16_aips_dfm() // 0458 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -14088,7 +14088,7 @@ void m68000_device::subi_w_imm16_aips_dfm() // 0458 fff8 return; } -void m68000_device::subi_w_imm16_pais_dfm() // 0460 fff8 +void m68000_mcu_device::subi_w_imm16_pais_dfm() // 0460 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -14199,7 +14199,7 @@ void m68000_device::subi_w_imm16_pais_dfm() // 0460 fff8 return; } -void m68000_device::subi_w_imm16_das_dfm() // 0468 fff8 +void m68000_mcu_device::subi_w_imm16_das_dfm() // 0468 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -14326,7 +14326,7 @@ void m68000_device::subi_w_imm16_das_dfm() // 0468 fff8 return; } -void m68000_device::subi_w_imm16_dais_dfm() // 0470 fff8 +void m68000_mcu_device::subi_w_imm16_dais_dfm() // 0470 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -14491,7 +14491,7 @@ adsw2: return; } -void m68000_device::subi_w_imm16_adr16_dfm() // 0478 ffff +void m68000_mcu_device::subi_w_imm16_adr16_dfm() // 0478 ffff { // 2b9 o#w1 m_aob = m_au; @@ -14617,7 +14617,7 @@ void m68000_device::subi_w_imm16_adr16_dfm() // 0478 ffff return; } -void m68000_device::subi_w_imm16_adr32_dfm() // 0479 ffff +void m68000_mcu_device::subi_w_imm16_adr32_dfm() // 0479 ffff { // 2b9 o#w1 m_aob = m_au; @@ -14764,7 +14764,7 @@ void m68000_device::subi_w_imm16_adr32_dfm() // 0479 ffff return; } -void m68000_device::subi_l_imm32_ds_dfm() // 0480 fff8 +void m68000_mcu_device::subi_l_imm32_ds_dfm() // 0480 fff8 { int ry = m_irdi & 7; // 3e0 o#l1 @@ -14856,7 +14856,7 @@ void m68000_device::subi_l_imm32_ds_dfm() // 0480 fff8 return; } -void m68000_device::subi_l_imm32_ais_dfm() // 0490 fff8 +void m68000_mcu_device::subi_l_imm32_ais_dfm() // 0490 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -15026,7 +15026,7 @@ void m68000_device::subi_l_imm32_ais_dfm() // 0490 fff8 return; } -void m68000_device::subi_l_imm32_aips_dfm() // 0498 fff8 +void m68000_mcu_device::subi_l_imm32_aips_dfm() // 0498 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -15199,7 +15199,7 @@ void m68000_device::subi_l_imm32_aips_dfm() // 0498 fff8 return; } -void m68000_device::subi_l_imm32_pais_dfm() // 04a0 fff8 +void m68000_mcu_device::subi_l_imm32_pais_dfm() // 04a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -15373,7 +15373,7 @@ void m68000_device::subi_l_imm32_pais_dfm() // 04a0 fff8 return; } -void m68000_device::subi_l_imm32_das_dfm() // 04a8 fff8 +void m68000_mcu_device::subi_l_imm32_das_dfm() // 04a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -15564,7 +15564,7 @@ void m68000_device::subi_l_imm32_das_dfm() // 04a8 fff8 return; } -void m68000_device::subi_l_imm32_dais_dfm() // 04b0 fff8 +void m68000_mcu_device::subi_l_imm32_dais_dfm() // 04b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -15793,7 +15793,7 @@ adsl2: return; } -void m68000_device::subi_l_imm32_adr16_dfm() // 04b8 ffff +void m68000_mcu_device::subi_l_imm32_adr16_dfm() // 04b8 ffff { // 3e0 o#l1 m_aob = m_au; @@ -15986,7 +15986,7 @@ void m68000_device::subi_l_imm32_adr16_dfm() // 04b8 ffff return; } -void m68000_device::subi_l_imm32_adr32_dfm() // 04b9 ffff +void m68000_mcu_device::subi_l_imm32_adr32_dfm() // 04b9 ffff { // 3e0 o#l1 m_aob = m_au; @@ -16200,7 +16200,7 @@ void m68000_device::subi_l_imm32_adr32_dfm() // 04b9 ffff return; } -void m68000_device::addi_b_imm8_ds_dfm() // 0600 fff8 +void m68000_mcu_device::addi_b_imm8_ds_dfm() // 0600 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -16263,7 +16263,7 @@ void m68000_device::addi_b_imm8_ds_dfm() // 0600 fff8 return; } -void m68000_device::addi_b_imm8_ais_dfm() // 0610 fff8 +void m68000_mcu_device::addi_b_imm8_ais_dfm() // 0610 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -16360,7 +16360,7 @@ void m68000_device::addi_b_imm8_ais_dfm() // 0610 fff8 return; } -void m68000_device::addi_b_imm8_aips_dfm() // 0618 fff8 +void m68000_mcu_device::addi_b_imm8_aips_dfm() // 0618 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -16461,7 +16461,7 @@ void m68000_device::addi_b_imm8_aips_dfm() // 0618 fff8 return; } -void m68000_device::addi_b_imm8_pais_dfm() // 0620 fff8 +void m68000_mcu_device::addi_b_imm8_pais_dfm() // 0620 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -16564,7 +16564,7 @@ void m68000_device::addi_b_imm8_pais_dfm() // 0620 fff8 return; } -void m68000_device::addi_b_imm8_das_dfm() // 0628 fff8 +void m68000_mcu_device::addi_b_imm8_das_dfm() // 0628 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -16683,7 +16683,7 @@ void m68000_device::addi_b_imm8_das_dfm() // 0628 fff8 return; } -void m68000_device::addi_b_imm8_dais_dfm() // 0630 fff8 +void m68000_mcu_device::addi_b_imm8_dais_dfm() // 0630 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -16840,7 +16840,7 @@ adsw2: return; } -void m68000_device::addi_b_imm8_adr16_dfm() // 0638 ffff +void m68000_mcu_device::addi_b_imm8_adr16_dfm() // 0638 ffff { // 2b9 o#w1 m_aob = m_au; @@ -16958,7 +16958,7 @@ void m68000_device::addi_b_imm8_adr16_dfm() // 0638 ffff return; } -void m68000_device::addi_b_imm8_adr32_dfm() // 0639 ffff +void m68000_mcu_device::addi_b_imm8_adr32_dfm() // 0639 ffff { // 2b9 o#w1 m_aob = m_au; @@ -17097,7 +17097,7 @@ void m68000_device::addi_b_imm8_adr32_dfm() // 0639 ffff return; } -void m68000_device::addi_w_imm16_ds_dfm() // 0640 fff8 +void m68000_mcu_device::addi_w_imm16_ds_dfm() // 0640 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -17160,7 +17160,7 @@ void m68000_device::addi_w_imm16_ds_dfm() // 0640 fff8 return; } -void m68000_device::addi_w_imm16_ais_dfm() // 0650 fff8 +void m68000_mcu_device::addi_w_imm16_ais_dfm() // 0650 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -17265,7 +17265,7 @@ void m68000_device::addi_w_imm16_ais_dfm() // 0650 fff8 return; } -void m68000_device::addi_w_imm16_aips_dfm() // 0658 fff8 +void m68000_mcu_device::addi_w_imm16_aips_dfm() // 0658 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -17374,7 +17374,7 @@ void m68000_device::addi_w_imm16_aips_dfm() // 0658 fff8 return; } -void m68000_device::addi_w_imm16_pais_dfm() // 0660 fff8 +void m68000_mcu_device::addi_w_imm16_pais_dfm() // 0660 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -17485,7 +17485,7 @@ void m68000_device::addi_w_imm16_pais_dfm() // 0660 fff8 return; } -void m68000_device::addi_w_imm16_das_dfm() // 0668 fff8 +void m68000_mcu_device::addi_w_imm16_das_dfm() // 0668 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -17612,7 +17612,7 @@ void m68000_device::addi_w_imm16_das_dfm() // 0668 fff8 return; } -void m68000_device::addi_w_imm16_dais_dfm() // 0670 fff8 +void m68000_mcu_device::addi_w_imm16_dais_dfm() // 0670 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -17777,7 +17777,7 @@ adsw2: return; } -void m68000_device::addi_w_imm16_adr16_dfm() // 0678 ffff +void m68000_mcu_device::addi_w_imm16_adr16_dfm() // 0678 ffff { // 2b9 o#w1 m_aob = m_au; @@ -17903,7 +17903,7 @@ void m68000_device::addi_w_imm16_adr16_dfm() // 0678 ffff return; } -void m68000_device::addi_w_imm16_adr32_dfm() // 0679 ffff +void m68000_mcu_device::addi_w_imm16_adr32_dfm() // 0679 ffff { // 2b9 o#w1 m_aob = m_au; @@ -18050,7 +18050,7 @@ void m68000_device::addi_w_imm16_adr32_dfm() // 0679 ffff return; } -void m68000_device::addi_l_imm32_ds_dfm() // 0680 fff8 +void m68000_mcu_device::addi_l_imm32_ds_dfm() // 0680 fff8 { int ry = m_irdi & 7; // 3e0 o#l1 @@ -18142,7 +18142,7 @@ void m68000_device::addi_l_imm32_ds_dfm() // 0680 fff8 return; } -void m68000_device::addi_l_imm32_ais_dfm() // 0690 fff8 +void m68000_mcu_device::addi_l_imm32_ais_dfm() // 0690 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -18312,7 +18312,7 @@ void m68000_device::addi_l_imm32_ais_dfm() // 0690 fff8 return; } -void m68000_device::addi_l_imm32_aips_dfm() // 0698 fff8 +void m68000_mcu_device::addi_l_imm32_aips_dfm() // 0698 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -18485,7 +18485,7 @@ void m68000_device::addi_l_imm32_aips_dfm() // 0698 fff8 return; } -void m68000_device::addi_l_imm32_pais_dfm() // 06a0 fff8 +void m68000_mcu_device::addi_l_imm32_pais_dfm() // 06a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -18659,7 +18659,7 @@ void m68000_device::addi_l_imm32_pais_dfm() // 06a0 fff8 return; } -void m68000_device::addi_l_imm32_das_dfm() // 06a8 fff8 +void m68000_mcu_device::addi_l_imm32_das_dfm() // 06a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -18850,7 +18850,7 @@ void m68000_device::addi_l_imm32_das_dfm() // 06a8 fff8 return; } -void m68000_device::addi_l_imm32_dais_dfm() // 06b0 fff8 +void m68000_mcu_device::addi_l_imm32_dais_dfm() // 06b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -19079,7 +19079,7 @@ adsl2: return; } -void m68000_device::addi_l_imm32_adr16_dfm() // 06b8 ffff +void m68000_mcu_device::addi_l_imm32_adr16_dfm() // 06b8 ffff { // 3e0 o#l1 m_aob = m_au; @@ -19272,7 +19272,7 @@ void m68000_device::addi_l_imm32_adr16_dfm() // 06b8 ffff return; } -void m68000_device::addi_l_imm32_adr32_dfm() // 06b9 ffff +void m68000_mcu_device::addi_l_imm32_adr32_dfm() // 06b9 ffff { // 3e0 o#l1 m_aob = m_au; @@ -19486,7 +19486,7 @@ void m68000_device::addi_l_imm32_adr32_dfm() // 06b9 ffff return; } -void m68000_device::btst_imm8_ds_dfm() // 0800 fff8 +void m68000_mcu_device::btst_imm8_ds_dfm() // 0800 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -19579,7 +19579,7 @@ btsr3: return; } -void m68000_device::btst_imm8_ais_dfm() // 0810 fff8 +void m68000_mcu_device::btst_imm8_ais_dfm() // 0810 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -19665,7 +19665,7 @@ void m68000_device::btst_imm8_ais_dfm() // 0810 fff8 return; } -void m68000_device::btst_imm8_aips_dfm() // 0818 fff8 +void m68000_mcu_device::btst_imm8_aips_dfm() // 0818 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -19756,7 +19756,7 @@ void m68000_device::btst_imm8_aips_dfm() // 0818 fff8 return; } -void m68000_device::btst_imm8_pais_dfm() // 0820 fff8 +void m68000_mcu_device::btst_imm8_pais_dfm() // 0820 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -19849,7 +19849,7 @@ void m68000_device::btst_imm8_pais_dfm() // 0820 fff8 return; } -void m68000_device::btst_imm8_das_dfm() // 0828 fff8 +void m68000_mcu_device::btst_imm8_das_dfm() // 0828 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -19958,7 +19958,7 @@ void m68000_device::btst_imm8_das_dfm() // 0828 fff8 return; } -void m68000_device::btst_imm8_dais_dfm() // 0830 fff8 +void m68000_mcu_device::btst_imm8_dais_dfm() // 0830 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -20107,7 +20107,7 @@ adsw2: return; } -void m68000_device::btst_imm8_adr16_dfm() // 0838 ffff +void m68000_mcu_device::btst_imm8_adr16_dfm() // 0838 ffff { // 2b9 o#w1 m_aob = m_au; @@ -20215,7 +20215,7 @@ void m68000_device::btst_imm8_adr16_dfm() // 0838 ffff return; } -void m68000_device::btst_imm8_adr32_dfm() // 0839 ffff +void m68000_mcu_device::btst_imm8_adr32_dfm() // 0839 ffff { // 2b9 o#w1 m_aob = m_au; @@ -20345,7 +20345,7 @@ void m68000_device::btst_imm8_adr32_dfm() // 0839 ffff return; } -void m68000_device::btst_imm8_dpc_dfm() // 083a ffff +void m68000_mcu_device::btst_imm8_dpc_dfm() // 083a ffff { // 2b9 o#w1 m_aob = m_au; @@ -20453,7 +20453,7 @@ void m68000_device::btst_imm8_dpc_dfm() // 083a ffff return; } -void m68000_device::btst_imm8_dpci_dfm() // 083b ffff +void m68000_mcu_device::btst_imm8_dpci_dfm() // 083b ffff { // 2b9 o#w1 m_aob = m_au; @@ -20601,7 +20601,7 @@ adsw2: return; } -void m68000_device::bchg_imm8_ds_dfm() // 0840 fff8 +void m68000_mcu_device::bchg_imm8_ds_dfm() // 0840 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -20700,7 +20700,7 @@ bcsr3: return; } -void m68000_device::bchg_imm8_ais_dfm() // 0850 fff8 +void m68000_mcu_device::bchg_imm8_ais_dfm() // 0850 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -20801,7 +20801,7 @@ void m68000_device::bchg_imm8_ais_dfm() // 0850 fff8 return; } -void m68000_device::bchg_imm8_aips_dfm() // 0858 fff8 +void m68000_mcu_device::bchg_imm8_aips_dfm() // 0858 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -20907,7 +20907,7 @@ void m68000_device::bchg_imm8_aips_dfm() // 0858 fff8 return; } -void m68000_device::bchg_imm8_pais_dfm() // 0860 fff8 +void m68000_mcu_device::bchg_imm8_pais_dfm() // 0860 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -21015,7 +21015,7 @@ void m68000_device::bchg_imm8_pais_dfm() // 0860 fff8 return; } -void m68000_device::bchg_imm8_das_dfm() // 0868 fff8 +void m68000_mcu_device::bchg_imm8_das_dfm() // 0868 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -21139,7 +21139,7 @@ void m68000_device::bchg_imm8_das_dfm() // 0868 fff8 return; } -void m68000_device::bchg_imm8_dais_dfm() // 0870 fff8 +void m68000_mcu_device::bchg_imm8_dais_dfm() // 0870 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -21303,7 +21303,7 @@ adsw2: return; } -void m68000_device::bchg_imm8_adr16_dfm() // 0878 ffff +void m68000_mcu_device::bchg_imm8_adr16_dfm() // 0878 ffff { // 2b9 o#w1 m_aob = m_au; @@ -21426,7 +21426,7 @@ void m68000_device::bchg_imm8_adr16_dfm() // 0878 ffff return; } -void m68000_device::bchg_imm8_adr32_dfm() // 0879 ffff +void m68000_mcu_device::bchg_imm8_adr32_dfm() // 0879 ffff { // 2b9 o#w1 m_aob = m_au; @@ -21571,7 +21571,7 @@ void m68000_device::bchg_imm8_adr32_dfm() // 0879 ffff return; } -void m68000_device::bclr_imm8_ds_dfm() // 0880 fff8 +void m68000_mcu_device::bclr_imm8_ds_dfm() // 0880 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -21678,7 +21678,7 @@ bclr3: return; } -void m68000_device::bclr_imm8_ais_dfm() // 0890 fff8 +void m68000_mcu_device::bclr_imm8_ais_dfm() // 0890 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -21783,7 +21783,7 @@ void m68000_device::bclr_imm8_ais_dfm() // 0890 fff8 return; } -void m68000_device::bclr_imm8_aips_dfm() // 0898 fff8 +void m68000_mcu_device::bclr_imm8_aips_dfm() // 0898 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -21893,7 +21893,7 @@ void m68000_device::bclr_imm8_aips_dfm() // 0898 fff8 return; } -void m68000_device::bclr_imm8_pais_dfm() // 08a0 fff8 +void m68000_mcu_device::bclr_imm8_pais_dfm() // 08a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -22005,7 +22005,7 @@ void m68000_device::bclr_imm8_pais_dfm() // 08a0 fff8 return; } -void m68000_device::bclr_imm8_das_dfm() // 08a8 fff8 +void m68000_mcu_device::bclr_imm8_das_dfm() // 08a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -22133,7 +22133,7 @@ void m68000_device::bclr_imm8_das_dfm() // 08a8 fff8 return; } -void m68000_device::bclr_imm8_dais_dfm() // 08b0 fff8 +void m68000_mcu_device::bclr_imm8_dais_dfm() // 08b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -22301,7 +22301,7 @@ adsw2: return; } -void m68000_device::bclr_imm8_adr16_dfm() // 08b8 ffff +void m68000_mcu_device::bclr_imm8_adr16_dfm() // 08b8 ffff { // 2b9 o#w1 m_aob = m_au; @@ -22428,7 +22428,7 @@ void m68000_device::bclr_imm8_adr16_dfm() // 08b8 ffff return; } -void m68000_device::bclr_imm8_adr32_dfm() // 08b9 ffff +void m68000_mcu_device::bclr_imm8_adr32_dfm() // 08b9 ffff { // 2b9 o#w1 m_aob = m_au; @@ -22577,7 +22577,7 @@ void m68000_device::bclr_imm8_adr32_dfm() // 08b9 ffff return; } -void m68000_device::bset_imm8_ds_dfm() // 08c0 fff8 +void m68000_mcu_device::bset_imm8_ds_dfm() // 08c0 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -22676,7 +22676,7 @@ bcsr3: return; } -void m68000_device::bset_imm8_ais_dfm() // 08d0 fff8 +void m68000_mcu_device::bset_imm8_ais_dfm() // 08d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -22777,7 +22777,7 @@ void m68000_device::bset_imm8_ais_dfm() // 08d0 fff8 return; } -void m68000_device::bset_imm8_aips_dfm() // 08d8 fff8 +void m68000_mcu_device::bset_imm8_aips_dfm() // 08d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -22883,7 +22883,7 @@ void m68000_device::bset_imm8_aips_dfm() // 08d8 fff8 return; } -void m68000_device::bset_imm8_pais_dfm() // 08e0 fff8 +void m68000_mcu_device::bset_imm8_pais_dfm() // 08e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -22991,7 +22991,7 @@ void m68000_device::bset_imm8_pais_dfm() // 08e0 fff8 return; } -void m68000_device::bset_imm8_das_dfm() // 08e8 fff8 +void m68000_mcu_device::bset_imm8_das_dfm() // 08e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -23115,7 +23115,7 @@ void m68000_device::bset_imm8_das_dfm() // 08e8 fff8 return; } -void m68000_device::bset_imm8_dais_dfm() // 08f0 fff8 +void m68000_mcu_device::bset_imm8_dais_dfm() // 08f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -23279,7 +23279,7 @@ adsw2: return; } -void m68000_device::bset_imm8_adr16_dfm() // 08f8 ffff +void m68000_mcu_device::bset_imm8_adr16_dfm() // 08f8 ffff { // 2b9 o#w1 m_aob = m_au; @@ -23402,7 +23402,7 @@ void m68000_device::bset_imm8_adr16_dfm() // 08f8 ffff return; } -void m68000_device::bset_imm8_adr32_dfm() // 08f9 ffff +void m68000_mcu_device::bset_imm8_adr32_dfm() // 08f9 ffff { // 2b9 o#w1 m_aob = m_au; @@ -23547,7 +23547,7 @@ void m68000_device::bset_imm8_adr32_dfm() // 08f9 ffff return; } -void m68000_device::eori_b_imm8_ds_dfm() // 0a00 fff8 +void m68000_mcu_device::eori_b_imm8_ds_dfm() // 0a00 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -23612,7 +23612,7 @@ void m68000_device::eori_b_imm8_ds_dfm() // 0a00 fff8 return; } -void m68000_device::eori_b_imm8_ais_dfm() // 0a10 fff8 +void m68000_mcu_device::eori_b_imm8_ais_dfm() // 0a10 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -23712,7 +23712,7 @@ void m68000_device::eori_b_imm8_ais_dfm() // 0a10 fff8 return; } -void m68000_device::eori_b_imm8_aips_dfm() // 0a18 fff8 +void m68000_mcu_device::eori_b_imm8_aips_dfm() // 0a18 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -23817,7 +23817,7 @@ void m68000_device::eori_b_imm8_aips_dfm() // 0a18 fff8 return; } -void m68000_device::eori_b_imm8_pais_dfm() // 0a20 fff8 +void m68000_mcu_device::eori_b_imm8_pais_dfm() // 0a20 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -23924,7 +23924,7 @@ void m68000_device::eori_b_imm8_pais_dfm() // 0a20 fff8 return; } -void m68000_device::eori_b_imm8_das_dfm() // 0a28 fff8 +void m68000_mcu_device::eori_b_imm8_das_dfm() // 0a28 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -24047,7 +24047,7 @@ void m68000_device::eori_b_imm8_das_dfm() // 0a28 fff8 return; } -void m68000_device::eori_b_imm8_dais_dfm() // 0a30 fff8 +void m68000_mcu_device::eori_b_imm8_dais_dfm() // 0a30 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -24210,7 +24210,7 @@ adsw2: return; } -void m68000_device::eori_b_imm8_adr16_dfm() // 0a38 ffff +void m68000_mcu_device::eori_b_imm8_adr16_dfm() // 0a38 ffff { // 2b9 o#w1 m_aob = m_au; @@ -24332,7 +24332,7 @@ void m68000_device::eori_b_imm8_adr16_dfm() // 0a38 ffff return; } -void m68000_device::eori_b_imm8_adr32_dfm() // 0a39 ffff +void m68000_mcu_device::eori_b_imm8_adr32_dfm() // 0a39 ffff { // 2b9 o#w1 m_aob = m_au; @@ -24476,7 +24476,7 @@ void m68000_device::eori_b_imm8_adr32_dfm() // 0a39 ffff return; } -void m68000_device::eori_imm8_ccr_dfm() // 0a3c ffff +void m68000_mcu_device::eori_imm8_ccr_dfm() // 0a3c ffff { // 2b9 o#w1 m_aob = m_au; @@ -24581,7 +24581,7 @@ void m68000_device::eori_imm8_ccr_dfm() // 0a3c ffff return; } -void m68000_device::eori_w_imm16_ds_dfm() // 0a40 fff8 +void m68000_mcu_device::eori_w_imm16_ds_dfm() // 0a40 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -24646,7 +24646,7 @@ void m68000_device::eori_w_imm16_ds_dfm() // 0a40 fff8 return; } -void m68000_device::eori_w_imm16_ais_dfm() // 0a50 fff8 +void m68000_mcu_device::eori_w_imm16_ais_dfm() // 0a50 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -24754,7 +24754,7 @@ void m68000_device::eori_w_imm16_ais_dfm() // 0a50 fff8 return; } -void m68000_device::eori_w_imm16_aips_dfm() // 0a58 fff8 +void m68000_mcu_device::eori_w_imm16_aips_dfm() // 0a58 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -24867,7 +24867,7 @@ void m68000_device::eori_w_imm16_aips_dfm() // 0a58 fff8 return; } -void m68000_device::eori_w_imm16_pais_dfm() // 0a60 fff8 +void m68000_mcu_device::eori_w_imm16_pais_dfm() // 0a60 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -24982,7 +24982,7 @@ void m68000_device::eori_w_imm16_pais_dfm() // 0a60 fff8 return; } -void m68000_device::eori_w_imm16_das_dfm() // 0a68 fff8 +void m68000_mcu_device::eori_w_imm16_das_dfm() // 0a68 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -25113,7 +25113,7 @@ void m68000_device::eori_w_imm16_das_dfm() // 0a68 fff8 return; } -void m68000_device::eori_w_imm16_dais_dfm() // 0a70 fff8 +void m68000_mcu_device::eori_w_imm16_dais_dfm() // 0a70 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -25284,7 +25284,7 @@ adsw2: return; } -void m68000_device::eori_w_imm16_adr16_dfm() // 0a78 ffff +void m68000_mcu_device::eori_w_imm16_adr16_dfm() // 0a78 ffff { // 2b9 o#w1 m_aob = m_au; @@ -25414,7 +25414,7 @@ void m68000_device::eori_w_imm16_adr16_dfm() // 0a78 ffff return; } -void m68000_device::eori_w_imm16_adr32_dfm() // 0a79 ffff +void m68000_mcu_device::eori_w_imm16_adr32_dfm() // 0a79 ffff { // 2b9 o#w1 m_aob = m_au; @@ -25566,7 +25566,7 @@ void m68000_device::eori_w_imm16_adr32_dfm() // 0a79 ffff return; } -void m68000_device::eori_i16u_sr_dfm() // 0a7c ffff +void m68000_mcu_device::eori_i16u_sr_dfm() // 0a7c ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -25677,7 +25677,7 @@ void m68000_device::eori_i16u_sr_dfm() // 0a7c ffff return; } -void m68000_device::eori_l_imm32_ds_dfm() // 0a80 fff8 +void m68000_mcu_device::eori_l_imm32_ds_dfm() // 0a80 fff8 { int ry = m_irdi & 7; // 3e0 o#l1 @@ -25773,7 +25773,7 @@ void m68000_device::eori_l_imm32_ds_dfm() // 0a80 fff8 return; } -void m68000_device::eori_l_imm32_ais_dfm() // 0a90 fff8 +void m68000_mcu_device::eori_l_imm32_ais_dfm() // 0a90 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -25947,7 +25947,7 @@ void m68000_device::eori_l_imm32_ais_dfm() // 0a90 fff8 return; } -void m68000_device::eori_l_imm32_aips_dfm() // 0a98 fff8 +void m68000_mcu_device::eori_l_imm32_aips_dfm() // 0a98 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -26125,7 +26125,7 @@ void m68000_device::eori_l_imm32_aips_dfm() // 0a98 fff8 return; } -void m68000_device::eori_l_imm32_pais_dfm() // 0aa0 fff8 +void m68000_mcu_device::eori_l_imm32_pais_dfm() // 0aa0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -26304,7 +26304,7 @@ void m68000_device::eori_l_imm32_pais_dfm() // 0aa0 fff8 return; } -void m68000_device::eori_l_imm32_das_dfm() // 0aa8 fff8 +void m68000_mcu_device::eori_l_imm32_das_dfm() // 0aa8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -26500,7 +26500,7 @@ void m68000_device::eori_l_imm32_das_dfm() // 0aa8 fff8 return; } -void m68000_device::eori_l_imm32_dais_dfm() // 0ab0 fff8 +void m68000_mcu_device::eori_l_imm32_dais_dfm() // 0ab0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -26736,7 +26736,7 @@ adsl2: return; } -void m68000_device::eori_l_imm32_adr16_dfm() // 0ab8 ffff +void m68000_mcu_device::eori_l_imm32_adr16_dfm() // 0ab8 ffff { // 3e0 o#l1 m_aob = m_au; @@ -26935,7 +26935,7 @@ void m68000_device::eori_l_imm32_adr16_dfm() // 0ab8 ffff return; } -void m68000_device::eori_l_imm32_adr32_dfm() // 0ab9 ffff +void m68000_mcu_device::eori_l_imm32_adr32_dfm() // 0ab9 ffff { // 3e0 o#l1 m_aob = m_au; @@ -27156,7 +27156,7 @@ void m68000_device::eori_l_imm32_adr32_dfm() // 0ab9 ffff return; } -void m68000_device::cmpi_b_imm8_ds_dfm() // 0c00 fff8 +void m68000_mcu_device::cmpi_b_imm8_ds_dfm() // 0c00 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -27218,7 +27218,7 @@ void m68000_device::cmpi_b_imm8_ds_dfm() // 0c00 fff8 return; } -void m68000_device::cmpi_b_imm8_ais_dfm() // 0c10 fff8 +void m68000_mcu_device::cmpi_b_imm8_ais_dfm() // 0c10 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -27301,7 +27301,7 @@ void m68000_device::cmpi_b_imm8_ais_dfm() // 0c10 fff8 return; } -void m68000_device::cmpi_b_imm8_aips_dfm() // 0c18 fff8 +void m68000_mcu_device::cmpi_b_imm8_aips_dfm() // 0c18 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -27388,7 +27388,7 @@ void m68000_device::cmpi_b_imm8_aips_dfm() // 0c18 fff8 return; } -void m68000_device::cmpi_b_imm8_pais_dfm() // 0c20 fff8 +void m68000_mcu_device::cmpi_b_imm8_pais_dfm() // 0c20 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -27477,7 +27477,7 @@ void m68000_device::cmpi_b_imm8_pais_dfm() // 0c20 fff8 return; } -void m68000_device::cmpi_b_imm8_das_dfm() // 0c28 fff8 +void m68000_mcu_device::cmpi_b_imm8_das_dfm() // 0c28 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -27582,7 +27582,7 @@ void m68000_device::cmpi_b_imm8_das_dfm() // 0c28 fff8 return; } -void m68000_device::cmpi_b_imm8_dais_dfm() // 0c30 fff8 +void m68000_mcu_device::cmpi_b_imm8_dais_dfm() // 0c30 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -27725,7 +27725,7 @@ adsw2: return; } -void m68000_device::cmpi_b_imm8_adr16_dfm() // 0c38 ffff +void m68000_mcu_device::cmpi_b_imm8_adr16_dfm() // 0c38 ffff { // 2b9 o#w1 m_aob = m_au; @@ -27829,7 +27829,7 @@ void m68000_device::cmpi_b_imm8_adr16_dfm() // 0c38 ffff return; } -void m68000_device::cmpi_b_imm8_adr32_dfm() // 0c39 ffff +void m68000_mcu_device::cmpi_b_imm8_adr32_dfm() // 0c39 ffff { // 2b9 o#w1 m_aob = m_au; @@ -27954,7 +27954,7 @@ void m68000_device::cmpi_b_imm8_adr32_dfm() // 0c39 ffff return; } -void m68000_device::cmpi_w_imm16_ds_dfm() // 0c40 fff8 +void m68000_mcu_device::cmpi_w_imm16_ds_dfm() // 0c40 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -28016,7 +28016,7 @@ void m68000_device::cmpi_w_imm16_ds_dfm() // 0c40 fff8 return; } -void m68000_device::cmpi_w_imm16_ais_dfm() // 0c50 fff8 +void m68000_mcu_device::cmpi_w_imm16_ais_dfm() // 0c50 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -28102,7 +28102,7 @@ void m68000_device::cmpi_w_imm16_ais_dfm() // 0c50 fff8 return; } -void m68000_device::cmpi_w_imm16_aips_dfm() // 0c58 fff8 +void m68000_mcu_device::cmpi_w_imm16_aips_dfm() // 0c58 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -28192,7 +28192,7 @@ void m68000_device::cmpi_w_imm16_aips_dfm() // 0c58 fff8 return; } -void m68000_device::cmpi_w_imm16_pais_dfm() // 0c60 fff8 +void m68000_mcu_device::cmpi_w_imm16_pais_dfm() // 0c60 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -28284,7 +28284,7 @@ void m68000_device::cmpi_w_imm16_pais_dfm() // 0c60 fff8 return; } -void m68000_device::cmpi_w_imm16_das_dfm() // 0c68 fff8 +void m68000_mcu_device::cmpi_w_imm16_das_dfm() // 0c68 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -28392,7 +28392,7 @@ void m68000_device::cmpi_w_imm16_das_dfm() // 0c68 fff8 return; } -void m68000_device::cmpi_w_imm16_dais_dfm() // 0c70 fff8 +void m68000_mcu_device::cmpi_w_imm16_dais_dfm() // 0c70 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -28538,7 +28538,7 @@ adsw2: return; } -void m68000_device::cmpi_w_imm16_adr16_dfm() // 0c78 ffff +void m68000_mcu_device::cmpi_w_imm16_adr16_dfm() // 0c78 ffff { // 2b9 o#w1 m_aob = m_au; @@ -28645,7 +28645,7 @@ void m68000_device::cmpi_w_imm16_adr16_dfm() // 0c78 ffff return; } -void m68000_device::cmpi_w_imm16_adr32_dfm() // 0c79 ffff +void m68000_mcu_device::cmpi_w_imm16_adr32_dfm() // 0c79 ffff { // 2b9 o#w1 m_aob = m_au; @@ -28773,7 +28773,7 @@ void m68000_device::cmpi_w_imm16_adr32_dfm() // 0c79 ffff return; } -void m68000_device::cmpi_l_imm32_ds_dfm() // 0c80 fff8 +void m68000_mcu_device::cmpi_l_imm32_ds_dfm() // 0c80 fff8 { int ry = m_irdi & 7; // 3e0 o#l1 @@ -28862,7 +28862,7 @@ void m68000_device::cmpi_l_imm32_ds_dfm() // 0c80 fff8 return; } -void m68000_device::cmpi_l_imm32_ais_dfm() // 0c90 fff8 +void m68000_mcu_device::cmpi_l_imm32_ais_dfm() // 0c90 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -28993,7 +28993,7 @@ void m68000_device::cmpi_l_imm32_ais_dfm() // 0c90 fff8 return; } -void m68000_device::cmpi_l_imm32_aips_dfm() // 0c98 fff8 +void m68000_mcu_device::cmpi_l_imm32_aips_dfm() // 0c98 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -29127,7 +29127,7 @@ void m68000_device::cmpi_l_imm32_aips_dfm() // 0c98 fff8 return; } -void m68000_device::cmpi_l_imm32_pais_dfm() // 0ca0 fff8 +void m68000_mcu_device::cmpi_l_imm32_pais_dfm() // 0ca0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -29262,7 +29262,7 @@ void m68000_device::cmpi_l_imm32_pais_dfm() // 0ca0 fff8 return; } -void m68000_device::cmpi_l_imm32_das_dfm() // 0ca8 fff8 +void m68000_mcu_device::cmpi_l_imm32_das_dfm() // 0ca8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -29414,7 +29414,7 @@ void m68000_device::cmpi_l_imm32_das_dfm() // 0ca8 fff8 return; } -void m68000_device::cmpi_l_imm32_dais_dfm() // 0cb0 fff8 +void m68000_mcu_device::cmpi_l_imm32_dais_dfm() // 0cb0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -29604,7 +29604,7 @@ adsl2: return; } -void m68000_device::cmpi_l_imm32_adr16_dfm() // 0cb8 ffff +void m68000_mcu_device::cmpi_l_imm32_adr16_dfm() // 0cb8 ffff { // 3e0 o#l1 m_aob = m_au; @@ -29758,7 +29758,7 @@ void m68000_device::cmpi_l_imm32_adr16_dfm() // 0cb8 ffff return; } -void m68000_device::cmpi_l_imm32_adr32_dfm() // 0cb9 ffff +void m68000_mcu_device::cmpi_l_imm32_adr32_dfm() // 0cb9 ffff { // 3e0 o#l1 m_aob = m_au; @@ -29933,7 +29933,7 @@ void m68000_device::cmpi_l_imm32_adr32_dfm() // 0cb9 ffff return; } -void m68000_device::move_b_ds_dd_dfm() // 1000 f1f8 +void m68000_mcu_device::move_b_ds_dd_dfm() // 1000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -29976,7 +29976,7 @@ void m68000_device::move_b_ds_dd_dfm() // 1000 f1f8 return; } -void m68000_device::move_b_ais_dd_dfm() // 1010 f1f8 +void m68000_mcu_device::move_b_ais_dd_dfm() // 1010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -30038,7 +30038,7 @@ void m68000_device::move_b_ais_dd_dfm() // 1010 f1f8 return; } -void m68000_device::move_b_aips_dd_dfm() // 1018 f1f8 +void m68000_mcu_device::move_b_aips_dd_dfm() // 1018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -30104,7 +30104,7 @@ void m68000_device::move_b_aips_dd_dfm() // 1018 f1f8 return; } -void m68000_device::move_b_pais_dd_dfm() // 1020 f1f8 +void m68000_mcu_device::move_b_pais_dd_dfm() // 1020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -30172,7 +30172,7 @@ void m68000_device::move_b_pais_dd_dfm() // 1020 f1f8 return; } -void m68000_device::move_b_das_dd_dfm() // 1028 f1f8 +void m68000_mcu_device::move_b_das_dd_dfm() // 1028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -30256,7 +30256,7 @@ void m68000_device::move_b_das_dd_dfm() // 1028 f1f8 return; } -void m68000_device::move_b_dais_dd_dfm() // 1030 f1f8 +void m68000_mcu_device::move_b_dais_dd_dfm() // 1030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -30378,7 +30378,7 @@ adsw2: return; } -void m68000_device::move_b_adr16_dd_dfm() // 1038 f1ff +void m68000_mcu_device::move_b_adr16_dd_dfm() // 1038 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -30461,7 +30461,7 @@ void m68000_device::move_b_adr16_dd_dfm() // 1038 f1ff return; } -void m68000_device::move_b_adr32_dd_dfm() // 1039 f1ff +void m68000_mcu_device::move_b_adr32_dd_dfm() // 1039 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -30565,7 +30565,7 @@ void m68000_device::move_b_adr32_dd_dfm() // 1039 f1ff return; } -void m68000_device::move_b_dpc_dd_dfm() // 103a f1ff +void m68000_mcu_device::move_b_dpc_dd_dfm() // 103a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -30648,7 +30648,7 @@ void m68000_device::move_b_dpc_dd_dfm() // 103a f1ff return; } -void m68000_device::move_b_dpci_dd_dfm() // 103b f1ff +void m68000_mcu_device::move_b_dpci_dd_dfm() // 103b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -30769,7 +30769,7 @@ adsw2: return; } -void m68000_device::move_b_imm8_dd_dfm() // 103c f1ff +void m68000_mcu_device::move_b_imm8_dd_dfm() // 103c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -30835,7 +30835,7 @@ void m68000_device::move_b_imm8_dd_dfm() // 103c f1ff return; } -void m68000_device::move_b_ds_aid_dfm() // 1080 f1f8 +void m68000_mcu_device::move_b_ds_aid_dfm() // 1080 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -30891,7 +30891,7 @@ void m68000_device::move_b_ds_aid_dfm() // 1080 f1f8 return; } -void m68000_device::move_b_ais_aid_dfm() // 1090 f1f8 +void m68000_mcu_device::move_b_ais_aid_dfm() // 1090 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -30967,7 +30967,7 @@ void m68000_device::move_b_ais_aid_dfm() // 1090 f1f8 return; } -void m68000_device::move_b_aips_aid_dfm() // 1098 f1f8 +void m68000_mcu_device::move_b_aips_aid_dfm() // 1098 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -31047,7 +31047,7 @@ void m68000_device::move_b_aips_aid_dfm() // 1098 f1f8 return; } -void m68000_device::move_b_pais_aid_dfm() // 10a0 f1f8 +void m68000_mcu_device::move_b_pais_aid_dfm() // 10a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -31129,7 +31129,7 @@ void m68000_device::move_b_pais_aid_dfm() // 10a0 f1f8 return; } -void m68000_device::move_b_das_aid_dfm() // 10a8 f1f8 +void m68000_mcu_device::move_b_das_aid_dfm() // 10a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -31227,7 +31227,7 @@ void m68000_device::move_b_das_aid_dfm() // 10a8 f1f8 return; } -void m68000_device::move_b_dais_aid_dfm() // 10b0 f1f8 +void m68000_mcu_device::move_b_dais_aid_dfm() // 10b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -31363,7 +31363,7 @@ adsw2: return; } -void m68000_device::move_b_adr16_aid_dfm() // 10b8 f1ff +void m68000_mcu_device::move_b_adr16_aid_dfm() // 10b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -31460,7 +31460,7 @@ void m68000_device::move_b_adr16_aid_dfm() // 10b8 f1ff return; } -void m68000_device::move_b_adr32_aid_dfm() // 10b9 f1ff +void m68000_mcu_device::move_b_adr32_aid_dfm() // 10b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -31578,7 +31578,7 @@ void m68000_device::move_b_adr32_aid_dfm() // 10b9 f1ff return; } -void m68000_device::move_b_dpc_aid_dfm() // 10ba f1ff +void m68000_mcu_device::move_b_dpc_aid_dfm() // 10ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -31675,7 +31675,7 @@ void m68000_device::move_b_dpc_aid_dfm() // 10ba f1ff return; } -void m68000_device::move_b_dpci_aid_dfm() // 10bb f1ff +void m68000_mcu_device::move_b_dpci_aid_dfm() // 10bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -31810,7 +31810,7 @@ adsw2: return; } -void m68000_device::move_b_imm8_aid_dfm() // 10bc f1ff +void m68000_mcu_device::move_b_imm8_aid_dfm() // 10bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -31889,7 +31889,7 @@ void m68000_device::move_b_imm8_aid_dfm() // 10bc f1ff return; } -void m68000_device::move_b_ds_aipd_dfm() // 10c0 f1f8 +void m68000_mcu_device::move_b_ds_aipd_dfm() // 10c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -31944,7 +31944,7 @@ void m68000_device::move_b_ds_aipd_dfm() // 10c0 f1f8 return; } -void m68000_device::move_b_ais_aipd_dfm() // 10d0 f1f8 +void m68000_mcu_device::move_b_ais_aipd_dfm() // 10d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -32020,7 +32020,7 @@ void m68000_device::move_b_ais_aipd_dfm() // 10d0 f1f8 return; } -void m68000_device::move_b_aips_aipd_dfm() // 10d8 f1f8 +void m68000_mcu_device::move_b_aips_aipd_dfm() // 10d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -32100,7 +32100,7 @@ void m68000_device::move_b_aips_aipd_dfm() // 10d8 f1f8 return; } -void m68000_device::move_b_pais_aipd_dfm() // 10e0 f1f8 +void m68000_mcu_device::move_b_pais_aipd_dfm() // 10e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -32182,7 +32182,7 @@ void m68000_device::move_b_pais_aipd_dfm() // 10e0 f1f8 return; } -void m68000_device::move_b_das_aipd_dfm() // 10e8 f1f8 +void m68000_mcu_device::move_b_das_aipd_dfm() // 10e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -32280,7 +32280,7 @@ void m68000_device::move_b_das_aipd_dfm() // 10e8 f1f8 return; } -void m68000_device::move_b_dais_aipd_dfm() // 10f0 f1f8 +void m68000_mcu_device::move_b_dais_aipd_dfm() // 10f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -32416,7 +32416,7 @@ adsw2: return; } -void m68000_device::move_b_adr16_aipd_dfm() // 10f8 f1ff +void m68000_mcu_device::move_b_adr16_aipd_dfm() // 10f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -32513,7 +32513,7 @@ void m68000_device::move_b_adr16_aipd_dfm() // 10f8 f1ff return; } -void m68000_device::move_b_adr32_aipd_dfm() // 10f9 f1ff +void m68000_mcu_device::move_b_adr32_aipd_dfm() // 10f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -32631,7 +32631,7 @@ void m68000_device::move_b_adr32_aipd_dfm() // 10f9 f1ff return; } -void m68000_device::move_b_dpc_aipd_dfm() // 10fa f1ff +void m68000_mcu_device::move_b_dpc_aipd_dfm() // 10fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -32728,7 +32728,7 @@ void m68000_device::move_b_dpc_aipd_dfm() // 10fa f1ff return; } -void m68000_device::move_b_dpci_aipd_dfm() // 10fb f1ff +void m68000_mcu_device::move_b_dpci_aipd_dfm() // 10fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -32863,7 +32863,7 @@ adsw2: return; } -void m68000_device::move_b_imm8_aipd_dfm() // 10fc f1ff +void m68000_mcu_device::move_b_imm8_aipd_dfm() // 10fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -32941,7 +32941,7 @@ void m68000_device::move_b_imm8_aipd_dfm() // 10fc f1ff return; } -void m68000_device::move_b_ds_paid_dfm() // 1100 f1f8 +void m68000_mcu_device::move_b_ds_paid_dfm() // 1100 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -32996,7 +32996,7 @@ void m68000_device::move_b_ds_paid_dfm() // 1100 f1f8 return; } -void m68000_device::move_b_ais_paid_dfm() // 1110 f1f8 +void m68000_mcu_device::move_b_ais_paid_dfm() // 1110 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -33072,7 +33072,7 @@ void m68000_device::move_b_ais_paid_dfm() // 1110 f1f8 return; } -void m68000_device::move_b_aips_paid_dfm() // 1118 f1f8 +void m68000_mcu_device::move_b_aips_paid_dfm() // 1118 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -33152,7 +33152,7 @@ void m68000_device::move_b_aips_paid_dfm() // 1118 f1f8 return; } -void m68000_device::move_b_pais_paid_dfm() // 1120 f1f8 +void m68000_mcu_device::move_b_pais_paid_dfm() // 1120 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -33234,7 +33234,7 @@ void m68000_device::move_b_pais_paid_dfm() // 1120 f1f8 return; } -void m68000_device::move_b_das_paid_dfm() // 1128 f1f8 +void m68000_mcu_device::move_b_das_paid_dfm() // 1128 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -33332,7 +33332,7 @@ void m68000_device::move_b_das_paid_dfm() // 1128 f1f8 return; } -void m68000_device::move_b_dais_paid_dfm() // 1130 f1f8 +void m68000_mcu_device::move_b_dais_paid_dfm() // 1130 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -33468,7 +33468,7 @@ adsw2: return; } -void m68000_device::move_b_adr16_paid_dfm() // 1138 f1ff +void m68000_mcu_device::move_b_adr16_paid_dfm() // 1138 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -33565,7 +33565,7 @@ void m68000_device::move_b_adr16_paid_dfm() // 1138 f1ff return; } -void m68000_device::move_b_adr32_paid_dfm() // 1139 f1ff +void m68000_mcu_device::move_b_adr32_paid_dfm() // 1139 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -33683,7 +33683,7 @@ void m68000_device::move_b_adr32_paid_dfm() // 1139 f1ff return; } -void m68000_device::move_b_dpc_paid_dfm() // 113a f1ff +void m68000_mcu_device::move_b_dpc_paid_dfm() // 113a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -33780,7 +33780,7 @@ void m68000_device::move_b_dpc_paid_dfm() // 113a f1ff return; } -void m68000_device::move_b_dpci_paid_dfm() // 113b f1ff +void m68000_mcu_device::move_b_dpci_paid_dfm() // 113b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -33915,7 +33915,7 @@ adsw2: return; } -void m68000_device::move_b_imm8_paid_dfm() // 113c f1ff +void m68000_mcu_device::move_b_imm8_paid_dfm() // 113c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -33993,7 +33993,7 @@ void m68000_device::move_b_imm8_paid_dfm() // 113c f1ff return; } -void m68000_device::move_b_ds_dad_dfm() // 1140 f1f8 +void m68000_mcu_device::move_b_ds_dad_dfm() // 1140 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -34070,7 +34070,7 @@ void m68000_device::move_b_ds_dad_dfm() // 1140 f1f8 return; } -void m68000_device::move_b_ais_dad_dfm() // 1150 f1f8 +void m68000_mcu_device::move_b_ais_dad_dfm() // 1150 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -34172,7 +34172,7 @@ void m68000_device::move_b_ais_dad_dfm() // 1150 f1f8 return; } -void m68000_device::move_b_aips_dad_dfm() // 1158 f1f8 +void m68000_mcu_device::move_b_aips_dad_dfm() // 1158 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -34278,7 +34278,7 @@ void m68000_device::move_b_aips_dad_dfm() // 1158 f1f8 return; } -void m68000_device::move_b_pais_dad_dfm() // 1160 f1f8 +void m68000_mcu_device::move_b_pais_dad_dfm() // 1160 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -34386,7 +34386,7 @@ void m68000_device::move_b_pais_dad_dfm() // 1160 f1f8 return; } -void m68000_device::move_b_das_dad_dfm() // 1168 f1f8 +void m68000_mcu_device::move_b_das_dad_dfm() // 1168 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -34510,7 +34510,7 @@ void m68000_device::move_b_das_dad_dfm() // 1168 f1f8 return; } -void m68000_device::move_b_dais_dad_dfm() // 1170 f1f8 +void m68000_mcu_device::move_b_dais_dad_dfm() // 1170 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -34672,7 +34672,7 @@ adsw2: return; } -void m68000_device::move_b_adr16_dad_dfm() // 1178 f1ff +void m68000_mcu_device::move_b_adr16_dad_dfm() // 1178 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -34795,7 +34795,7 @@ void m68000_device::move_b_adr16_dad_dfm() // 1178 f1ff return; } -void m68000_device::move_b_adr32_dad_dfm() // 1179 f1ff +void m68000_mcu_device::move_b_adr32_dad_dfm() // 1179 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -34939,7 +34939,7 @@ void m68000_device::move_b_adr32_dad_dfm() // 1179 f1ff return; } -void m68000_device::move_b_dpc_dad_dfm() // 117a f1ff +void m68000_mcu_device::move_b_dpc_dad_dfm() // 117a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -35062,7 +35062,7 @@ void m68000_device::move_b_dpc_dad_dfm() // 117a f1ff return; } -void m68000_device::move_b_dpci_dad_dfm() // 117b f1ff +void m68000_mcu_device::move_b_dpci_dad_dfm() // 117b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -35223,7 +35223,7 @@ adsw2: return; } -void m68000_device::move_b_imm8_dad_dfm() // 117c f1ff +void m68000_mcu_device::move_b_imm8_dad_dfm() // 117c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -35323,7 +35323,7 @@ void m68000_device::move_b_imm8_dad_dfm() // 117c f1ff return; } -void m68000_device::move_b_ds_daid_dfm() // 1180 f1f8 +void m68000_mcu_device::move_b_ds_daid_dfm() // 1180 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -35439,7 +35439,7 @@ rmdw2: return; } -void m68000_device::move_b_ais_daid_dfm() // 1190 f1f8 +void m68000_mcu_device::move_b_ais_daid_dfm() // 1190 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -35579,7 +35579,7 @@ maww2: return; } -void m68000_device::move_b_aips_daid_dfm() // 1198 f1f8 +void m68000_mcu_device::move_b_aips_daid_dfm() // 1198 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -35723,7 +35723,7 @@ maww2: return; } -void m68000_device::move_b_pais_daid_dfm() // 11a0 f1f8 +void m68000_mcu_device::move_b_pais_daid_dfm() // 11a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -35869,7 +35869,7 @@ maww2: return; } -void m68000_device::move_b_das_daid_dfm() // 11a8 f1f8 +void m68000_mcu_device::move_b_das_daid_dfm() // 11a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -36031,7 +36031,7 @@ maww2: return; } -void m68000_device::move_b_dais_daid_dfm() // 11b0 f1f8 +void m68000_mcu_device::move_b_dais_daid_dfm() // 11b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -36231,7 +36231,7 @@ maww2: return; } -void m68000_device::move_b_adr16_daid_dfm() // 11b8 f1ff +void m68000_mcu_device::move_b_adr16_daid_dfm() // 11b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -36392,7 +36392,7 @@ maww2: return; } -void m68000_device::move_b_adr32_daid_dfm() // 11b9 f1ff +void m68000_mcu_device::move_b_adr32_daid_dfm() // 11b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -36574,7 +36574,7 @@ maww2: return; } -void m68000_device::move_b_dpc_daid_dfm() // 11ba f1ff +void m68000_mcu_device::move_b_dpc_daid_dfm() // 11ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -36735,7 +36735,7 @@ maww2: return; } -void m68000_device::move_b_dpci_daid_dfm() // 11bb f1ff +void m68000_mcu_device::move_b_dpci_daid_dfm() // 11bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -36934,7 +36934,7 @@ maww2: return; } -void m68000_device::move_b_imm8_daid_dfm() // 11bc f1ff +void m68000_mcu_device::move_b_imm8_daid_dfm() // 11bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -37073,7 +37073,7 @@ rmdw2: return; } -void m68000_device::move_b_ds_adr16_dfm() // 11c0 fff8 +void m68000_mcu_device::move_b_ds_adr16_dfm() // 11c0 fff8 { int ry = m_irdi & 7; // 2d9 raww1 @@ -37154,7 +37154,7 @@ void m68000_device::move_b_ds_adr16_dfm() // 11c0 fff8 return; } -void m68000_device::move_b_ais_adr16_dfm() // 11d0 fff8 +void m68000_mcu_device::move_b_ais_adr16_dfm() // 11d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -37255,7 +37255,7 @@ void m68000_device::move_b_ais_adr16_dfm() // 11d0 fff8 return; } -void m68000_device::move_b_aips_adr16_dfm() // 11d8 fff8 +void m68000_mcu_device::move_b_aips_adr16_dfm() // 11d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -37360,7 +37360,7 @@ void m68000_device::move_b_aips_adr16_dfm() // 11d8 fff8 return; } -void m68000_device::move_b_pais_adr16_dfm() // 11e0 fff8 +void m68000_mcu_device::move_b_pais_adr16_dfm() // 11e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -37467,7 +37467,7 @@ void m68000_device::move_b_pais_adr16_dfm() // 11e0 fff8 return; } -void m68000_device::move_b_das_adr16_dfm() // 11e8 fff8 +void m68000_mcu_device::move_b_das_adr16_dfm() // 11e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -37590,7 +37590,7 @@ void m68000_device::move_b_das_adr16_dfm() // 11e8 fff8 return; } -void m68000_device::move_b_dais_adr16_dfm() // 11f0 fff8 +void m68000_mcu_device::move_b_dais_adr16_dfm() // 11f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -37751,7 +37751,7 @@ adsw2: return; } -void m68000_device::move_b_adr16_adr16_dfm() // 11f8 ffff +void m68000_mcu_device::move_b_adr16_adr16_dfm() // 11f8 ffff { // 00a abwl1 m_aob = m_au; @@ -37873,7 +37873,7 @@ void m68000_device::move_b_adr16_adr16_dfm() // 11f8 ffff return; } -void m68000_device::move_b_adr32_adr16_dfm() // 11f9 ffff +void m68000_mcu_device::move_b_adr32_adr16_dfm() // 11f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -38016,7 +38016,7 @@ void m68000_device::move_b_adr32_adr16_dfm() // 11f9 ffff return; } -void m68000_device::move_b_dpc_adr16_dfm() // 11fa ffff +void m68000_mcu_device::move_b_dpc_adr16_dfm() // 11fa ffff { // 1c2 adsw1 m_aob = m_au; @@ -38138,7 +38138,7 @@ void m68000_device::move_b_dpc_adr16_dfm() // 11fa ffff return; } -void m68000_device::move_b_dpci_adr16_dfm() // 11fb ffff +void m68000_mcu_device::move_b_dpci_adr16_dfm() // 11fb ffff { // 1e3 aixl0 // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 @@ -38298,7 +38298,7 @@ adsw2: return; } -void m68000_device::move_b_imm8_adr16_dfm() // 11fc ffff +void m68000_mcu_device::move_b_imm8_adr16_dfm() // 11fc ffff { // 0ea e#w1 m_aob = m_au; @@ -38402,7 +38402,7 @@ void m68000_device::move_b_imm8_adr16_dfm() // 11fc ffff return; } -void m68000_device::move_b_ds_adr32_dfm() // 13c0 fff8 +void m68000_mcu_device::move_b_ds_adr32_dfm() // 13c0 fff8 { int ry = m_irdi & 7; // 1ea ralw1 @@ -38504,7 +38504,7 @@ void m68000_device::move_b_ds_adr32_dfm() // 13c0 fff8 return; } -void m68000_device::move_b_ais_adr32_dfm() // 13d0 fff8 +void m68000_mcu_device::move_b_ais_adr32_dfm() // 13d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -38625,7 +38625,7 @@ void m68000_device::move_b_ais_adr32_dfm() // 13d0 fff8 return; } -void m68000_device::move_b_aips_adr32_dfm() // 13d8 fff8 +void m68000_mcu_device::move_b_aips_adr32_dfm() // 13d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -38750,7 +38750,7 @@ void m68000_device::move_b_aips_adr32_dfm() // 13d8 fff8 return; } -void m68000_device::move_b_pais_adr32_dfm() // 13e0 fff8 +void m68000_mcu_device::move_b_pais_adr32_dfm() // 13e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -38877,7 +38877,7 @@ void m68000_device::move_b_pais_adr32_dfm() // 13e0 fff8 return; } -void m68000_device::move_b_das_adr32_dfm() // 13e8 fff8 +void m68000_mcu_device::move_b_das_adr32_dfm() // 13e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -39020,7 +39020,7 @@ void m68000_device::move_b_das_adr32_dfm() // 13e8 fff8 return; } -void m68000_device::move_b_dais_adr32_dfm() // 13f0 fff8 +void m68000_mcu_device::move_b_dais_adr32_dfm() // 13f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -39201,7 +39201,7 @@ adsw2: return; } -void m68000_device::move_b_adr16_adr32_dfm() // 13f8 ffff +void m68000_mcu_device::move_b_adr16_adr32_dfm() // 13f8 ffff { // 00a abwl1 m_aob = m_au; @@ -39343,7 +39343,7 @@ void m68000_device::move_b_adr16_adr32_dfm() // 13f8 ffff return; } -void m68000_device::move_b_adr32_adr32_dfm() // 13f9 ffff +void m68000_mcu_device::move_b_adr32_adr32_dfm() // 13f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -39506,7 +39506,7 @@ void m68000_device::move_b_adr32_adr32_dfm() // 13f9 ffff return; } -void m68000_device::move_b_dpc_adr32_dfm() // 13fa ffff +void m68000_mcu_device::move_b_dpc_adr32_dfm() // 13fa ffff { // 1c2 adsw1 m_aob = m_au; @@ -39648,7 +39648,7 @@ void m68000_device::move_b_dpc_adr32_dfm() // 13fa ffff return; } -void m68000_device::move_b_dpci_adr32_dfm() // 13fb ffff +void m68000_mcu_device::move_b_dpci_adr32_dfm() // 13fb ffff { // 1e3 aixl0 // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 @@ -39828,7 +39828,7 @@ adsw2: return; } -void m68000_device::move_b_imm8_adr32_dfm() // 13fc ffff +void m68000_mcu_device::move_b_imm8_adr32_dfm() // 13fc ffff { // 0ea e#w1 m_aob = m_au; @@ -39953,7 +39953,7 @@ void m68000_device::move_b_imm8_adr32_dfm() // 13fc ffff return; } -void m68000_device::move_l_ds_dd_dfm() // 2000 f1f8 +void m68000_mcu_device::move_l_ds_dd_dfm() // 2000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -39998,7 +39998,7 @@ void m68000_device::move_l_ds_dd_dfm() // 2000 f1f8 return; } -void m68000_device::move_l_as_dd_dfm() // 2008 f1f8 +void m68000_mcu_device::move_l_as_dd_dfm() // 2008 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -40043,7 +40043,7 @@ void m68000_device::move_l_as_dd_dfm() // 2008 f1f8 return; } -void m68000_device::move_l_ais_dd_dfm() // 2010 f1f8 +void m68000_mcu_device::move_l_ais_dd_dfm() // 2010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -40133,7 +40133,7 @@ void m68000_device::move_l_ais_dd_dfm() // 2010 f1f8 return; } -void m68000_device::move_l_aips_dd_dfm() // 2018 f1f8 +void m68000_mcu_device::move_l_aips_dd_dfm() // 2018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -40226,7 +40226,7 @@ void m68000_device::move_l_aips_dd_dfm() // 2018 f1f8 return; } -void m68000_device::move_l_pais_dd_dfm() // 2020 f1f8 +void m68000_mcu_device::move_l_pais_dd_dfm() // 2020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -40320,7 +40320,7 @@ void m68000_device::move_l_pais_dd_dfm() // 2020 f1f8 return; } -void m68000_device::move_l_das_dd_dfm() // 2028 f1f8 +void m68000_mcu_device::move_l_das_dd_dfm() // 2028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -40431,7 +40431,7 @@ void m68000_device::move_l_das_dd_dfm() // 2028 f1f8 return; } -void m68000_device::move_l_dais_dd_dfm() // 2030 f1f8 +void m68000_mcu_device::move_l_dais_dd_dfm() // 2030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -40580,7 +40580,7 @@ adsl2: return; } -void m68000_device::move_l_adr16_dd_dfm() // 2038 f1ff +void m68000_mcu_device::move_l_adr16_dd_dfm() // 2038 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -40693,7 +40693,7 @@ void m68000_device::move_l_adr16_dd_dfm() // 2038 f1ff return; } -void m68000_device::move_l_adr32_dd_dfm() // 2039 f1ff +void m68000_mcu_device::move_l_adr32_dd_dfm() // 2039 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -40827,7 +40827,7 @@ void m68000_device::move_l_adr32_dd_dfm() // 2039 f1ff return; } -void m68000_device::move_l_dpc_dd_dfm() // 203a f1ff +void m68000_mcu_device::move_l_dpc_dd_dfm() // 203a f1ff { int rx = (m_irdi >> 9) & 7; // 1c6 adsl1 @@ -40937,7 +40937,7 @@ void m68000_device::move_l_dpc_dd_dfm() // 203a f1ff return; } -void m68000_device::move_l_dpci_dd_dfm() // 203b f1ff +void m68000_mcu_device::move_l_dpci_dd_dfm() // 203b f1ff { int rx = (m_irdi >> 9) & 7; // 1e7 aixw0 @@ -41085,7 +41085,7 @@ adsl2: return; } -void m68000_device::move_l_imm32_dd_dfm() // 203c f1ff +void m68000_mcu_device::move_l_imm32_dd_dfm() // 203c f1ff { int rx = (m_irdi >> 9) & 7; // 0a7 e#l1 @@ -41174,7 +41174,7 @@ void m68000_device::move_l_imm32_dd_dfm() // 203c f1ff return; } -void m68000_device::movea_l_ds_ad_dfm() // 2040 f1f8 +void m68000_mcu_device::movea_l_ds_ad_dfm() // 2040 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -41217,7 +41217,7 @@ void m68000_device::movea_l_ds_ad_dfm() // 2040 f1f8 return; } -void m68000_device::movea_l_as_ad_dfm() // 2048 f1f8 +void m68000_mcu_device::movea_l_as_ad_dfm() // 2048 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -41260,7 +41260,7 @@ void m68000_device::movea_l_as_ad_dfm() // 2048 f1f8 return; } -void m68000_device::movea_l_ais_ad_dfm() // 2050 f1f8 +void m68000_mcu_device::movea_l_ais_ad_dfm() // 2050 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -41348,7 +41348,7 @@ void m68000_device::movea_l_ais_ad_dfm() // 2050 f1f8 return; } -void m68000_device::movea_l_aips_ad_dfm() // 2058 f1f8 +void m68000_mcu_device::movea_l_aips_ad_dfm() // 2058 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -41439,7 +41439,7 @@ void m68000_device::movea_l_aips_ad_dfm() // 2058 f1f8 return; } -void m68000_device::movea_l_pais_ad_dfm() // 2060 f1f8 +void m68000_mcu_device::movea_l_pais_ad_dfm() // 2060 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -41531,7 +41531,7 @@ void m68000_device::movea_l_pais_ad_dfm() // 2060 f1f8 return; } -void m68000_device::movea_l_das_ad_dfm() // 2068 f1f8 +void m68000_mcu_device::movea_l_das_ad_dfm() // 2068 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -41640,7 +41640,7 @@ void m68000_device::movea_l_das_ad_dfm() // 2068 f1f8 return; } -void m68000_device::movea_l_dais_ad_dfm() // 2070 f1f8 +void m68000_mcu_device::movea_l_dais_ad_dfm() // 2070 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -41787,7 +41787,7 @@ adsl2: return; } -void m68000_device::movea_l_adr16_ad_dfm() // 2078 f1ff +void m68000_mcu_device::movea_l_adr16_ad_dfm() // 2078 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -41898,7 +41898,7 @@ void m68000_device::movea_l_adr16_ad_dfm() // 2078 f1ff return; } -void m68000_device::movea_l_adr32_ad_dfm() // 2079 f1ff +void m68000_mcu_device::movea_l_adr32_ad_dfm() // 2079 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -42030,7 +42030,7 @@ void m68000_device::movea_l_adr32_ad_dfm() // 2079 f1ff return; } -void m68000_device::movea_l_dpc_ad_dfm() // 207a f1ff +void m68000_mcu_device::movea_l_dpc_ad_dfm() // 207a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -42138,7 +42138,7 @@ void m68000_device::movea_l_dpc_ad_dfm() // 207a f1ff return; } -void m68000_device::movea_l_dpci_ad_dfm() // 207b f1ff +void m68000_mcu_device::movea_l_dpci_ad_dfm() // 207b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -42284,7 +42284,7 @@ adsl2: return; } -void m68000_device::movea_l_imm32_ad_dfm() // 207c f1ff +void m68000_mcu_device::movea_l_imm32_ad_dfm() // 207c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -42371,7 +42371,7 @@ void m68000_device::movea_l_imm32_ad_dfm() // 207c f1ff return; } -void m68000_device::move_l_ds_aid_dfm() // 2080 f1f8 +void m68000_mcu_device::move_l_ds_aid_dfm() // 2080 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -42455,7 +42455,7 @@ void m68000_device::move_l_ds_aid_dfm() // 2080 f1f8 return; } -void m68000_device::move_l_as_aid_dfm() // 2088 f1f8 +void m68000_mcu_device::move_l_as_aid_dfm() // 2088 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -42539,7 +42539,7 @@ void m68000_device::move_l_as_aid_dfm() // 2088 f1f8 return; } -void m68000_device::move_l_ais_aid_dfm() // 2090 f1f8 +void m68000_mcu_device::move_l_ais_aid_dfm() // 2090 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -42668,7 +42668,7 @@ void m68000_device::move_l_ais_aid_dfm() // 2090 f1f8 return; } -void m68000_device::move_l_aips_aid_dfm() // 2098 f1f8 +void m68000_mcu_device::move_l_aips_aid_dfm() // 2098 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -42800,7 +42800,7 @@ void m68000_device::move_l_aips_aid_dfm() // 2098 f1f8 return; } -void m68000_device::move_l_pais_aid_dfm() // 20a0 f1f8 +void m68000_mcu_device::move_l_pais_aid_dfm() // 20a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -42933,7 +42933,7 @@ void m68000_device::move_l_pais_aid_dfm() // 20a0 f1f8 return; } -void m68000_device::move_l_das_aid_dfm() // 20a8 f1f8 +void m68000_mcu_device::move_l_das_aid_dfm() // 20a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -43083,7 +43083,7 @@ void m68000_device::move_l_das_aid_dfm() // 20a8 f1f8 return; } -void m68000_device::move_l_dais_aid_dfm() // 20b0 f1f8 +void m68000_mcu_device::move_l_dais_aid_dfm() // 20b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -43271,7 +43271,7 @@ adsl2: return; } -void m68000_device::move_l_adr16_aid_dfm() // 20b8 f1ff +void m68000_mcu_device::move_l_adr16_aid_dfm() // 20b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -43423,7 +43423,7 @@ void m68000_device::move_l_adr16_aid_dfm() // 20b8 f1ff return; } -void m68000_device::move_l_adr32_aid_dfm() // 20b9 f1ff +void m68000_mcu_device::move_l_adr32_aid_dfm() // 20b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -43596,7 +43596,7 @@ void m68000_device::move_l_adr32_aid_dfm() // 20b9 f1ff return; } -void m68000_device::move_l_dpc_aid_dfm() // 20ba f1ff +void m68000_mcu_device::move_l_dpc_aid_dfm() // 20ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -43745,7 +43745,7 @@ void m68000_device::move_l_dpc_aid_dfm() // 20ba f1ff return; } -void m68000_device::move_l_dpci_aid_dfm() // 20bb f1ff +void m68000_mcu_device::move_l_dpci_aid_dfm() // 20bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -43932,7 +43932,7 @@ adsl2: return; } -void m68000_device::move_l_imm32_aid_dfm() // 20bc f1ff +void m68000_mcu_device::move_l_imm32_aid_dfm() // 20bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -44060,7 +44060,7 @@ void m68000_device::move_l_imm32_aid_dfm() // 20bc f1ff return; } -void m68000_device::move_l_ds_aipd_dfm() // 20c0 f1f8 +void m68000_mcu_device::move_l_ds_aipd_dfm() // 20c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -44144,7 +44144,7 @@ void m68000_device::move_l_ds_aipd_dfm() // 20c0 f1f8 return; } -void m68000_device::move_l_as_aipd_dfm() // 20c8 f1f8 +void m68000_mcu_device::move_l_as_aipd_dfm() // 20c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -44228,7 +44228,7 @@ void m68000_device::move_l_as_aipd_dfm() // 20c8 f1f8 return; } -void m68000_device::move_l_ais_aipd_dfm() // 20d0 f1f8 +void m68000_mcu_device::move_l_ais_aipd_dfm() // 20d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -44356,7 +44356,7 @@ void m68000_device::move_l_ais_aipd_dfm() // 20d0 f1f8 return; } -void m68000_device::move_l_aips_aipd_dfm() // 20d8 f1f8 +void m68000_mcu_device::move_l_aips_aipd_dfm() // 20d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -44487,7 +44487,7 @@ void m68000_device::move_l_aips_aipd_dfm() // 20d8 f1f8 return; } -void m68000_device::move_l_pais_aipd_dfm() // 20e0 f1f8 +void m68000_mcu_device::move_l_pais_aipd_dfm() // 20e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -44619,7 +44619,7 @@ void m68000_device::move_l_pais_aipd_dfm() // 20e0 f1f8 return; } -void m68000_device::move_l_das_aipd_dfm() // 20e8 f1f8 +void m68000_mcu_device::move_l_das_aipd_dfm() // 20e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -44768,7 +44768,7 @@ void m68000_device::move_l_das_aipd_dfm() // 20e8 f1f8 return; } -void m68000_device::move_l_dais_aipd_dfm() // 20f0 f1f8 +void m68000_mcu_device::move_l_dais_aipd_dfm() // 20f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -44955,7 +44955,7 @@ adsl2: return; } -void m68000_device::move_l_adr16_aipd_dfm() // 20f8 f1ff +void m68000_mcu_device::move_l_adr16_aipd_dfm() // 20f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -45106,7 +45106,7 @@ void m68000_device::move_l_adr16_aipd_dfm() // 20f8 f1ff return; } -void m68000_device::move_l_adr32_aipd_dfm() // 20f9 f1ff +void m68000_mcu_device::move_l_adr32_aipd_dfm() // 20f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -45278,7 +45278,7 @@ void m68000_device::move_l_adr32_aipd_dfm() // 20f9 f1ff return; } -void m68000_device::move_l_dpc_aipd_dfm() // 20fa f1ff +void m68000_mcu_device::move_l_dpc_aipd_dfm() // 20fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -45426,7 +45426,7 @@ void m68000_device::move_l_dpc_aipd_dfm() // 20fa f1ff return; } -void m68000_device::move_l_dpci_aipd_dfm() // 20fb f1ff +void m68000_mcu_device::move_l_dpci_aipd_dfm() // 20fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -45612,7 +45612,7 @@ adsl2: return; } -void m68000_device::move_l_imm32_aipd_dfm() // 20fc f1ff +void m68000_mcu_device::move_l_imm32_aipd_dfm() // 20fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -45740,7 +45740,7 @@ void m68000_device::move_l_imm32_aipd_dfm() // 20fc f1ff return; } -void m68000_device::move_l_ds_paid_dfm() // 2100 f1f8 +void m68000_mcu_device::move_l_ds_paid_dfm() // 2100 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -45823,7 +45823,7 @@ void m68000_device::move_l_ds_paid_dfm() // 2100 f1f8 return; } -void m68000_device::move_l_as_paid_dfm() // 2108 f1f8 +void m68000_mcu_device::move_l_as_paid_dfm() // 2108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -45906,7 +45906,7 @@ void m68000_device::move_l_as_paid_dfm() // 2108 f1f8 return; } -void m68000_device::move_l_ais_paid_dfm() // 2110 f1f8 +void m68000_mcu_device::move_l_ais_paid_dfm() // 2110 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -46034,7 +46034,7 @@ void m68000_device::move_l_ais_paid_dfm() // 2110 f1f8 return; } -void m68000_device::move_l_aips_paid_dfm() // 2118 f1f8 +void m68000_mcu_device::move_l_aips_paid_dfm() // 2118 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -46165,7 +46165,7 @@ void m68000_device::move_l_aips_paid_dfm() // 2118 f1f8 return; } -void m68000_device::move_l_pais_paid_dfm() // 2120 f1f8 +void m68000_mcu_device::move_l_pais_paid_dfm() // 2120 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -46297,7 +46297,7 @@ void m68000_device::move_l_pais_paid_dfm() // 2120 f1f8 return; } -void m68000_device::move_l_das_paid_dfm() // 2128 f1f8 +void m68000_mcu_device::move_l_das_paid_dfm() // 2128 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -46446,7 +46446,7 @@ void m68000_device::move_l_das_paid_dfm() // 2128 f1f8 return; } -void m68000_device::move_l_dais_paid_dfm() // 2130 f1f8 +void m68000_mcu_device::move_l_dais_paid_dfm() // 2130 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -46633,7 +46633,7 @@ adsl2: return; } -void m68000_device::move_l_adr16_paid_dfm() // 2138 f1ff +void m68000_mcu_device::move_l_adr16_paid_dfm() // 2138 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -46784,7 +46784,7 @@ void m68000_device::move_l_adr16_paid_dfm() // 2138 f1ff return; } -void m68000_device::move_l_adr32_paid_dfm() // 2139 f1ff +void m68000_mcu_device::move_l_adr32_paid_dfm() // 2139 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -46956,7 +46956,7 @@ void m68000_device::move_l_adr32_paid_dfm() // 2139 f1ff return; } -void m68000_device::move_l_dpc_paid_dfm() // 213a f1ff +void m68000_mcu_device::move_l_dpc_paid_dfm() // 213a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -47104,7 +47104,7 @@ void m68000_device::move_l_dpc_paid_dfm() // 213a f1ff return; } -void m68000_device::move_l_dpci_paid_dfm() // 213b f1ff +void m68000_mcu_device::move_l_dpci_paid_dfm() // 213b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -47290,7 +47290,7 @@ adsl2: return; } -void m68000_device::move_l_imm32_paid_dfm() // 213c f1ff +void m68000_mcu_device::move_l_imm32_paid_dfm() // 213c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -47417,7 +47417,7 @@ void m68000_device::move_l_imm32_paid_dfm() // 213c f1ff return; } -void m68000_device::move_l_ds_dad_dfm() // 2140 f1f8 +void m68000_mcu_device::move_l_ds_dad_dfm() // 2140 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -47524,7 +47524,7 @@ void m68000_device::move_l_ds_dad_dfm() // 2140 f1f8 return; } -void m68000_device::move_l_as_dad_dfm() // 2148 f1f8 +void m68000_mcu_device::move_l_as_dad_dfm() // 2148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -47631,7 +47631,7 @@ void m68000_device::move_l_as_dad_dfm() // 2148 f1f8 return; } -void m68000_device::move_l_ais_dad_dfm() // 2150 f1f8 +void m68000_mcu_device::move_l_ais_dad_dfm() // 2150 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -47786,7 +47786,7 @@ void m68000_device::move_l_ais_dad_dfm() // 2150 f1f8 return; } -void m68000_device::move_l_aips_dad_dfm() // 2158 f1f8 +void m68000_mcu_device::move_l_aips_dad_dfm() // 2158 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -47944,7 +47944,7 @@ void m68000_device::move_l_aips_dad_dfm() // 2158 f1f8 return; } -void m68000_device::move_l_pais_dad_dfm() // 2160 f1f8 +void m68000_mcu_device::move_l_pais_dad_dfm() // 2160 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -48103,7 +48103,7 @@ void m68000_device::move_l_pais_dad_dfm() // 2160 f1f8 return; } -void m68000_device::move_l_das_dad_dfm() // 2168 f1f8 +void m68000_mcu_device::move_l_das_dad_dfm() // 2168 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -48279,7 +48279,7 @@ void m68000_device::move_l_das_dad_dfm() // 2168 f1f8 return; } -void m68000_device::move_l_dais_dad_dfm() // 2170 f1f8 +void m68000_mcu_device::move_l_dais_dad_dfm() // 2170 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -48493,7 +48493,7 @@ adsl2: return; } -void m68000_device::move_l_adr16_dad_dfm() // 2178 f1ff +void m68000_mcu_device::move_l_adr16_dad_dfm() // 2178 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -48671,7 +48671,7 @@ void m68000_device::move_l_adr16_dad_dfm() // 2178 f1ff return; } -void m68000_device::move_l_adr32_dad_dfm() // 2179 f1ff +void m68000_mcu_device::move_l_adr32_dad_dfm() // 2179 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -48870,7 +48870,7 @@ void m68000_device::move_l_adr32_dad_dfm() // 2179 f1ff return; } -void m68000_device::move_l_dpc_dad_dfm() // 217a f1ff +void m68000_mcu_device::move_l_dpc_dad_dfm() // 217a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -49045,7 +49045,7 @@ void m68000_device::move_l_dpc_dad_dfm() // 217a f1ff return; } -void m68000_device::move_l_dpci_dad_dfm() // 217b f1ff +void m68000_mcu_device::move_l_dpci_dad_dfm() // 217b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -49258,7 +49258,7 @@ adsl2: return; } -void m68000_device::move_l_imm32_dad_dfm() // 217c f1ff +void m68000_mcu_device::move_l_imm32_dad_dfm() // 217c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -49409,7 +49409,7 @@ void m68000_device::move_l_imm32_dad_dfm() // 217c f1ff return; } -void m68000_device::move_l_ds_daid_dfm() // 2180 f1f8 +void m68000_mcu_device::move_l_ds_daid_dfm() // 2180 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -49555,7 +49555,7 @@ rmdl2: return; } -void m68000_device::move_l_as_daid_dfm() // 2188 f1f8 +void m68000_mcu_device::move_l_as_daid_dfm() // 2188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -49701,7 +49701,7 @@ rmdl2: return; } -void m68000_device::move_l_ais_daid_dfm() // 2190 f1f8 +void m68000_mcu_device::move_l_ais_daid_dfm() // 2190 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -49894,7 +49894,7 @@ mawl2: return; } -void m68000_device::move_l_aips_daid_dfm() // 2198 f1f8 +void m68000_mcu_device::move_l_aips_daid_dfm() // 2198 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50090,7 +50090,7 @@ mawl2: return; } -void m68000_device::move_l_pais_daid_dfm() // 21a0 f1f8 +void m68000_mcu_device::move_l_pais_daid_dfm() // 21a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50287,7 +50287,7 @@ mawl2: return; } -void m68000_device::move_l_das_daid_dfm() // 21a8 f1f8 +void m68000_mcu_device::move_l_das_daid_dfm() // 21a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50501,7 +50501,7 @@ mawl2: return; } -void m68000_device::move_l_dais_daid_dfm() // 21b0 f1f8 +void m68000_mcu_device::move_l_dais_daid_dfm() // 21b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50753,7 +50753,7 @@ mawl2: return; } -void m68000_device::move_l_adr16_daid_dfm() // 21b8 f1ff +void m68000_mcu_device::move_l_adr16_daid_dfm() // 21b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -50969,7 +50969,7 @@ mawl2: return; } -void m68000_device::move_l_adr32_daid_dfm() // 21b9 f1ff +void m68000_mcu_device::move_l_adr32_daid_dfm() // 21b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -51206,7 +51206,7 @@ mawl2: return; } -void m68000_device::move_l_dpc_daid_dfm() // 21ba f1ff +void m68000_mcu_device::move_l_dpc_daid_dfm() // 21ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -51419,7 +51419,7 @@ mawl2: return; } -void m68000_device::move_l_dpci_daid_dfm() // 21bb f1ff +void m68000_mcu_device::move_l_dpci_daid_dfm() // 21bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -51670,7 +51670,7 @@ mawl2: return; } -void m68000_device::move_l_imm32_daid_dfm() // 21bc f1ff +void m68000_mcu_device::move_l_imm32_daid_dfm() // 21bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -51860,7 +51860,7 @@ rmdl2: return; } -void m68000_device::move_l_ds_adr16_dfm() // 21c0 fff8 +void m68000_mcu_device::move_l_ds_adr16_dfm() // 21c0 fff8 { int ry = m_irdi & 7; // 2dd rawl1 @@ -51970,7 +51970,7 @@ void m68000_device::move_l_ds_adr16_dfm() // 21c0 fff8 return; } -void m68000_device::move_l_as_adr16_dfm() // 21c8 fff8 +void m68000_mcu_device::move_l_as_adr16_dfm() // 21c8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2dd rawl1 @@ -52080,7 +52080,7 @@ void m68000_device::move_l_as_adr16_dfm() // 21c8 fff8 return; } -void m68000_device::move_l_ais_adr16_dfm() // 21d0 fff8 +void m68000_mcu_device::move_l_ais_adr16_dfm() // 21d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -52234,7 +52234,7 @@ void m68000_device::move_l_ais_adr16_dfm() // 21d0 fff8 return; } -void m68000_device::move_l_aips_adr16_dfm() // 21d8 fff8 +void m68000_mcu_device::move_l_aips_adr16_dfm() // 21d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -52391,7 +52391,7 @@ void m68000_device::move_l_aips_adr16_dfm() // 21d8 fff8 return; } -void m68000_device::move_l_pais_adr16_dfm() // 21e0 fff8 +void m68000_mcu_device::move_l_pais_adr16_dfm() // 21e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -52549,7 +52549,7 @@ void m68000_device::move_l_pais_adr16_dfm() // 21e0 fff8 return; } -void m68000_device::move_l_das_adr16_dfm() // 21e8 fff8 +void m68000_mcu_device::move_l_das_adr16_dfm() // 21e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -52724,7 +52724,7 @@ void m68000_device::move_l_das_adr16_dfm() // 21e8 fff8 return; } -void m68000_device::move_l_dais_adr16_dfm() // 21f0 fff8 +void m68000_mcu_device::move_l_dais_adr16_dfm() // 21f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -52937,7 +52937,7 @@ adsl2: return; } -void m68000_device::move_l_adr16_adr16_dfm() // 21f8 ffff +void m68000_mcu_device::move_l_adr16_adr16_dfm() // 21f8 ffff { // 00e abww1 m_aob = m_au; @@ -53114,7 +53114,7 @@ void m68000_device::move_l_adr16_adr16_dfm() // 21f8 ffff return; } -void m68000_device::move_l_adr32_adr16_dfm() // 21f9 ffff +void m68000_mcu_device::move_l_adr32_adr16_dfm() // 21f9 ffff { // 1e6 ablw1 m_aob = m_au; @@ -53312,7 +53312,7 @@ void m68000_device::move_l_adr32_adr16_dfm() // 21f9 ffff return; } -void m68000_device::move_l_dpc_adr16_dfm() // 21fa ffff +void m68000_mcu_device::move_l_dpc_adr16_dfm() // 21fa ffff { // 1c6 adsl1 m_aob = m_au; @@ -53486,7 +53486,7 @@ void m68000_device::move_l_dpc_adr16_dfm() // 21fa ffff return; } -void m68000_device::move_l_dpci_adr16_dfm() // 21fb ffff +void m68000_mcu_device::move_l_dpci_adr16_dfm() // 21fb ffff { // 1e7 aixw0 // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -53698,7 +53698,7 @@ adsl2: return; } -void m68000_device::move_l_imm32_adr16_dfm() // 21fc ffff +void m68000_mcu_device::move_l_imm32_adr16_dfm() // 21fc ffff { // 0a7 e#l1 m_aob = m_au; @@ -53852,7 +53852,7 @@ void m68000_device::move_l_imm32_adr16_dfm() // 21fc ffff return; } -void m68000_device::move_l_ds_adr32_dfm() // 23c0 fff8 +void m68000_mcu_device::move_l_ds_adr32_dfm() // 23c0 fff8 { int ry = m_irdi & 7; // 1ee rall1 @@ -53983,7 +53983,7 @@ void m68000_device::move_l_ds_adr32_dfm() // 23c0 fff8 return; } -void m68000_device::move_l_as_adr32_dfm() // 23c8 fff8 +void m68000_mcu_device::move_l_as_adr32_dfm() // 23c8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1ee rall1 @@ -54114,7 +54114,7 @@ void m68000_device::move_l_as_adr32_dfm() // 23c8 fff8 return; } -void m68000_device::move_l_ais_adr32_dfm() // 23d0 fff8 +void m68000_mcu_device::move_l_ais_adr32_dfm() // 23d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -54290,7 +54290,7 @@ void m68000_device::move_l_ais_adr32_dfm() // 23d0 fff8 return; } -void m68000_device::move_l_aips_adr32_dfm() // 23d8 fff8 +void m68000_mcu_device::move_l_aips_adr32_dfm() // 23d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -54469,7 +54469,7 @@ void m68000_device::move_l_aips_adr32_dfm() // 23d8 fff8 return; } -void m68000_device::move_l_pais_adr32_dfm() // 23e0 fff8 +void m68000_mcu_device::move_l_pais_adr32_dfm() // 23e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -54649,7 +54649,7 @@ void m68000_device::move_l_pais_adr32_dfm() // 23e0 fff8 return; } -void m68000_device::move_l_das_adr32_dfm() // 23e8 fff8 +void m68000_mcu_device::move_l_das_adr32_dfm() // 23e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -54846,7 +54846,7 @@ void m68000_device::move_l_das_adr32_dfm() // 23e8 fff8 return; } -void m68000_device::move_l_dais_adr32_dfm() // 23f0 fff8 +void m68000_mcu_device::move_l_dais_adr32_dfm() // 23f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -55081,7 +55081,7 @@ adsl2: return; } -void m68000_device::move_l_adr16_adr32_dfm() // 23f8 ffff +void m68000_mcu_device::move_l_adr16_adr32_dfm() // 23f8 ffff { // 00e abww1 m_aob = m_au; @@ -55280,7 +55280,7 @@ void m68000_device::move_l_adr16_adr32_dfm() // 23f8 ffff return; } -void m68000_device::move_l_adr32_adr32_dfm() // 23f9 ffff +void m68000_mcu_device::move_l_adr32_adr32_dfm() // 23f9 ffff { // 1e6 ablw1 m_aob = m_au; @@ -55500,7 +55500,7 @@ void m68000_device::move_l_adr32_adr32_dfm() // 23f9 ffff return; } -void m68000_device::move_l_dpc_adr32_dfm() // 23fa ffff +void m68000_mcu_device::move_l_dpc_adr32_dfm() // 23fa ffff { // 1c6 adsl1 m_aob = m_au; @@ -55696,7 +55696,7 @@ void m68000_device::move_l_dpc_adr32_dfm() // 23fa ffff return; } -void m68000_device::move_l_dpci_adr32_dfm() // 23fb ffff +void m68000_mcu_device::move_l_dpci_adr32_dfm() // 23fb ffff { // 1e7 aixw0 // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -55930,7 +55930,7 @@ adsl2: return; } -void m68000_device::move_l_imm32_adr32_dfm() // 23fc ffff +void m68000_mcu_device::move_l_imm32_adr32_dfm() // 23fc ffff { // 0a7 e#l1 m_aob = m_au; @@ -56105,7 +56105,7 @@ void m68000_device::move_l_imm32_adr32_dfm() // 23fc ffff return; } -void m68000_device::move_w_ds_dd_dfm() // 3000 f1f8 +void m68000_mcu_device::move_w_ds_dd_dfm() // 3000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -56148,7 +56148,7 @@ void m68000_device::move_w_ds_dd_dfm() // 3000 f1f8 return; } -void m68000_device::move_w_as_dd_dfm() // 3008 f1f8 +void m68000_mcu_device::move_w_as_dd_dfm() // 3008 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -56191,7 +56191,7 @@ void m68000_device::move_w_as_dd_dfm() // 3008 f1f8 return; } -void m68000_device::move_w_ais_dd_dfm() // 3010 f1f8 +void m68000_mcu_device::move_w_ais_dd_dfm() // 3010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -56256,7 +56256,7 @@ void m68000_device::move_w_ais_dd_dfm() // 3010 f1f8 return; } -void m68000_device::move_w_aips_dd_dfm() // 3018 f1f8 +void m68000_mcu_device::move_w_aips_dd_dfm() // 3018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -56325,7 +56325,7 @@ void m68000_device::move_w_aips_dd_dfm() // 3018 f1f8 return; } -void m68000_device::move_w_pais_dd_dfm() // 3020 f1f8 +void m68000_mcu_device::move_w_pais_dd_dfm() // 3020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -56396,7 +56396,7 @@ void m68000_device::move_w_pais_dd_dfm() // 3020 f1f8 return; } -void m68000_device::move_w_das_dd_dfm() // 3028 f1f8 +void m68000_mcu_device::move_w_das_dd_dfm() // 3028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -56483,7 +56483,7 @@ void m68000_device::move_w_das_dd_dfm() // 3028 f1f8 return; } -void m68000_device::move_w_dais_dd_dfm() // 3030 f1f8 +void m68000_mcu_device::move_w_dais_dd_dfm() // 3030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -56608,7 +56608,7 @@ adsw2: return; } -void m68000_device::move_w_adr16_dd_dfm() // 3038 f1ff +void m68000_mcu_device::move_w_adr16_dd_dfm() // 3038 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -56694,7 +56694,7 @@ void m68000_device::move_w_adr16_dd_dfm() // 3038 f1ff return; } -void m68000_device::move_w_adr32_dd_dfm() // 3039 f1ff +void m68000_mcu_device::move_w_adr32_dd_dfm() // 3039 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -56801,7 +56801,7 @@ void m68000_device::move_w_adr32_dd_dfm() // 3039 f1ff return; } -void m68000_device::move_w_dpc_dd_dfm() // 303a f1ff +void m68000_mcu_device::move_w_dpc_dd_dfm() // 303a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -56887,7 +56887,7 @@ void m68000_device::move_w_dpc_dd_dfm() // 303a f1ff return; } -void m68000_device::move_w_dpci_dd_dfm() // 303b f1ff +void m68000_mcu_device::move_w_dpci_dd_dfm() // 303b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -57011,7 +57011,7 @@ adsw2: return; } -void m68000_device::move_w_imm16_dd_dfm() // 303c f1ff +void m68000_mcu_device::move_w_imm16_dd_dfm() // 303c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -57077,7 +57077,7 @@ void m68000_device::move_w_imm16_dd_dfm() // 303c f1ff return; } -void m68000_device::movea_w_ds_ad_dfm() // 3040 f1f8 +void m68000_mcu_device::movea_w_ds_ad_dfm() // 3040 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -57118,7 +57118,7 @@ void m68000_device::movea_w_ds_ad_dfm() // 3040 f1f8 return; } -void m68000_device::movea_w_as_ad_dfm() // 3048 f1f8 +void m68000_mcu_device::movea_w_as_ad_dfm() // 3048 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57159,7 +57159,7 @@ void m68000_device::movea_w_as_ad_dfm() // 3048 f1f8 return; } -void m68000_device::movea_w_ais_ad_dfm() // 3050 f1f8 +void m68000_mcu_device::movea_w_ais_ad_dfm() // 3050 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57221,7 +57221,7 @@ void m68000_device::movea_w_ais_ad_dfm() // 3050 f1f8 return; } -void m68000_device::movea_w_aips_ad_dfm() // 3058 f1f8 +void m68000_mcu_device::movea_w_aips_ad_dfm() // 3058 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57287,7 +57287,7 @@ void m68000_device::movea_w_aips_ad_dfm() // 3058 f1f8 return; } -void m68000_device::movea_w_pais_ad_dfm() // 3060 f1f8 +void m68000_mcu_device::movea_w_pais_ad_dfm() // 3060 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57355,7 +57355,7 @@ void m68000_device::movea_w_pais_ad_dfm() // 3060 f1f8 return; } -void m68000_device::movea_w_das_ad_dfm() // 3068 f1f8 +void m68000_mcu_device::movea_w_das_ad_dfm() // 3068 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57439,7 +57439,7 @@ void m68000_device::movea_w_das_ad_dfm() // 3068 f1f8 return; } -void m68000_device::movea_w_dais_ad_dfm() // 3070 f1f8 +void m68000_mcu_device::movea_w_dais_ad_dfm() // 3070 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57561,7 +57561,7 @@ adsw2: return; } -void m68000_device::movea_w_adr16_ad_dfm() // 3078 f1ff +void m68000_mcu_device::movea_w_adr16_ad_dfm() // 3078 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -57644,7 +57644,7 @@ void m68000_device::movea_w_adr16_ad_dfm() // 3078 f1ff return; } -void m68000_device::movea_w_adr32_ad_dfm() // 3079 f1ff +void m68000_mcu_device::movea_w_adr32_ad_dfm() // 3079 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -57748,7 +57748,7 @@ void m68000_device::movea_w_adr32_ad_dfm() // 3079 f1ff return; } -void m68000_device::movea_w_dpc_ad_dfm() // 307a f1ff +void m68000_mcu_device::movea_w_dpc_ad_dfm() // 307a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -57831,7 +57831,7 @@ void m68000_device::movea_w_dpc_ad_dfm() // 307a f1ff return; } -void m68000_device::movea_w_dpci_ad_dfm() // 307b f1ff +void m68000_mcu_device::movea_w_dpci_ad_dfm() // 307b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -57952,7 +57952,7 @@ adsw2: return; } -void m68000_device::movea_w_imm16_ad_dfm() // 307c f1ff +void m68000_mcu_device::movea_w_imm16_ad_dfm() // 307c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -58016,7 +58016,7 @@ void m68000_device::movea_w_imm16_ad_dfm() // 307c f1ff return; } -void m68000_device::move_w_ds_aid_dfm() // 3080 f1f8 +void m68000_mcu_device::move_w_ds_aid_dfm() // 3080 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -58077,7 +58077,7 @@ void m68000_device::move_w_ds_aid_dfm() // 3080 f1f8 return; } -void m68000_device::move_w_as_aid_dfm() // 3088 f1f8 +void m68000_mcu_device::move_w_as_aid_dfm() // 3088 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -58138,7 +58138,7 @@ void m68000_device::move_w_as_aid_dfm() // 3088 f1f8 return; } -void m68000_device::move_w_ais_aid_dfm() // 3090 f1f8 +void m68000_mcu_device::move_w_ais_aid_dfm() // 3090 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -58222,7 +58222,7 @@ void m68000_device::move_w_ais_aid_dfm() // 3090 f1f8 return; } -void m68000_device::move_w_aips_aid_dfm() // 3098 f1f8 +void m68000_mcu_device::move_w_aips_aid_dfm() // 3098 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -58310,7 +58310,7 @@ void m68000_device::move_w_aips_aid_dfm() // 3098 f1f8 return; } -void m68000_device::move_w_pais_aid_dfm() // 30a0 f1f8 +void m68000_mcu_device::move_w_pais_aid_dfm() // 30a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -58400,7 +58400,7 @@ void m68000_device::move_w_pais_aid_dfm() // 30a0 f1f8 return; } -void m68000_device::move_w_das_aid_dfm() // 30a8 f1f8 +void m68000_mcu_device::move_w_das_aid_dfm() // 30a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -58506,7 +58506,7 @@ void m68000_device::move_w_das_aid_dfm() // 30a8 f1f8 return; } -void m68000_device::move_w_dais_aid_dfm() // 30b0 f1f8 +void m68000_mcu_device::move_w_dais_aid_dfm() // 30b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -58650,7 +58650,7 @@ adsw2: return; } -void m68000_device::move_w_adr16_aid_dfm() // 30b8 f1ff +void m68000_mcu_device::move_w_adr16_aid_dfm() // 30b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -58755,7 +58755,7 @@ void m68000_device::move_w_adr16_aid_dfm() // 30b8 f1ff return; } -void m68000_device::move_w_adr32_aid_dfm() // 30b9 f1ff +void m68000_mcu_device::move_w_adr32_aid_dfm() // 30b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -58881,7 +58881,7 @@ void m68000_device::move_w_adr32_aid_dfm() // 30b9 f1ff return; } -void m68000_device::move_w_dpc_aid_dfm() // 30ba f1ff +void m68000_mcu_device::move_w_dpc_aid_dfm() // 30ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -58986,7 +58986,7 @@ void m68000_device::move_w_dpc_aid_dfm() // 30ba f1ff return; } -void m68000_device::move_w_dpci_aid_dfm() // 30bb f1ff +void m68000_mcu_device::move_w_dpci_aid_dfm() // 30bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -59129,7 +59129,7 @@ adsw2: return; } -void m68000_device::move_w_imm16_aid_dfm() // 30bc f1ff +void m68000_mcu_device::move_w_imm16_aid_dfm() // 30bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -59213,7 +59213,7 @@ void m68000_device::move_w_imm16_aid_dfm() // 30bc f1ff return; } -void m68000_device::move_w_ds_aipd_dfm() // 30c0 f1f8 +void m68000_mcu_device::move_w_ds_aipd_dfm() // 30c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -59273,7 +59273,7 @@ void m68000_device::move_w_ds_aipd_dfm() // 30c0 f1f8 return; } -void m68000_device::move_w_as_aipd_dfm() // 30c8 f1f8 +void m68000_mcu_device::move_w_as_aipd_dfm() // 30c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -59333,7 +59333,7 @@ void m68000_device::move_w_as_aipd_dfm() // 30c8 f1f8 return; } -void m68000_device::move_w_ais_aipd_dfm() // 30d0 f1f8 +void m68000_mcu_device::move_w_ais_aipd_dfm() // 30d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -59417,7 +59417,7 @@ void m68000_device::move_w_ais_aipd_dfm() // 30d0 f1f8 return; } -void m68000_device::move_w_aips_aipd_dfm() // 30d8 f1f8 +void m68000_mcu_device::move_w_aips_aipd_dfm() // 30d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -59505,7 +59505,7 @@ void m68000_device::move_w_aips_aipd_dfm() // 30d8 f1f8 return; } -void m68000_device::move_w_pais_aipd_dfm() // 30e0 f1f8 +void m68000_mcu_device::move_w_pais_aipd_dfm() // 30e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -59595,7 +59595,7 @@ void m68000_device::move_w_pais_aipd_dfm() // 30e0 f1f8 return; } -void m68000_device::move_w_das_aipd_dfm() // 30e8 f1f8 +void m68000_mcu_device::move_w_das_aipd_dfm() // 30e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -59701,7 +59701,7 @@ void m68000_device::move_w_das_aipd_dfm() // 30e8 f1f8 return; } -void m68000_device::move_w_dais_aipd_dfm() // 30f0 f1f8 +void m68000_mcu_device::move_w_dais_aipd_dfm() // 30f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -59845,7 +59845,7 @@ adsw2: return; } -void m68000_device::move_w_adr16_aipd_dfm() // 30f8 f1ff +void m68000_mcu_device::move_w_adr16_aipd_dfm() // 30f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -59950,7 +59950,7 @@ void m68000_device::move_w_adr16_aipd_dfm() // 30f8 f1ff return; } -void m68000_device::move_w_adr32_aipd_dfm() // 30f9 f1ff +void m68000_mcu_device::move_w_adr32_aipd_dfm() // 30f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -60076,7 +60076,7 @@ void m68000_device::move_w_adr32_aipd_dfm() // 30f9 f1ff return; } -void m68000_device::move_w_dpc_aipd_dfm() // 30fa f1ff +void m68000_mcu_device::move_w_dpc_aipd_dfm() // 30fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -60181,7 +60181,7 @@ void m68000_device::move_w_dpc_aipd_dfm() // 30fa f1ff return; } -void m68000_device::move_w_dpci_aipd_dfm() // 30fb f1ff +void m68000_mcu_device::move_w_dpci_aipd_dfm() // 30fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -60324,7 +60324,7 @@ adsw2: return; } -void m68000_device::move_w_imm16_aipd_dfm() // 30fc f1ff +void m68000_mcu_device::move_w_imm16_aipd_dfm() // 30fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -60407,7 +60407,7 @@ void m68000_device::move_w_imm16_aipd_dfm() // 30fc f1ff return; } -void m68000_device::move_w_ds_paid_dfm() // 3100 f1f8 +void m68000_mcu_device::move_w_ds_paid_dfm() // 3100 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -60467,7 +60467,7 @@ void m68000_device::move_w_ds_paid_dfm() // 3100 f1f8 return; } -void m68000_device::move_w_as_paid_dfm() // 3108 f1f8 +void m68000_mcu_device::move_w_as_paid_dfm() // 3108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -60527,7 +60527,7 @@ void m68000_device::move_w_as_paid_dfm() // 3108 f1f8 return; } -void m68000_device::move_w_ais_paid_dfm() // 3110 f1f8 +void m68000_mcu_device::move_w_ais_paid_dfm() // 3110 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -60611,7 +60611,7 @@ void m68000_device::move_w_ais_paid_dfm() // 3110 f1f8 return; } -void m68000_device::move_w_aips_paid_dfm() // 3118 f1f8 +void m68000_mcu_device::move_w_aips_paid_dfm() // 3118 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -60699,7 +60699,7 @@ void m68000_device::move_w_aips_paid_dfm() // 3118 f1f8 return; } -void m68000_device::move_w_pais_paid_dfm() // 3120 f1f8 +void m68000_mcu_device::move_w_pais_paid_dfm() // 3120 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -60789,7 +60789,7 @@ void m68000_device::move_w_pais_paid_dfm() // 3120 f1f8 return; } -void m68000_device::move_w_das_paid_dfm() // 3128 f1f8 +void m68000_mcu_device::move_w_das_paid_dfm() // 3128 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -60895,7 +60895,7 @@ void m68000_device::move_w_das_paid_dfm() // 3128 f1f8 return; } -void m68000_device::move_w_dais_paid_dfm() // 3130 f1f8 +void m68000_mcu_device::move_w_dais_paid_dfm() // 3130 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -61039,7 +61039,7 @@ adsw2: return; } -void m68000_device::move_w_adr16_paid_dfm() // 3138 f1ff +void m68000_mcu_device::move_w_adr16_paid_dfm() // 3138 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -61144,7 +61144,7 @@ void m68000_device::move_w_adr16_paid_dfm() // 3138 f1ff return; } -void m68000_device::move_w_adr32_paid_dfm() // 3139 f1ff +void m68000_mcu_device::move_w_adr32_paid_dfm() // 3139 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -61270,7 +61270,7 @@ void m68000_device::move_w_adr32_paid_dfm() // 3139 f1ff return; } -void m68000_device::move_w_dpc_paid_dfm() // 313a f1ff +void m68000_mcu_device::move_w_dpc_paid_dfm() // 313a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -61375,7 +61375,7 @@ void m68000_device::move_w_dpc_paid_dfm() // 313a f1ff return; } -void m68000_device::move_w_dpci_paid_dfm() // 313b f1ff +void m68000_mcu_device::move_w_dpci_paid_dfm() // 313b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -61518,7 +61518,7 @@ adsw2: return; } -void m68000_device::move_w_imm16_paid_dfm() // 313c f1ff +void m68000_mcu_device::move_w_imm16_paid_dfm() // 313c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -61601,7 +61601,7 @@ void m68000_device::move_w_imm16_paid_dfm() // 313c f1ff return; } -void m68000_device::move_w_ds_dad_dfm() // 3140 f1f8 +void m68000_mcu_device::move_w_ds_dad_dfm() // 3140 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -61683,7 +61683,7 @@ void m68000_device::move_w_ds_dad_dfm() // 3140 f1f8 return; } -void m68000_device::move_w_as_dad_dfm() // 3148 f1f8 +void m68000_mcu_device::move_w_as_dad_dfm() // 3148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -61765,7 +61765,7 @@ void m68000_device::move_w_as_dad_dfm() // 3148 f1f8 return; } -void m68000_device::move_w_ais_dad_dfm() // 3150 f1f8 +void m68000_mcu_device::move_w_ais_dad_dfm() // 3150 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -61875,7 +61875,7 @@ void m68000_device::move_w_ais_dad_dfm() // 3150 f1f8 return; } -void m68000_device::move_w_aips_dad_dfm() // 3158 f1f8 +void m68000_mcu_device::move_w_aips_dad_dfm() // 3158 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -61989,7 +61989,7 @@ void m68000_device::move_w_aips_dad_dfm() // 3158 f1f8 return; } -void m68000_device::move_w_pais_dad_dfm() // 3160 f1f8 +void m68000_mcu_device::move_w_pais_dad_dfm() // 3160 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -62105,7 +62105,7 @@ void m68000_device::move_w_pais_dad_dfm() // 3160 f1f8 return; } -void m68000_device::move_w_das_dad_dfm() // 3168 f1f8 +void m68000_mcu_device::move_w_das_dad_dfm() // 3168 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -62237,7 +62237,7 @@ void m68000_device::move_w_das_dad_dfm() // 3168 f1f8 return; } -void m68000_device::move_w_dais_dad_dfm() // 3170 f1f8 +void m68000_mcu_device::move_w_dais_dad_dfm() // 3170 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -62407,7 +62407,7 @@ adsw2: return; } -void m68000_device::move_w_adr16_dad_dfm() // 3178 f1ff +void m68000_mcu_device::move_w_adr16_dad_dfm() // 3178 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -62538,7 +62538,7 @@ void m68000_device::move_w_adr16_dad_dfm() // 3178 f1ff return; } -void m68000_device::move_w_adr32_dad_dfm() // 3179 f1ff +void m68000_mcu_device::move_w_adr32_dad_dfm() // 3179 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -62690,7 +62690,7 @@ void m68000_device::move_w_adr32_dad_dfm() // 3179 f1ff return; } -void m68000_device::move_w_dpc_dad_dfm() // 317a f1ff +void m68000_mcu_device::move_w_dpc_dad_dfm() // 317a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -62821,7 +62821,7 @@ void m68000_device::move_w_dpc_dad_dfm() // 317a f1ff return; } -void m68000_device::move_w_dpci_dad_dfm() // 317b f1ff +void m68000_mcu_device::move_w_dpci_dad_dfm() // 317b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -62990,7 +62990,7 @@ adsw2: return; } -void m68000_device::move_w_imm16_dad_dfm() // 317c f1ff +void m68000_mcu_device::move_w_imm16_dad_dfm() // 317c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -63095,7 +63095,7 @@ void m68000_device::move_w_imm16_dad_dfm() // 317c f1ff return; } -void m68000_device::move_w_ds_daid_dfm() // 3180 f1f8 +void m68000_mcu_device::move_w_ds_daid_dfm() // 3180 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -63216,7 +63216,7 @@ rmdw2: return; } -void m68000_device::move_w_as_daid_dfm() // 3188 f1f8 +void m68000_mcu_device::move_w_as_daid_dfm() // 3188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -63337,7 +63337,7 @@ rmdw2: return; } -void m68000_device::move_w_ais_daid_dfm() // 3190 f1f8 +void m68000_mcu_device::move_w_ais_daid_dfm() // 3190 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -63485,7 +63485,7 @@ maww2: return; } -void m68000_device::move_w_aips_daid_dfm() // 3198 f1f8 +void m68000_mcu_device::move_w_aips_daid_dfm() // 3198 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -63637,7 +63637,7 @@ maww2: return; } -void m68000_device::move_w_pais_daid_dfm() // 31a0 f1f8 +void m68000_mcu_device::move_w_pais_daid_dfm() // 31a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -63791,7 +63791,7 @@ maww2: return; } -void m68000_device::move_w_das_daid_dfm() // 31a8 f1f8 +void m68000_mcu_device::move_w_das_daid_dfm() // 31a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -63961,7 +63961,7 @@ maww2: return; } -void m68000_device::move_w_dais_daid_dfm() // 31b0 f1f8 +void m68000_mcu_device::move_w_dais_daid_dfm() // 31b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -64169,7 +64169,7 @@ maww2: return; } -void m68000_device::move_w_adr16_daid_dfm() // 31b8 f1ff +void m68000_mcu_device::move_w_adr16_daid_dfm() // 31b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -64338,7 +64338,7 @@ maww2: return; } -void m68000_device::move_w_adr32_daid_dfm() // 31b9 f1ff +void m68000_mcu_device::move_w_adr32_daid_dfm() // 31b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -64528,7 +64528,7 @@ maww2: return; } -void m68000_device::move_w_dpc_daid_dfm() // 31ba f1ff +void m68000_mcu_device::move_w_dpc_daid_dfm() // 31ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -64697,7 +64697,7 @@ maww2: return; } -void m68000_device::move_w_dpci_daid_dfm() // 31bb f1ff +void m68000_mcu_device::move_w_dpci_daid_dfm() // 31bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -64904,7 +64904,7 @@ maww2: return; } -void m68000_device::move_w_imm16_daid_dfm() // 31bc f1ff +void m68000_mcu_device::move_w_imm16_daid_dfm() // 31bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -65048,7 +65048,7 @@ rmdw2: return; } -void m68000_device::move_w_ds_adr16_dfm() // 31c0 fff8 +void m68000_mcu_device::move_w_ds_adr16_dfm() // 31c0 fff8 { int ry = m_irdi & 7; // 2d9 raww1 @@ -65134,7 +65134,7 @@ void m68000_device::move_w_ds_adr16_dfm() // 31c0 fff8 return; } -void m68000_device::move_w_as_adr16_dfm() // 31c8 fff8 +void m68000_mcu_device::move_w_as_adr16_dfm() // 31c8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2d9 raww1 @@ -65220,7 +65220,7 @@ void m68000_device::move_w_as_adr16_dfm() // 31c8 fff8 return; } -void m68000_device::move_w_ais_adr16_dfm() // 31d0 fff8 +void m68000_mcu_device::move_w_ais_adr16_dfm() // 31d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -65329,7 +65329,7 @@ void m68000_device::move_w_ais_adr16_dfm() // 31d0 fff8 return; } -void m68000_device::move_w_aips_adr16_dfm() // 31d8 fff8 +void m68000_mcu_device::move_w_aips_adr16_dfm() // 31d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -65442,7 +65442,7 @@ void m68000_device::move_w_aips_adr16_dfm() // 31d8 fff8 return; } -void m68000_device::move_w_pais_adr16_dfm() // 31e0 fff8 +void m68000_mcu_device::move_w_pais_adr16_dfm() // 31e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -65557,7 +65557,7 @@ void m68000_device::move_w_pais_adr16_dfm() // 31e0 fff8 return; } -void m68000_device::move_w_das_adr16_dfm() // 31e8 fff8 +void m68000_mcu_device::move_w_das_adr16_dfm() // 31e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -65688,7 +65688,7 @@ void m68000_device::move_w_das_adr16_dfm() // 31e8 fff8 return; } -void m68000_device::move_w_dais_adr16_dfm() // 31f0 fff8 +void m68000_mcu_device::move_w_dais_adr16_dfm() // 31f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -65857,7 +65857,7 @@ adsw2: return; } -void m68000_device::move_w_adr16_adr16_dfm() // 31f8 ffff +void m68000_mcu_device::move_w_adr16_adr16_dfm() // 31f8 ffff { // 00a abwl1 m_aob = m_au; @@ -65987,7 +65987,7 @@ void m68000_device::move_w_adr16_adr16_dfm() // 31f8 ffff return; } -void m68000_device::move_w_adr32_adr16_dfm() // 31f9 ffff +void m68000_mcu_device::move_w_adr32_adr16_dfm() // 31f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -66138,7 +66138,7 @@ void m68000_device::move_w_adr32_adr16_dfm() // 31f9 ffff return; } -void m68000_device::move_w_dpc_adr16_dfm() // 31fa ffff +void m68000_mcu_device::move_w_dpc_adr16_dfm() // 31fa ffff { // 1c2 adsw1 m_aob = m_au; @@ -66268,7 +66268,7 @@ void m68000_device::move_w_dpc_adr16_dfm() // 31fa ffff return; } -void m68000_device::move_w_dpci_adr16_dfm() // 31fb ffff +void m68000_mcu_device::move_w_dpci_adr16_dfm() // 31fb ffff { // 1e3 aixl0 // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -66436,7 +66436,7 @@ adsw2: return; } -void m68000_device::move_w_imm16_adr16_dfm() // 31fc ffff +void m68000_mcu_device::move_w_imm16_adr16_dfm() // 31fc ffff { // 0ea e#w1 m_aob = m_au; @@ -66545,7 +66545,7 @@ void m68000_device::move_w_imm16_adr16_dfm() // 31fc ffff return; } -void m68000_device::move_w_ds_adr32_dfm() // 33c0 fff8 +void m68000_mcu_device::move_w_ds_adr32_dfm() // 33c0 fff8 { int ry = m_irdi & 7; // 1ea ralw1 @@ -66652,7 +66652,7 @@ void m68000_device::move_w_ds_adr32_dfm() // 33c0 fff8 return; } -void m68000_device::move_w_as_adr32_dfm() // 33c8 fff8 +void m68000_mcu_device::move_w_as_adr32_dfm() // 33c8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1ea ralw1 @@ -66759,7 +66759,7 @@ void m68000_device::move_w_as_adr32_dfm() // 33c8 fff8 return; } -void m68000_device::move_w_ais_adr32_dfm() // 33d0 fff8 +void m68000_mcu_device::move_w_ais_adr32_dfm() // 33d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -66888,7 +66888,7 @@ void m68000_device::move_w_ais_adr32_dfm() // 33d0 fff8 return; } -void m68000_device::move_w_aips_adr32_dfm() // 33d8 fff8 +void m68000_mcu_device::move_w_aips_adr32_dfm() // 33d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -67021,7 +67021,7 @@ void m68000_device::move_w_aips_adr32_dfm() // 33d8 fff8 return; } -void m68000_device::move_w_pais_adr32_dfm() // 33e0 fff8 +void m68000_mcu_device::move_w_pais_adr32_dfm() // 33e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -67156,7 +67156,7 @@ void m68000_device::move_w_pais_adr32_dfm() // 33e0 fff8 return; } -void m68000_device::move_w_das_adr32_dfm() // 33e8 fff8 +void m68000_mcu_device::move_w_das_adr32_dfm() // 33e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -67307,7 +67307,7 @@ void m68000_device::move_w_das_adr32_dfm() // 33e8 fff8 return; } -void m68000_device::move_w_dais_adr32_dfm() // 33f0 fff8 +void m68000_mcu_device::move_w_dais_adr32_dfm() // 33f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -67496,7 +67496,7 @@ adsw2: return; } -void m68000_device::move_w_adr16_adr32_dfm() // 33f8 ffff +void m68000_mcu_device::move_w_adr16_adr32_dfm() // 33f8 ffff { // 00a abwl1 m_aob = m_au; @@ -67646,7 +67646,7 @@ void m68000_device::move_w_adr16_adr32_dfm() // 33f8 ffff return; } -void m68000_device::move_w_adr32_adr32_dfm() // 33f9 ffff +void m68000_mcu_device::move_w_adr32_adr32_dfm() // 33f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -67817,7 +67817,7 @@ void m68000_device::move_w_adr32_adr32_dfm() // 33f9 ffff return; } -void m68000_device::move_w_dpc_adr32_dfm() // 33fa ffff +void m68000_mcu_device::move_w_dpc_adr32_dfm() // 33fa ffff { // 1c2 adsw1 m_aob = m_au; @@ -67967,7 +67967,7 @@ void m68000_device::move_w_dpc_adr32_dfm() // 33fa ffff return; } -void m68000_device::move_w_dpci_adr32_dfm() // 33fb ffff +void m68000_mcu_device::move_w_dpci_adr32_dfm() // 33fb ffff { // 1e3 aixl0 // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -68155,7 +68155,7 @@ adsw2: return; } -void m68000_device::move_w_imm16_adr32_dfm() // 33fc ffff +void m68000_mcu_device::move_w_imm16_adr32_dfm() // 33fc ffff { // 0ea e#w1 m_aob = m_au; @@ -68285,7 +68285,7 @@ void m68000_device::move_w_imm16_adr32_dfm() // 33fc ffff return; } -void m68000_device::negx_b_ds_dfm() // 4000 fff8 +void m68000_mcu_device::negx_b_ds_dfm() // 4000 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -68326,7 +68326,7 @@ void m68000_device::negx_b_ds_dfm() // 4000 fff8 return; } -void m68000_device::negx_b_ais_dfm() // 4010 fff8 +void m68000_mcu_device::negx_b_ais_dfm() // 4010 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -68400,7 +68400,7 @@ void m68000_device::negx_b_ais_dfm() // 4010 fff8 return; } -void m68000_device::negx_b_aips_dfm() // 4018 fff8 +void m68000_mcu_device::negx_b_aips_dfm() // 4018 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -68478,7 +68478,7 @@ void m68000_device::negx_b_aips_dfm() // 4018 fff8 return; } -void m68000_device::negx_b_pais_dfm() // 4020 fff8 +void m68000_mcu_device::negx_b_pais_dfm() // 4020 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -68558,7 +68558,7 @@ void m68000_device::negx_b_pais_dfm() // 4020 fff8 return; } -void m68000_device::negx_b_das_dfm() // 4028 fff8 +void m68000_mcu_device::negx_b_das_dfm() // 4028 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -68654,7 +68654,7 @@ void m68000_device::negx_b_das_dfm() // 4028 fff8 return; } -void m68000_device::negx_b_dais_dfm() // 4030 fff8 +void m68000_mcu_device::negx_b_dais_dfm() // 4030 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -68788,7 +68788,7 @@ adsw2: return; } -void m68000_device::negx_b_adr16_dfm() // 4038 ffff +void m68000_mcu_device::negx_b_adr16_dfm() // 4038 ffff { // 00a abwl1 m_aob = m_au; @@ -68883,7 +68883,7 @@ void m68000_device::negx_b_adr16_dfm() // 4038 ffff return; } -void m68000_device::negx_b_adr32_dfm() // 4039 ffff +void m68000_mcu_device::negx_b_adr32_dfm() // 4039 ffff { // 1e2 abll1 m_aob = m_au; @@ -68999,7 +68999,7 @@ void m68000_device::negx_b_adr32_dfm() // 4039 ffff return; } -void m68000_device::negx_w_ds_dfm() // 4040 fff8 +void m68000_mcu_device::negx_w_ds_dfm() // 4040 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -69040,7 +69040,7 @@ void m68000_device::negx_w_ds_dfm() // 4040 fff8 return; } -void m68000_device::negx_w_ais_dfm() // 4050 fff8 +void m68000_mcu_device::negx_w_ais_dfm() // 4050 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -69122,7 +69122,7 @@ void m68000_device::negx_w_ais_dfm() // 4050 fff8 return; } -void m68000_device::negx_w_aips_dfm() // 4058 fff8 +void m68000_mcu_device::negx_w_aips_dfm() // 4058 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -69208,7 +69208,7 @@ void m68000_device::negx_w_aips_dfm() // 4058 fff8 return; } -void m68000_device::negx_w_pais_dfm() // 4060 fff8 +void m68000_mcu_device::negx_w_pais_dfm() // 4060 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -69296,7 +69296,7 @@ void m68000_device::negx_w_pais_dfm() // 4060 fff8 return; } -void m68000_device::negx_w_das_dfm() // 4068 fff8 +void m68000_mcu_device::negx_w_das_dfm() // 4068 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -69400,7 +69400,7 @@ void m68000_device::negx_w_das_dfm() // 4068 fff8 return; } -void m68000_device::negx_w_dais_dfm() // 4070 fff8 +void m68000_mcu_device::negx_w_dais_dfm() // 4070 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -69542,7 +69542,7 @@ adsw2: return; } -void m68000_device::negx_w_adr16_dfm() // 4078 ffff +void m68000_mcu_device::negx_w_adr16_dfm() // 4078 ffff { // 00a abwl1 m_aob = m_au; @@ -69645,7 +69645,7 @@ void m68000_device::negx_w_adr16_dfm() // 4078 ffff return; } -void m68000_device::negx_w_adr32_dfm() // 4079 ffff +void m68000_mcu_device::negx_w_adr32_dfm() // 4079 ffff { // 1e2 abll1 m_aob = m_au; @@ -69769,7 +69769,7 @@ void m68000_device::negx_w_adr32_dfm() // 4079 ffff return; } -void m68000_device::negx_l_ds_dfm() // 4080 fff8 +void m68000_mcu_device::negx_l_ds_dfm() // 4080 fff8 { int ry = m_irdi & 7; // 137 nnrl1 @@ -69816,7 +69816,7 @@ void m68000_device::negx_l_ds_dfm() // 4080 fff8 return; } -void m68000_device::negx_l_ais_dfm() // 4090 fff8 +void m68000_mcu_device::negx_l_ais_dfm() // 4090 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -69942,7 +69942,7 @@ void m68000_device::negx_l_ais_dfm() // 4090 fff8 return; } -void m68000_device::negx_l_aips_dfm() // 4098 fff8 +void m68000_mcu_device::negx_l_aips_dfm() // 4098 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -70071,7 +70071,7 @@ void m68000_device::negx_l_aips_dfm() // 4098 fff8 return; } -void m68000_device::negx_l_pais_dfm() // 40a0 fff8 +void m68000_mcu_device::negx_l_pais_dfm() // 40a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -70201,7 +70201,7 @@ void m68000_device::negx_l_pais_dfm() // 40a0 fff8 return; } -void m68000_device::negx_l_das_dfm() // 40a8 fff8 +void m68000_mcu_device::negx_l_das_dfm() // 40a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -70348,7 +70348,7 @@ void m68000_device::negx_l_das_dfm() // 40a8 fff8 return; } -void m68000_device::negx_l_dais_dfm() // 40b0 fff8 +void m68000_mcu_device::negx_l_dais_dfm() // 40b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -70533,7 +70533,7 @@ adsl2: return; } -void m68000_device::negx_l_adr16_dfm() // 40b8 ffff +void m68000_mcu_device::negx_l_adr16_dfm() // 40b8 ffff { // 00e abww1 m_aob = m_au; @@ -70682,7 +70682,7 @@ void m68000_device::negx_l_adr16_dfm() // 40b8 ffff return; } -void m68000_device::negx_l_adr32_dfm() // 40b9 ffff +void m68000_mcu_device::negx_l_adr32_dfm() // 40b9 ffff { // 1e6 ablw1 m_aob = m_au; @@ -70852,7 +70852,7 @@ void m68000_device::negx_l_adr32_dfm() // 40b9 ffff return; } -void m68000_device::move_sr_ds_dfm() // 40c0 fff8 +void m68000_mcu_device::move_sr_ds_dfm() // 40c0 fff8 { int ry = m_irdi & 7; // 3a5 strw1 @@ -70892,7 +70892,7 @@ void m68000_device::move_sr_ds_dfm() // 40c0 fff8 return; } -void m68000_device::move_sr_ais_dfm() // 40d0 fff8 +void m68000_mcu_device::move_sr_ais_dfm() // 40d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -70975,7 +70975,7 @@ void m68000_device::move_sr_ais_dfm() // 40d0 fff8 return; } -void m68000_device::move_sr_aips_dfm() // 40d8 fff8 +void m68000_mcu_device::move_sr_aips_dfm() // 40d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -71062,7 +71062,7 @@ void m68000_device::move_sr_aips_dfm() // 40d8 fff8 return; } -void m68000_device::move_sr_pais_dfm() // 40e0 fff8 +void m68000_mcu_device::move_sr_pais_dfm() // 40e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -71151,7 +71151,7 @@ void m68000_device::move_sr_pais_dfm() // 40e0 fff8 return; } -void m68000_device::move_sr_das_dfm() // 40e8 fff8 +void m68000_mcu_device::move_sr_das_dfm() // 40e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -71256,7 +71256,7 @@ void m68000_device::move_sr_das_dfm() // 40e8 fff8 return; } -void m68000_device::move_sr_dais_dfm() // 40f0 fff8 +void m68000_mcu_device::move_sr_dais_dfm() // 40f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -71399,7 +71399,7 @@ adsw2: return; } -void m68000_device::move_sr_adr16_dfm() // 40f8 ffff +void m68000_mcu_device::move_sr_adr16_dfm() // 40f8 ffff { // 00a abwl1 m_aob = m_au; @@ -71503,7 +71503,7 @@ void m68000_device::move_sr_adr16_dfm() // 40f8 ffff return; } -void m68000_device::move_sr_adr32_dfm() // 40f9 ffff +void m68000_mcu_device::move_sr_adr32_dfm() // 40f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -71628,7 +71628,7 @@ void m68000_device::move_sr_adr32_dfm() // 40f9 ffff return; } -void m68000_device::chk_w_ds_dd_dfm() // 4180 f1f8 +void m68000_mcu_device::chk_w_ds_dd_dfm() // 4180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -71848,7 +71848,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_ais_dd_dfm() // 4190 f1f8 +void m68000_mcu_device::chk_w_ais_dd_dfm() // 4190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -72092,7 +72092,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_aips_dd_dfm() // 4198 f1f8 +void m68000_mcu_device::chk_w_aips_dd_dfm() // 4198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -72340,7 +72340,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_pais_dd_dfm() // 41a0 f1f8 +void m68000_mcu_device::chk_w_pais_dd_dfm() // 41a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -72590,7 +72590,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_das_dd_dfm() // 41a8 f1f8 +void m68000_mcu_device::chk_w_das_dd_dfm() // 41a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -72856,7 +72856,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_dais_dd_dfm() // 41b0 f1f8 +void m68000_mcu_device::chk_w_dais_dd_dfm() // 41b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -73160,7 +73160,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_adr16_dd_dfm() // 41b8 f1ff +void m68000_mcu_device::chk_w_adr16_dd_dfm() // 41b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -73425,7 +73425,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_adr32_dd_dfm() // 41b9 f1ff +void m68000_mcu_device::chk_w_adr32_dd_dfm() // 41b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -73711,7 +73711,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_dpc_dd_dfm() // 41ba f1ff +void m68000_mcu_device::chk_w_dpc_dd_dfm() // 41ba f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -73976,7 +73976,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_dpci_dd_dfm() // 41bb f1ff +void m68000_mcu_device::chk_w_dpci_dd_dfm() // 41bb f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -74279,7 +74279,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_imm16_dd_dfm() // 41bc f1ff +void m68000_mcu_device::chk_w_imm16_dd_dfm() // 41bc f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -74522,7 +74522,7 @@ chkr4: goto mmrw3; } -void m68000_device::lea_ais_ad_dfm() // 41d0 f1f8 +void m68000_mcu_device::lea_ais_ad_dfm() // 41d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -74563,7 +74563,7 @@ void m68000_device::lea_ais_ad_dfm() // 41d0 f1f8 return; } -void m68000_device::lea_das_ad_dfm() // 41e8 f1f8 +void m68000_mcu_device::lea_das_ad_dfm() // 41e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -74623,7 +74623,7 @@ void m68000_device::lea_das_ad_dfm() // 41e8 f1f8 return; } -void m68000_device::lea_dais_ad_dfm() // 41f0 f1f8 +void m68000_mcu_device::lea_dais_ad_dfm() // 41f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -74723,7 +74723,7 @@ leax4: return; } -void m68000_device::lea_adr16_ad_dfm() // 41f8 f1ff +void m68000_mcu_device::lea_adr16_ad_dfm() // 41f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 275 laaw1 @@ -74780,7 +74780,7 @@ void m68000_device::lea_adr16_ad_dfm() // 41f8 f1ff return; } -void m68000_device::lea_adr32_ad_dfm() // 41f9 f1ff +void m68000_mcu_device::lea_adr32_ad_dfm() // 41f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 3e4 laal1 @@ -74860,7 +74860,7 @@ void m68000_device::lea_adr32_ad_dfm() // 41f9 f1ff return; } -void m68000_device::lea_dpc_ad_dfm() // 41fa f1ff +void m68000_mcu_device::lea_dpc_ad_dfm() // 41fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 2f2 lead1 @@ -74919,7 +74919,7 @@ void m68000_device::lea_dpc_ad_dfm() // 41fa f1ff return; } -void m68000_device::lea_dpci_ad_dfm() // 41fb f1ff +void m68000_mcu_device::lea_dpci_ad_dfm() // 41fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1fb leax0 @@ -75018,7 +75018,7 @@ leax4: return; } -void m68000_device::clr_b_ds_dfm() // 4200 fff8 +void m68000_mcu_device::clr_b_ds_dfm() // 4200 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -75060,7 +75060,7 @@ void m68000_device::clr_b_ds_dfm() // 4200 fff8 return; } -void m68000_device::clr_b_ais_dfm() // 4210 fff8 +void m68000_mcu_device::clr_b_ais_dfm() // 4210 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -75136,7 +75136,7 @@ void m68000_device::clr_b_ais_dfm() // 4210 fff8 return; } -void m68000_device::clr_b_aips_dfm() // 4218 fff8 +void m68000_mcu_device::clr_b_aips_dfm() // 4218 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -75217,7 +75217,7 @@ void m68000_device::clr_b_aips_dfm() // 4218 fff8 return; } -void m68000_device::clr_b_pais_dfm() // 4220 fff8 +void m68000_mcu_device::clr_b_pais_dfm() // 4220 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -75300,7 +75300,7 @@ void m68000_device::clr_b_pais_dfm() // 4220 fff8 return; } -void m68000_device::clr_b_das_dfm() // 4228 fff8 +void m68000_mcu_device::clr_b_das_dfm() // 4228 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -75399,7 +75399,7 @@ void m68000_device::clr_b_das_dfm() // 4228 fff8 return; } -void m68000_device::clr_b_dais_dfm() // 4230 fff8 +void m68000_mcu_device::clr_b_dais_dfm() // 4230 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -75538,7 +75538,7 @@ adsw2: return; } -void m68000_device::clr_b_adr16_dfm() // 4238 ffff +void m68000_mcu_device::clr_b_adr16_dfm() // 4238 ffff { // 00a abwl1 m_aob = m_au; @@ -75636,7 +75636,7 @@ void m68000_device::clr_b_adr16_dfm() // 4238 ffff return; } -void m68000_device::clr_b_adr32_dfm() // 4239 ffff +void m68000_mcu_device::clr_b_adr32_dfm() // 4239 ffff { // 1e2 abll1 m_aob = m_au; @@ -75756,7 +75756,7 @@ void m68000_device::clr_b_adr32_dfm() // 4239 ffff return; } -void m68000_device::clr_w_ds_dfm() // 4240 fff8 +void m68000_mcu_device::clr_w_ds_dfm() // 4240 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -75798,7 +75798,7 @@ void m68000_device::clr_w_ds_dfm() // 4240 fff8 return; } -void m68000_device::clr_w_ais_dfm() // 4250 fff8 +void m68000_mcu_device::clr_w_ais_dfm() // 4250 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -75882,7 +75882,7 @@ void m68000_device::clr_w_ais_dfm() // 4250 fff8 return; } -void m68000_device::clr_w_aips_dfm() // 4258 fff8 +void m68000_mcu_device::clr_w_aips_dfm() // 4258 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -75971,7 +75971,7 @@ void m68000_device::clr_w_aips_dfm() // 4258 fff8 return; } -void m68000_device::clr_w_pais_dfm() // 4260 fff8 +void m68000_mcu_device::clr_w_pais_dfm() // 4260 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -76062,7 +76062,7 @@ void m68000_device::clr_w_pais_dfm() // 4260 fff8 return; } -void m68000_device::clr_w_das_dfm() // 4268 fff8 +void m68000_mcu_device::clr_w_das_dfm() // 4268 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -76169,7 +76169,7 @@ void m68000_device::clr_w_das_dfm() // 4268 fff8 return; } -void m68000_device::clr_w_dais_dfm() // 4270 fff8 +void m68000_mcu_device::clr_w_dais_dfm() // 4270 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -76316,7 +76316,7 @@ adsw2: return; } -void m68000_device::clr_w_adr16_dfm() // 4278 ffff +void m68000_mcu_device::clr_w_adr16_dfm() // 4278 ffff { // 00a abwl1 m_aob = m_au; @@ -76422,7 +76422,7 @@ void m68000_device::clr_w_adr16_dfm() // 4278 ffff return; } -void m68000_device::clr_w_adr32_dfm() // 4279 ffff +void m68000_mcu_device::clr_w_adr32_dfm() // 4279 ffff { // 1e2 abll1 m_aob = m_au; @@ -76550,7 +76550,7 @@ void m68000_device::clr_w_adr32_dfm() // 4279 ffff return; } -void m68000_device::clr_l_ds_dfm() // 4280 fff8 +void m68000_mcu_device::clr_l_ds_dfm() // 4280 fff8 { int ry = m_irdi & 7; // 137 nnrl1 @@ -76598,7 +76598,7 @@ void m68000_device::clr_l_ds_dfm() // 4280 fff8 return; } -void m68000_device::clr_l_ais_dfm() // 4290 fff8 +void m68000_mcu_device::clr_l_ais_dfm() // 4290 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -76726,7 +76726,7 @@ void m68000_device::clr_l_ais_dfm() // 4290 fff8 return; } -void m68000_device::clr_l_aips_dfm() // 4298 fff8 +void m68000_mcu_device::clr_l_aips_dfm() // 4298 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -76858,7 +76858,7 @@ void m68000_device::clr_l_aips_dfm() // 4298 fff8 return; } -void m68000_device::clr_l_pais_dfm() // 42a0 fff8 +void m68000_mcu_device::clr_l_pais_dfm() // 42a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -76991,7 +76991,7 @@ void m68000_device::clr_l_pais_dfm() // 42a0 fff8 return; } -void m68000_device::clr_l_das_dfm() // 42a8 fff8 +void m68000_mcu_device::clr_l_das_dfm() // 42a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -77141,7 +77141,7 @@ void m68000_device::clr_l_das_dfm() // 42a8 fff8 return; } -void m68000_device::clr_l_dais_dfm() // 42b0 fff8 +void m68000_mcu_device::clr_l_dais_dfm() // 42b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -77331,7 +77331,7 @@ adsl2: return; } -void m68000_device::clr_l_adr16_dfm() // 42b8 ffff +void m68000_mcu_device::clr_l_adr16_dfm() // 42b8 ffff { // 00e abww1 m_aob = m_au; @@ -77484,7 +77484,7 @@ void m68000_device::clr_l_adr16_dfm() // 42b8 ffff return; } -void m68000_device::clr_l_adr32_dfm() // 42b9 ffff +void m68000_mcu_device::clr_l_adr32_dfm() // 42b9 ffff { // 1e6 ablw1 m_aob = m_au; @@ -77659,7 +77659,7 @@ void m68000_device::clr_l_adr32_dfm() // 42b9 ffff return; } -void m68000_device::neg_b_ds_dfm() // 4400 fff8 +void m68000_mcu_device::neg_b_ds_dfm() // 4400 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -77700,7 +77700,7 @@ void m68000_device::neg_b_ds_dfm() // 4400 fff8 return; } -void m68000_device::neg_b_ais_dfm() // 4410 fff8 +void m68000_mcu_device::neg_b_ais_dfm() // 4410 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -77774,7 +77774,7 @@ void m68000_device::neg_b_ais_dfm() // 4410 fff8 return; } -void m68000_device::neg_b_aips_dfm() // 4418 fff8 +void m68000_mcu_device::neg_b_aips_dfm() // 4418 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -77852,7 +77852,7 @@ void m68000_device::neg_b_aips_dfm() // 4418 fff8 return; } -void m68000_device::neg_b_pais_dfm() // 4420 fff8 +void m68000_mcu_device::neg_b_pais_dfm() // 4420 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -77932,7 +77932,7 @@ void m68000_device::neg_b_pais_dfm() // 4420 fff8 return; } -void m68000_device::neg_b_das_dfm() // 4428 fff8 +void m68000_mcu_device::neg_b_das_dfm() // 4428 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -78028,7 +78028,7 @@ void m68000_device::neg_b_das_dfm() // 4428 fff8 return; } -void m68000_device::neg_b_dais_dfm() // 4430 fff8 +void m68000_mcu_device::neg_b_dais_dfm() // 4430 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -78162,7 +78162,7 @@ adsw2: return; } -void m68000_device::neg_b_adr16_dfm() // 4438 ffff +void m68000_mcu_device::neg_b_adr16_dfm() // 4438 ffff { // 00a abwl1 m_aob = m_au; @@ -78257,7 +78257,7 @@ void m68000_device::neg_b_adr16_dfm() // 4438 ffff return; } -void m68000_device::neg_b_adr32_dfm() // 4439 ffff +void m68000_mcu_device::neg_b_adr32_dfm() // 4439 ffff { // 1e2 abll1 m_aob = m_au; @@ -78373,7 +78373,7 @@ void m68000_device::neg_b_adr32_dfm() // 4439 ffff return; } -void m68000_device::neg_w_ds_dfm() // 4440 fff8 +void m68000_mcu_device::neg_w_ds_dfm() // 4440 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -78414,7 +78414,7 @@ void m68000_device::neg_w_ds_dfm() // 4440 fff8 return; } -void m68000_device::neg_w_ais_dfm() // 4450 fff8 +void m68000_mcu_device::neg_w_ais_dfm() // 4450 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -78496,7 +78496,7 @@ void m68000_device::neg_w_ais_dfm() // 4450 fff8 return; } -void m68000_device::neg_w_aips_dfm() // 4458 fff8 +void m68000_mcu_device::neg_w_aips_dfm() // 4458 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -78582,7 +78582,7 @@ void m68000_device::neg_w_aips_dfm() // 4458 fff8 return; } -void m68000_device::neg_w_pais_dfm() // 4460 fff8 +void m68000_mcu_device::neg_w_pais_dfm() // 4460 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -78670,7 +78670,7 @@ void m68000_device::neg_w_pais_dfm() // 4460 fff8 return; } -void m68000_device::neg_w_das_dfm() // 4468 fff8 +void m68000_mcu_device::neg_w_das_dfm() // 4468 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -78774,7 +78774,7 @@ void m68000_device::neg_w_das_dfm() // 4468 fff8 return; } -void m68000_device::neg_w_dais_dfm() // 4470 fff8 +void m68000_mcu_device::neg_w_dais_dfm() // 4470 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -78916,7 +78916,7 @@ adsw2: return; } -void m68000_device::neg_w_adr16_dfm() // 4478 ffff +void m68000_mcu_device::neg_w_adr16_dfm() // 4478 ffff { // 00a abwl1 m_aob = m_au; @@ -79019,7 +79019,7 @@ void m68000_device::neg_w_adr16_dfm() // 4478 ffff return; } -void m68000_device::neg_w_adr32_dfm() // 4479 ffff +void m68000_mcu_device::neg_w_adr32_dfm() // 4479 ffff { // 1e2 abll1 m_aob = m_au; @@ -79143,7 +79143,7 @@ void m68000_device::neg_w_adr32_dfm() // 4479 ffff return; } -void m68000_device::neg_l_ds_dfm() // 4480 fff8 +void m68000_mcu_device::neg_l_ds_dfm() // 4480 fff8 { int ry = m_irdi & 7; // 137 nnrl1 @@ -79190,7 +79190,7 @@ void m68000_device::neg_l_ds_dfm() // 4480 fff8 return; } -void m68000_device::neg_l_ais_dfm() // 4490 fff8 +void m68000_mcu_device::neg_l_ais_dfm() // 4490 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -79316,7 +79316,7 @@ void m68000_device::neg_l_ais_dfm() // 4490 fff8 return; } -void m68000_device::neg_l_aips_dfm() // 4498 fff8 +void m68000_mcu_device::neg_l_aips_dfm() // 4498 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -79445,7 +79445,7 @@ void m68000_device::neg_l_aips_dfm() // 4498 fff8 return; } -void m68000_device::neg_l_pais_dfm() // 44a0 fff8 +void m68000_mcu_device::neg_l_pais_dfm() // 44a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -79575,7 +79575,7 @@ void m68000_device::neg_l_pais_dfm() // 44a0 fff8 return; } -void m68000_device::neg_l_das_dfm() // 44a8 fff8 +void m68000_mcu_device::neg_l_das_dfm() // 44a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -79722,7 +79722,7 @@ void m68000_device::neg_l_das_dfm() // 44a8 fff8 return; } -void m68000_device::neg_l_dais_dfm() // 44b0 fff8 +void m68000_mcu_device::neg_l_dais_dfm() // 44b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -79907,7 +79907,7 @@ adsl2: return; } -void m68000_device::neg_l_adr16_dfm() // 44b8 ffff +void m68000_mcu_device::neg_l_adr16_dfm() // 44b8 ffff { // 00e abww1 m_aob = m_au; @@ -80056,7 +80056,7 @@ void m68000_device::neg_l_adr16_dfm() // 44b8 ffff return; } -void m68000_device::neg_l_adr32_dfm() // 44b9 ffff +void m68000_mcu_device::neg_l_adr32_dfm() // 44b9 ffff { // 1e6 ablw1 m_aob = m_au; @@ -80226,7 +80226,7 @@ void m68000_device::neg_l_adr32_dfm() // 44b9 ffff return; } -void m68000_device::move_ds_ccr_dfm() // 44c0 fff8 +void m68000_mcu_device::move_ds_ccr_dfm() // 44c0 fff8 { int ry = m_irdi & 7; // 301 rstw1 @@ -80294,7 +80294,7 @@ void m68000_device::move_ds_ccr_dfm() // 44c0 fff8 return; } -void m68000_device::move_ais_ccr_dfm() // 44d0 fff8 +void m68000_mcu_device::move_ais_ccr_dfm() // 44d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -80386,7 +80386,7 @@ void m68000_device::move_ais_ccr_dfm() // 44d0 fff8 return; } -void m68000_device::move_aips_ccr_dfm() // 44d8 fff8 +void m68000_mcu_device::move_aips_ccr_dfm() // 44d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -80482,7 +80482,7 @@ void m68000_device::move_aips_ccr_dfm() // 44d8 fff8 return; } -void m68000_device::move_pais_ccr_dfm() // 44e0 fff8 +void m68000_mcu_device::move_pais_ccr_dfm() // 44e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -80580,7 +80580,7 @@ void m68000_device::move_pais_ccr_dfm() // 44e0 fff8 return; } -void m68000_device::move_das_ccr_dfm() // 44e8 fff8 +void m68000_mcu_device::move_das_ccr_dfm() // 44e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -80694,7 +80694,7 @@ void m68000_device::move_das_ccr_dfm() // 44e8 fff8 return; } -void m68000_device::move_dais_ccr_dfm() // 44f0 fff8 +void m68000_mcu_device::move_dais_ccr_dfm() // 44f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -80846,7 +80846,7 @@ adsw2: return; } -void m68000_device::move_adr16_ccr_dfm() // 44f8 ffff +void m68000_mcu_device::move_adr16_ccr_dfm() // 44f8 ffff { // 00a abwl1 m_aob = m_au; @@ -80959,7 +80959,7 @@ void m68000_device::move_adr16_ccr_dfm() // 44f8 ffff return; } -void m68000_device::move_adr32_ccr_dfm() // 44f9 ffff +void m68000_mcu_device::move_adr32_ccr_dfm() // 44f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -81093,7 +81093,7 @@ void m68000_device::move_adr32_ccr_dfm() // 44f9 ffff return; } -void m68000_device::move_dpc_ccr_dfm() // 44fa ffff +void m68000_mcu_device::move_dpc_ccr_dfm() // 44fa ffff { // 1c2 adsw1 m_aob = m_au; @@ -81206,7 +81206,7 @@ void m68000_device::move_dpc_ccr_dfm() // 44fa ffff return; } -void m68000_device::move_dpci_ccr_dfm() // 44fb ffff +void m68000_mcu_device::move_dpci_ccr_dfm() // 44fb ffff { // 1e3 aixl0 // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -81357,7 +81357,7 @@ adsw2: return; } -void m68000_device::move_imm8_ccr_dfm() // 44fc ffff +void m68000_mcu_device::move_imm8_ccr_dfm() // 44fc ffff { // 0ea e#w1 m_aob = m_au; @@ -81448,7 +81448,7 @@ void m68000_device::move_imm8_ccr_dfm() // 44fc ffff return; } -void m68000_device::not_b_ds_dfm() // 4600 fff8 +void m68000_mcu_device::not_b_ds_dfm() // 4600 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -81489,7 +81489,7 @@ void m68000_device::not_b_ds_dfm() // 4600 fff8 return; } -void m68000_device::not_b_ais_dfm() // 4610 fff8 +void m68000_mcu_device::not_b_ais_dfm() // 4610 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -81563,7 +81563,7 @@ void m68000_device::not_b_ais_dfm() // 4610 fff8 return; } -void m68000_device::not_b_aips_dfm() // 4618 fff8 +void m68000_mcu_device::not_b_aips_dfm() // 4618 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -81641,7 +81641,7 @@ void m68000_device::not_b_aips_dfm() // 4618 fff8 return; } -void m68000_device::not_b_pais_dfm() // 4620 fff8 +void m68000_mcu_device::not_b_pais_dfm() // 4620 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -81721,7 +81721,7 @@ void m68000_device::not_b_pais_dfm() // 4620 fff8 return; } -void m68000_device::not_b_das_dfm() // 4628 fff8 +void m68000_mcu_device::not_b_das_dfm() // 4628 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -81817,7 +81817,7 @@ void m68000_device::not_b_das_dfm() // 4628 fff8 return; } -void m68000_device::not_b_dais_dfm() // 4630 fff8 +void m68000_mcu_device::not_b_dais_dfm() // 4630 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -81951,7 +81951,7 @@ adsw2: return; } -void m68000_device::not_b_adr16_dfm() // 4638 ffff +void m68000_mcu_device::not_b_adr16_dfm() // 4638 ffff { // 00a abwl1 m_aob = m_au; @@ -82046,7 +82046,7 @@ void m68000_device::not_b_adr16_dfm() // 4638 ffff return; } -void m68000_device::not_b_adr32_dfm() // 4639 ffff +void m68000_mcu_device::not_b_adr32_dfm() // 4639 ffff { // 1e2 abll1 m_aob = m_au; @@ -82162,7 +82162,7 @@ void m68000_device::not_b_adr32_dfm() // 4639 ffff return; } -void m68000_device::not_w_ds_dfm() // 4640 fff8 +void m68000_mcu_device::not_w_ds_dfm() // 4640 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -82203,7 +82203,7 @@ void m68000_device::not_w_ds_dfm() // 4640 fff8 return; } -void m68000_device::not_w_ais_dfm() // 4650 fff8 +void m68000_mcu_device::not_w_ais_dfm() // 4650 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -82285,7 +82285,7 @@ void m68000_device::not_w_ais_dfm() // 4650 fff8 return; } -void m68000_device::not_w_aips_dfm() // 4658 fff8 +void m68000_mcu_device::not_w_aips_dfm() // 4658 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -82371,7 +82371,7 @@ void m68000_device::not_w_aips_dfm() // 4658 fff8 return; } -void m68000_device::not_w_pais_dfm() // 4660 fff8 +void m68000_mcu_device::not_w_pais_dfm() // 4660 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -82459,7 +82459,7 @@ void m68000_device::not_w_pais_dfm() // 4660 fff8 return; } -void m68000_device::not_w_das_dfm() // 4668 fff8 +void m68000_mcu_device::not_w_das_dfm() // 4668 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -82563,7 +82563,7 @@ void m68000_device::not_w_das_dfm() // 4668 fff8 return; } -void m68000_device::not_w_dais_dfm() // 4670 fff8 +void m68000_mcu_device::not_w_dais_dfm() // 4670 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -82705,7 +82705,7 @@ adsw2: return; } -void m68000_device::not_w_adr16_dfm() // 4678 ffff +void m68000_mcu_device::not_w_adr16_dfm() // 4678 ffff { // 00a abwl1 m_aob = m_au; @@ -82808,7 +82808,7 @@ void m68000_device::not_w_adr16_dfm() // 4678 ffff return; } -void m68000_device::not_w_adr32_dfm() // 4679 ffff +void m68000_mcu_device::not_w_adr32_dfm() // 4679 ffff { // 1e2 abll1 m_aob = m_au; @@ -82932,7 +82932,7 @@ void m68000_device::not_w_adr32_dfm() // 4679 ffff return; } -void m68000_device::not_l_ds_dfm() // 4680 fff8 +void m68000_mcu_device::not_l_ds_dfm() // 4680 fff8 { int ry = m_irdi & 7; // 137 nnrl1 @@ -82979,7 +82979,7 @@ void m68000_device::not_l_ds_dfm() // 4680 fff8 return; } -void m68000_device::not_l_ais_dfm() // 4690 fff8 +void m68000_mcu_device::not_l_ais_dfm() // 4690 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -83105,7 +83105,7 @@ void m68000_device::not_l_ais_dfm() // 4690 fff8 return; } -void m68000_device::not_l_aips_dfm() // 4698 fff8 +void m68000_mcu_device::not_l_aips_dfm() // 4698 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -83234,7 +83234,7 @@ void m68000_device::not_l_aips_dfm() // 4698 fff8 return; } -void m68000_device::not_l_pais_dfm() // 46a0 fff8 +void m68000_mcu_device::not_l_pais_dfm() // 46a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -83364,7 +83364,7 @@ void m68000_device::not_l_pais_dfm() // 46a0 fff8 return; } -void m68000_device::not_l_das_dfm() // 46a8 fff8 +void m68000_mcu_device::not_l_das_dfm() // 46a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -83511,7 +83511,7 @@ void m68000_device::not_l_das_dfm() // 46a8 fff8 return; } -void m68000_device::not_l_dais_dfm() // 46b0 fff8 +void m68000_mcu_device::not_l_dais_dfm() // 46b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -83696,7 +83696,7 @@ adsl2: return; } -void m68000_device::not_l_adr16_dfm() // 46b8 ffff +void m68000_mcu_device::not_l_adr16_dfm() // 46b8 ffff { // 00e abww1 m_aob = m_au; @@ -83845,7 +83845,7 @@ void m68000_device::not_l_adr16_dfm() // 46b8 ffff return; } -void m68000_device::not_l_adr32_dfm() // 46b9 ffff +void m68000_mcu_device::not_l_adr32_dfm() // 46b9 ffff { // 1e6 ablw1 m_aob = m_au; @@ -84015,7 +84015,7 @@ void m68000_device::not_l_adr32_dfm() // 46b9 ffff return; } -void m68000_device::move_ds_sr_dfm() // 46c0 fff8 +void m68000_mcu_device::move_ds_sr_dfm() // 46c0 fff8 { int ry = m_irdi & 7; if(!(m_sr & SR_S)) { @@ -84089,7 +84089,7 @@ void m68000_device::move_ds_sr_dfm() // 46c0 fff8 return; } -void m68000_device::move_ais_sr_dfm() // 46d0 fff8 +void m68000_mcu_device::move_ais_sr_dfm() // 46d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); if(!(m_sr & SR_S)) { @@ -84187,7 +84187,7 @@ void m68000_device::move_ais_sr_dfm() // 46d0 fff8 return; } -void m68000_device::move_aips_sr_dfm() // 46d8 fff8 +void m68000_mcu_device::move_aips_sr_dfm() // 46d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); if(!(m_sr & SR_S)) { @@ -84289,7 +84289,7 @@ void m68000_device::move_aips_sr_dfm() // 46d8 fff8 return; } -void m68000_device::move_pais_sr_dfm() // 46e0 fff8 +void m68000_mcu_device::move_pais_sr_dfm() // 46e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); if(!(m_sr & SR_S)) { @@ -84393,7 +84393,7 @@ void m68000_device::move_pais_sr_dfm() // 46e0 fff8 return; } -void m68000_device::move_das_sr_dfm() // 46e8 fff8 +void m68000_mcu_device::move_das_sr_dfm() // 46e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); if(!(m_sr & SR_S)) { @@ -84513,7 +84513,7 @@ void m68000_device::move_das_sr_dfm() // 46e8 fff8 return; } -void m68000_device::move_dais_sr_dfm() // 46f0 fff8 +void m68000_mcu_device::move_dais_sr_dfm() // 46f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); if(!(m_sr & SR_S)) { @@ -84671,7 +84671,7 @@ adsw2: return; } -void m68000_device::move_adr16_sr_dfm() // 46f8 ffff +void m68000_mcu_device::move_adr16_sr_dfm() // 46f8 ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -84790,7 +84790,7 @@ void m68000_device::move_adr16_sr_dfm() // 46f8 ffff return; } -void m68000_device::move_adr32_sr_dfm() // 46f9 ffff +void m68000_mcu_device::move_adr32_sr_dfm() // 46f9 ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -84930,7 +84930,7 @@ void m68000_device::move_adr32_sr_dfm() // 46f9 ffff return; } -void m68000_device::move_dpc_sr_dfm() // 46fa ffff +void m68000_mcu_device::move_dpc_sr_dfm() // 46fa ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -85049,7 +85049,7 @@ void m68000_device::move_dpc_sr_dfm() // 46fa ffff return; } -void m68000_device::move_dpci_sr_dfm() // 46fb ffff +void m68000_mcu_device::move_dpci_sr_dfm() // 46fb ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -85206,7 +85206,7 @@ adsw2: return; } -void m68000_device::move_i16u_sr_dfm() // 46fc ffff +void m68000_mcu_device::move_i16u_sr_dfm() // 46fc ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -85303,7 +85303,7 @@ void m68000_device::move_i16u_sr_dfm() // 46fc ffff return; } -void m68000_device::nbcd_b_ds_dfm() // 4800 fff8 +void m68000_mcu_device::nbcd_b_ds_dfm() // 4800 fff8 { int ry = m_irdi & 7; // 13b nbcr1 @@ -85348,7 +85348,7 @@ void m68000_device::nbcd_b_ds_dfm() // 4800 fff8 return; } -void m68000_device::nbcd_b_ais_dfm() // 4810 fff8 +void m68000_mcu_device::nbcd_b_ais_dfm() // 4810 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -85424,7 +85424,7 @@ void m68000_device::nbcd_b_ais_dfm() // 4810 fff8 return; } -void m68000_device::nbcd_b_aips_dfm() // 4818 fff8 +void m68000_mcu_device::nbcd_b_aips_dfm() // 4818 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -85504,7 +85504,7 @@ void m68000_device::nbcd_b_aips_dfm() // 4818 fff8 return; } -void m68000_device::nbcd_b_pais_dfm() // 4820 fff8 +void m68000_mcu_device::nbcd_b_pais_dfm() // 4820 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -85586,7 +85586,7 @@ void m68000_device::nbcd_b_pais_dfm() // 4820 fff8 return; } -void m68000_device::nbcd_b_das_dfm() // 4828 fff8 +void m68000_mcu_device::nbcd_b_das_dfm() // 4828 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -85684,7 +85684,7 @@ void m68000_device::nbcd_b_das_dfm() // 4828 fff8 return; } -void m68000_device::nbcd_b_dais_dfm() // 4830 fff8 +void m68000_mcu_device::nbcd_b_dais_dfm() // 4830 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -85820,7 +85820,7 @@ adsw2: return; } -void m68000_device::nbcd_b_adr16_dfm() // 4838 ffff +void m68000_mcu_device::nbcd_b_adr16_dfm() // 4838 ffff { // 00a abwl1 m_aob = m_au; @@ -85917,7 +85917,7 @@ void m68000_device::nbcd_b_adr16_dfm() // 4838 ffff return; } -void m68000_device::nbcd_b_adr32_dfm() // 4839 ffff +void m68000_mcu_device::nbcd_b_adr32_dfm() // 4839 ffff { // 1e2 abll1 m_aob = m_au; @@ -86035,7 +86035,7 @@ void m68000_device::nbcd_b_adr32_dfm() // 4839 ffff return; } -void m68000_device::swap_ds_dfm() // 4840 fff8 +void m68000_mcu_device::swap_ds_dfm() // 4840 fff8 { int ry = m_irdi & 7; // 341 swap1 @@ -86080,7 +86080,7 @@ void m68000_device::swap_ds_dfm() // 4840 fff8 return; } -void m68000_device::pea_ais_dfm() // 4850 fff8 +void m68000_mcu_device::pea_ais_dfm() // 4850 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 17c peaa1 @@ -86159,7 +86159,7 @@ void m68000_device::pea_ais_dfm() // 4850 fff8 return; } -void m68000_device::pea_das_dfm() // 4868 fff8 +void m68000_mcu_device::pea_das_dfm() // 4868 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 17d pead1 @@ -86264,7 +86264,7 @@ void m68000_device::pea_das_dfm() // 4868 fff8 return; } -void m68000_device::pea_dais_dfm() // 4870 fff8 +void m68000_mcu_device::pea_dais_dfm() // 4870 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1ff peax0 @@ -86405,7 +86405,7 @@ peax4: return; } -void m68000_device::pea_adr16_dfm() // 4878 ffff +void m68000_mcu_device::pea_adr16_dfm() // 4878 ffff { // 178 paaw1 m_aob = m_au; @@ -86508,7 +86508,7 @@ void m68000_device::pea_adr16_dfm() // 4878 ffff return; } -void m68000_device::pea_adr32_dfm() // 4879 ffff +void m68000_mcu_device::pea_adr32_dfm() // 4879 ffff { // 1fa paal1 m_aob = m_au; @@ -86632,7 +86632,7 @@ void m68000_device::pea_adr32_dfm() // 4879 ffff return; } -void m68000_device::pea_dpc_dfm() // 487a ffff +void m68000_mcu_device::pea_dpc_dfm() // 487a ffff { // 17d pead1 m_aob = m_au; @@ -86736,7 +86736,7 @@ void m68000_device::pea_dpc_dfm() // 487a ffff return; } -void m68000_device::pea_dpci_dfm() // 487b ffff +void m68000_mcu_device::pea_dpci_dfm() // 487b ffff { // 1ff peax0 // alu r=9 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -86876,7 +86876,7 @@ peax4: return; } -void m68000_device::ext_w_ds_dfm() // 4880 fff8 +void m68000_mcu_device::ext_w_ds_dfm() // 4880 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -86917,7 +86917,7 @@ void m68000_device::ext_w_ds_dfm() // 4880 fff8 return; } -void m68000_device::movem_w_list_ais_dfm() // 4890 fff8 +void m68000_mcu_device::movem_w_list_ais_dfm() // 4890 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3a0 stmr1 @@ -87011,7 +87011,7 @@ mmrw2: return; } -void m68000_device::movem_w_listp_pais_dfm() // 48a0 fff8 +void m68000_mcu_device::movem_w_listp_pais_dfm() // 48a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3a4 push1 @@ -87108,7 +87108,7 @@ push3: return; } -void m68000_device::movem_w_list_das_dfm() // 48a8 fff8 +void m68000_mcu_device::movem_w_list_das_dfm() // 48a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1f1 stmd1 @@ -87225,7 +87225,7 @@ mmrw2: return; } -void m68000_device::movem_w_list_dais_dfm() // 48b0 fff8 +void m68000_mcu_device::movem_w_list_dais_dfm() // 48b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 325 stmx1 @@ -87380,7 +87380,7 @@ mmrw2: return; } -void m68000_device::movem_w_list_adr16_dfm() // 48b8 ffff +void m68000_mcu_device::movem_w_list_adr16_dfm() // 48b8 ffff { // 1ed smaw1 m_aob = m_au; @@ -87497,7 +87497,7 @@ mmrw2: return; } -void m68000_device::movem_w_list_adr32_dfm() // 48b9 ffff +void m68000_mcu_device::movem_w_list_adr32_dfm() // 48b9 ffff { // 1e5 smal1 m_aob = m_au; @@ -87635,7 +87635,7 @@ mmrw2: return; } -void m68000_device::ext_l_ds_dfm() // 48c0 fff8 +void m68000_mcu_device::ext_l_ds_dfm() // 48c0 fff8 { int ry = m_irdi & 7; // 232 extr1 @@ -87676,7 +87676,7 @@ void m68000_device::ext_l_ds_dfm() // 48c0 fff8 return; } -void m68000_device::movem_l_list_ais_dfm() // 48d0 fff8 +void m68000_mcu_device::movem_l_list_ais_dfm() // 48d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3a0 stmr1 @@ -87790,7 +87790,7 @@ mmrw2: return; } -void m68000_device::movem_l_listp_pais_dfm() // 48e0 fff8 +void m68000_mcu_device::movem_l_listp_pais_dfm() // 48e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3a4 push1 @@ -87908,7 +87908,7 @@ push3: return; } -void m68000_device::movem_l_list_das_dfm() // 48e8 fff8 +void m68000_mcu_device::movem_l_list_das_dfm() // 48e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1f1 stmd1 @@ -88045,7 +88045,7 @@ mmrw2: return; } -void m68000_device::movem_l_list_dais_dfm() // 48f0 fff8 +void m68000_mcu_device::movem_l_list_dais_dfm() // 48f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 325 stmx1 @@ -88220,7 +88220,7 @@ mmrw2: return; } -void m68000_device::movem_l_list_adr16_dfm() // 48f8 ffff +void m68000_mcu_device::movem_l_list_adr16_dfm() // 48f8 ffff { // 1ed smaw1 m_aob = m_au; @@ -88357,7 +88357,7 @@ mmrw2: return; } -void m68000_device::movem_l_list_adr32_dfm() // 48f9 ffff +void m68000_mcu_device::movem_l_list_adr32_dfm() // 48f9 ffff { // 1e5 smal1 m_aob = m_au; @@ -88515,7 +88515,7 @@ mmrw2: return; } -void m68000_device::tst_b_ds_dfm() // 4a00 fff8 +void m68000_mcu_device::tst_b_ds_dfm() // 4a00 fff8 { int ry = m_irdi & 7; // 12d tsrw1 @@ -88556,7 +88556,7 @@ void m68000_device::tst_b_ds_dfm() // 4a00 fff8 return; } -void m68000_device::tst_b_ais_dfm() // 4a10 fff8 +void m68000_mcu_device::tst_b_ais_dfm() // 4a10 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -88618,7 +88618,7 @@ void m68000_device::tst_b_ais_dfm() // 4a10 fff8 return; } -void m68000_device::tst_b_aips_dfm() // 4a18 fff8 +void m68000_mcu_device::tst_b_aips_dfm() // 4a18 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -88685,7 +88685,7 @@ void m68000_device::tst_b_aips_dfm() // 4a18 fff8 return; } -void m68000_device::tst_b_pais_dfm() // 4a20 fff8 +void m68000_mcu_device::tst_b_pais_dfm() // 4a20 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -88754,7 +88754,7 @@ void m68000_device::tst_b_pais_dfm() // 4a20 fff8 return; } -void m68000_device::tst_b_das_dfm() // 4a28 fff8 +void m68000_mcu_device::tst_b_das_dfm() // 4a28 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -88839,7 +88839,7 @@ void m68000_device::tst_b_das_dfm() // 4a28 fff8 return; } -void m68000_device::tst_b_dais_dfm() // 4a30 fff8 +void m68000_mcu_device::tst_b_dais_dfm() // 4a30 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -88964,7 +88964,7 @@ adsw2: return; } -void m68000_device::tst_b_adr16_dfm() // 4a38 ffff +void m68000_mcu_device::tst_b_adr16_dfm() // 4a38 ffff { // 00a abwl1 m_aob = m_au; @@ -89048,7 +89048,7 @@ void m68000_device::tst_b_adr16_dfm() // 4a38 ffff return; } -void m68000_device::tst_b_adr32_dfm() // 4a39 ffff +void m68000_mcu_device::tst_b_adr32_dfm() // 4a39 ffff { // 1e2 abll1 m_aob = m_au; @@ -89154,7 +89154,7 @@ void m68000_device::tst_b_adr32_dfm() // 4a39 ffff return; } -void m68000_device::tst_w_ds_dfm() // 4a40 fff8 +void m68000_mcu_device::tst_w_ds_dfm() // 4a40 fff8 { int ry = m_irdi & 7; // 12d tsrw1 @@ -89195,7 +89195,7 @@ void m68000_device::tst_w_ds_dfm() // 4a40 fff8 return; } -void m68000_device::tst_w_ais_dfm() // 4a50 fff8 +void m68000_mcu_device::tst_w_ais_dfm() // 4a50 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -89260,7 +89260,7 @@ void m68000_device::tst_w_ais_dfm() // 4a50 fff8 return; } -void m68000_device::tst_w_aips_dfm() // 4a58 fff8 +void m68000_mcu_device::tst_w_aips_dfm() // 4a58 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -89330,7 +89330,7 @@ void m68000_device::tst_w_aips_dfm() // 4a58 fff8 return; } -void m68000_device::tst_w_pais_dfm() // 4a60 fff8 +void m68000_mcu_device::tst_w_pais_dfm() // 4a60 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -89402,7 +89402,7 @@ void m68000_device::tst_w_pais_dfm() // 4a60 fff8 return; } -void m68000_device::tst_w_das_dfm() // 4a68 fff8 +void m68000_mcu_device::tst_w_das_dfm() // 4a68 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -89490,7 +89490,7 @@ void m68000_device::tst_w_das_dfm() // 4a68 fff8 return; } -void m68000_device::tst_w_dais_dfm() // 4a70 fff8 +void m68000_mcu_device::tst_w_dais_dfm() // 4a70 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -89618,7 +89618,7 @@ adsw2: return; } -void m68000_device::tst_w_adr16_dfm() // 4a78 ffff +void m68000_mcu_device::tst_w_adr16_dfm() // 4a78 ffff { // 00a abwl1 m_aob = m_au; @@ -89705,7 +89705,7 @@ void m68000_device::tst_w_adr16_dfm() // 4a78 ffff return; } -void m68000_device::tst_w_adr32_dfm() // 4a79 ffff +void m68000_mcu_device::tst_w_adr32_dfm() // 4a79 ffff { // 1e2 abll1 m_aob = m_au; @@ -89814,7 +89814,7 @@ void m68000_device::tst_w_adr32_dfm() // 4a79 ffff return; } -void m68000_device::tst_l_ds_dfm() // 4a80 fff8 +void m68000_mcu_device::tst_l_ds_dfm() // 4a80 fff8 { int ry = m_irdi & 7; // 125 tsrl1 @@ -89857,7 +89857,7 @@ void m68000_device::tst_l_ds_dfm() // 4a80 fff8 return; } -void m68000_device::tst_l_ais_dfm() // 4a90 fff8 +void m68000_mcu_device::tst_l_ais_dfm() // 4a90 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -89945,7 +89945,7 @@ void m68000_device::tst_l_ais_dfm() // 4a90 fff8 return; } -void m68000_device::tst_l_aips_dfm() // 4a98 fff8 +void m68000_mcu_device::tst_l_aips_dfm() // 4a98 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -90037,7 +90037,7 @@ void m68000_device::tst_l_aips_dfm() // 4a98 fff8 return; } -void m68000_device::tst_l_pais_dfm() // 4aa0 fff8 +void m68000_mcu_device::tst_l_pais_dfm() // 4aa0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -90130,7 +90130,7 @@ void m68000_device::tst_l_pais_dfm() // 4aa0 fff8 return; } -void m68000_device::tst_l_das_dfm() // 4aa8 fff8 +void m68000_mcu_device::tst_l_das_dfm() // 4aa8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -90240,7 +90240,7 @@ void m68000_device::tst_l_das_dfm() // 4aa8 fff8 return; } -void m68000_device::tst_l_dais_dfm() // 4ab0 fff8 +void m68000_mcu_device::tst_l_dais_dfm() // 4ab0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -90390,7 +90390,7 @@ adsl2: return; } -void m68000_device::tst_l_adr16_dfm() // 4ab8 ffff +void m68000_mcu_device::tst_l_adr16_dfm() // 4ab8 ffff { // 00e abww1 m_aob = m_au; @@ -90503,7 +90503,7 @@ void m68000_device::tst_l_adr16_dfm() // 4ab8 ffff return; } -void m68000_device::tst_l_adr32_dfm() // 4ab9 ffff +void m68000_mcu_device::tst_l_adr32_dfm() // 4ab9 ffff { // 1e6 ablw1 m_aob = m_au; @@ -90638,7 +90638,7 @@ void m68000_device::tst_l_adr32_dfm() // 4ab9 ffff return; } -void m68000_device::tas_ds_dfm() // 4ac0 fff8 +void m68000_mcu_device::tas_ds_dfm() // 4ac0 fff8 { int ry = m_irdi & 7; // 345 tasr1 @@ -90681,7 +90681,7 @@ void m68000_device::tas_ds_dfm() // 4ac0 fff8 return; } -void m68000_device::tas_ais_dfm() // 4ad0 fff8 +void m68000_mcu_device::tas_ais_dfm() // 4ad0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -90765,7 +90765,7 @@ void m68000_device::tas_ais_dfm() // 4ad0 fff8 return; } -void m68000_device::tas_aips_dfm() // 4ad8 fff8 +void m68000_mcu_device::tas_aips_dfm() // 4ad8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -90854,7 +90854,7 @@ void m68000_device::tas_aips_dfm() // 4ad8 fff8 return; } -void m68000_device::tas_pais_dfm() // 4ae0 fff8 +void m68000_mcu_device::tas_pais_dfm() // 4ae0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -90945,7 +90945,7 @@ void m68000_device::tas_pais_dfm() // 4ae0 fff8 return; } -void m68000_device::tas_das_dfm() // 4ae8 fff8 +void m68000_mcu_device::tas_das_dfm() // 4ae8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -91052,7 +91052,7 @@ void m68000_device::tas_das_dfm() // 4ae8 fff8 return; } -void m68000_device::tas_dais_dfm() // 4af0 fff8 +void m68000_mcu_device::tas_dais_dfm() // 4af0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -91199,7 +91199,7 @@ adsw2: return; } -void m68000_device::tas_adr16_dfm() // 4af8 ffff +void m68000_mcu_device::tas_adr16_dfm() // 4af8 ffff { // 00a abwl1 m_aob = m_au; @@ -91305,7 +91305,7 @@ void m68000_device::tas_adr16_dfm() // 4af8 ffff return; } -void m68000_device::tas_adr32_dfm() // 4af9 ffff +void m68000_mcu_device::tas_adr32_dfm() // 4af9 ffff { // 1e2 abll1 m_aob = m_au; @@ -91433,7 +91433,7 @@ void m68000_device::tas_adr32_dfm() // 4af9 ffff return; } -void m68000_device::movem_w_ais_list_dfm() // 4c90 fff8 +void m68000_mcu_device::movem_w_ais_list_dfm() // 4c90 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 127 ldmr1 @@ -91549,7 +91549,7 @@ mmaw2: return; } -void m68000_device::movem_w_aips_list_dfm() // 4c98 fff8 +void m68000_mcu_device::movem_w_aips_list_dfm() // 4c98 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 123 popm1 @@ -91666,7 +91666,7 @@ popm6: return; } -void m68000_device::movem_w_das_list_dfm() // 4ca8 fff8 +void m68000_mcu_device::movem_w_das_list_dfm() // 4ca8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1fd ldmd1 @@ -91805,7 +91805,7 @@ mmaw2: return; } -void m68000_device::movem_w_dais_list_dfm() // 4cb0 fff8 +void m68000_mcu_device::movem_w_dais_list_dfm() // 4cb0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1f5 ldmx0 @@ -91981,7 +91981,7 @@ mmaw2: return; } -void m68000_device::movem_w_adr16_list_dfm() // 4cb8 ffff +void m68000_mcu_device::movem_w_adr16_list_dfm() // 4cb8 ffff { // 1f9 lmaw1 m_aob = m_au; @@ -92118,7 +92118,7 @@ mmaw2: return; } -void m68000_device::movem_w_adr32_list_dfm() // 4cb9 ffff +void m68000_mcu_device::movem_w_adr32_list_dfm() // 4cb9 ffff { // 1e9 lmal1 m_aob = m_au; @@ -92279,7 +92279,7 @@ mmaw2: return; } -void m68000_device::movem_w_dpc_list_dfm() // 4cba ffff +void m68000_mcu_device::movem_w_dpc_list_dfm() // 4cba ffff { // 1fd ldmd1 m_aob = m_au; @@ -92417,7 +92417,7 @@ mmaw2: return; } -void m68000_device::movem_w_dpci_list_dfm() // 4cbb ffff +void m68000_mcu_device::movem_w_dpci_list_dfm() // 4cbb ffff { // 1f5 ldmx0 m_aob = m_au; @@ -92592,7 +92592,7 @@ mmaw2: return; } -void m68000_device::movem_l_ais_list_dfm() // 4cd0 fff8 +void m68000_mcu_device::movem_l_ais_list_dfm() // 4cd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 127 ldmr1 @@ -92729,7 +92729,7 @@ mmaw2: return; } -void m68000_device::movem_l_aips_list_dfm() // 4cd8 fff8 +void m68000_mcu_device::movem_l_aips_list_dfm() // 4cd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 123 popm1 @@ -92867,7 +92867,7 @@ popm6: return; } -void m68000_device::movem_l_das_list_dfm() // 4ce8 fff8 +void m68000_mcu_device::movem_l_das_list_dfm() // 4ce8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1fd ldmd1 @@ -93027,7 +93027,7 @@ mmaw2: return; } -void m68000_device::movem_l_dais_list_dfm() // 4cf0 fff8 +void m68000_mcu_device::movem_l_dais_list_dfm() // 4cf0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1f5 ldmx0 @@ -93224,7 +93224,7 @@ mmaw2: return; } -void m68000_device::movem_l_adr16_list_dfm() // 4cf8 ffff +void m68000_mcu_device::movem_l_adr16_list_dfm() // 4cf8 ffff { // 1f9 lmaw1 m_aob = m_au; @@ -93382,7 +93382,7 @@ mmaw2: return; } -void m68000_device::movem_l_adr32_list_dfm() // 4cf9 ffff +void m68000_mcu_device::movem_l_adr32_list_dfm() // 4cf9 ffff { // 1e9 lmal1 m_aob = m_au; @@ -93564,7 +93564,7 @@ mmaw2: return; } -void m68000_device::movem_l_dpc_list_dfm() // 4cfa ffff +void m68000_mcu_device::movem_l_dpc_list_dfm() // 4cfa ffff { // 1fd ldmd1 m_aob = m_au; @@ -93723,7 +93723,7 @@ mmaw2: return; } -void m68000_device::movem_l_dpci_list_dfm() // 4cfb ffff +void m68000_mcu_device::movem_l_dpci_list_dfm() // 4cfb ffff { // 1f5 ldmx0 m_aob = m_au; @@ -93919,7 +93919,7 @@ mmaw2: return; } -void m68000_device::trap_imm4_dfm() // 4e40 fff0 +void m68000_mcu_device::trap_imm4_dfm() // 4e40 fff0 { // 1d0 trap1 m_ftu = m_sr; @@ -94100,7 +94100,7 @@ void m68000_device::trap_imm4_dfm() // 4e40 fff0 return; } -void m68000_device::link_as_imm16_dfm() // 4e50 fff8 +void m68000_mcu_device::link_as_imm16_dfm() // 4e50 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 30b link1 @@ -94202,7 +94202,7 @@ void m68000_device::link_as_imm16_dfm() // 4e50 fff8 return; } -void m68000_device::unlk_as_dfm() // 4e58 fff8 +void m68000_mcu_device::unlk_as_dfm() // 4e58 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 119 unlk1 @@ -94283,7 +94283,7 @@ void m68000_device::unlk_as_dfm() // 4e58 fff8 return; } -void m68000_device::move_as_usp_dfm() // 4e60 fff8 +void m68000_mcu_device::move_as_usp_dfm() // 4e60 fff8 { int ry = map_sp((m_irdi & 7) | 8); if(!(m_sr & SR_S)) { @@ -94327,7 +94327,7 @@ void m68000_device::move_as_usp_dfm() // 4e60 fff8 return; } -void m68000_device::move_usp_as_dfm() // 4e68 fff8 +void m68000_mcu_device::move_usp_as_dfm() // 4e68 fff8 { int ry = map_sp((m_irdi & 7) | 8); if(!(m_sr & SR_S)) { @@ -94371,7 +94371,7 @@ void m68000_device::move_usp_as_dfm() // 4e68 fff8 return; } -void m68000_device::reset_dfm() // 4e70 ffff +void m68000_mcu_device::reset_dfm() // 4e70 ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -94436,7 +94436,7 @@ rset5: return; } -void m68000_device::nop_dfm() // 4e71 ffff +void m68000_mcu_device::nop_dfm() // 4e71 ffff { // 363 b m_aob = m_au; @@ -94471,7 +94471,7 @@ void m68000_device::nop_dfm() // 4e71 ffff return; } -void m68000_device::stop_i16u_dfm() // 4e72 ffff +void m68000_mcu_device::stop_i16u_dfm() // 4e72 ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -94500,7 +94500,7 @@ void m68000_device::stop_i16u_dfm() // 4e72 ffff return; } -void m68000_device::rte_dfm() // 4e73 ffff +void m68000_mcu_device::rte_dfm() // 4e73 ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -94632,7 +94632,7 @@ void m68000_device::rte_dfm() // 4e73 ffff return; } -void m68000_device::rts_dfm() // 4e75 ffff +void m68000_mcu_device::rts_dfm() // 4e75 ffff { // 126 rts1 m_aob = m_da[m_sp]; @@ -94731,7 +94731,7 @@ void m68000_device::rts_dfm() // 4e75 ffff return; } -void m68000_device::trapv_dfm() // 4e76 ffff +void m68000_mcu_device::trapv_dfm() // 4e76 ffff { // 06d trpv1 m_aob = m_au; @@ -94964,7 +94964,7 @@ trpv3: return; } -void m68000_device::rtr_dfm() // 4e77 ffff +void m68000_mcu_device::rtr_dfm() // 4e77 ffff { // 12a rtr1 m_aob = m_da[m_sp]; @@ -95089,7 +95089,7 @@ void m68000_device::rtr_dfm() // 4e77 ffff return; } -void m68000_device::jsr_ais_dfm() // 4e90 fff8 +void m68000_mcu_device::jsr_ais_dfm() // 4e90 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 273 jsra1 @@ -95188,7 +95188,7 @@ void m68000_device::jsr_ais_dfm() // 4e90 fff8 return; } -void m68000_device::jsr_das_dfm() // 4ea8 fff8 +void m68000_mcu_device::jsr_das_dfm() // 4ea8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b0 jsrd1 @@ -95293,7 +95293,7 @@ void m68000_device::jsr_das_dfm() // 4ea8 fff8 return; } -void m68000_device::jsr_dais_dfm() // 4eb0 fff8 +void m68000_mcu_device::jsr_dais_dfm() // 4eb0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1f3 jsrx0 @@ -95418,7 +95418,7 @@ jsrd2: return; } -void m68000_device::jsr_adr16_dfm() // 4eb8 ffff +void m68000_mcu_device::jsr_adr16_dfm() // 4eb8 ffff { // 293 jsaw0 m_at = ext32(m_dbin); @@ -95519,7 +95519,7 @@ void m68000_device::jsr_adr16_dfm() // 4eb8 ffff return; } -void m68000_device::jsr_adr32_dfm() // 4eb9 ffff +void m68000_mcu_device::jsr_adr32_dfm() // 4eb9 ffff { // 1f2 jsal1 m_aob = m_au; @@ -95639,7 +95639,7 @@ void m68000_device::jsr_adr32_dfm() // 4eb9 ffff return; } -void m68000_device::jsr_dpc_dfm() // 4eba ffff +void m68000_mcu_device::jsr_dpc_dfm() // 4eba ffff { // 2b0 jsrd1 m_au = ext32(m_dbin) + m_pc; @@ -95743,7 +95743,7 @@ void m68000_device::jsr_dpc_dfm() // 4eba ffff return; } -void m68000_device::jsr_dpci_dfm() // 4ebb ffff +void m68000_mcu_device::jsr_dpci_dfm() // 4ebb ffff { // 1f3 jsrx0 // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 @@ -95867,7 +95867,7 @@ jsrd2: return; } -void m68000_device::jmp_ais_dfm() // 4ed0 fff8 +void m68000_mcu_device::jmp_ais_dfm() // 4ed0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 255 jmpa1 @@ -95923,7 +95923,7 @@ void m68000_device::jmp_ais_dfm() // 4ed0 fff8 return; } -void m68000_device::jmp_das_dfm() // 4ee8 fff8 +void m68000_mcu_device::jmp_das_dfm() // 4ee8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b4 jmpd1 @@ -95983,7 +95983,7 @@ void m68000_device::jmp_das_dfm() // 4ee8 fff8 return; } -void m68000_device::jmp_dais_dfm() // 4ef0 fff8 +void m68000_mcu_device::jmp_dais_dfm() // 4ef0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1f7 jmpx0 @@ -96063,7 +96063,7 @@ bbci3: return; } -void m68000_device::jmp_adr16_dfm() // 4ef8 ffff +void m68000_mcu_device::jmp_adr16_dfm() // 4ef8 ffff { // 297 jmaw1 m_at = ext32(m_dbin); @@ -96121,7 +96121,7 @@ void m68000_device::jmp_adr16_dfm() // 4ef8 ffff return; } -void m68000_device::jmp_adr32_dfm() // 4ef9 ffff +void m68000_mcu_device::jmp_adr32_dfm() // 4ef9 ffff { // 1f6 jmal1 m_aob = m_au; @@ -96197,7 +96197,7 @@ void m68000_device::jmp_adr32_dfm() // 4ef9 ffff return; } -void m68000_device::jmp_dpc_dfm() // 4efa ffff +void m68000_mcu_device::jmp_dpc_dfm() // 4efa ffff { // 2b4 jmpd1 m_au = ext32(m_dbin) + m_pc; @@ -96256,7 +96256,7 @@ void m68000_device::jmp_dpc_dfm() // 4efa ffff return; } -void m68000_device::jmp_dpci_dfm() // 4efb ffff +void m68000_mcu_device::jmp_dpci_dfm() // 4efb ffff { // 1f7 jmpx0 // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -96335,7 +96335,7 @@ bbci3: return; } -void m68000_device::addq_b_imm3_ds_dfm() // 5000 f1f8 +void m68000_mcu_device::addq_b_imm3_ds_dfm() // 5000 f1f8 { int ry = m_irdi & 7; // 2d8 raqw1 @@ -96376,7 +96376,7 @@ void m68000_device::addq_b_imm3_ds_dfm() // 5000 f1f8 return; } -void m68000_device::addq_b_imm3_ais_dfm() // 5010 f1f8 +void m68000_mcu_device::addq_b_imm3_ais_dfm() // 5010 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -96451,7 +96451,7 @@ void m68000_device::addq_b_imm3_ais_dfm() // 5010 f1f8 return; } -void m68000_device::addq_b_imm3_aips_dfm() // 5018 f1f8 +void m68000_mcu_device::addq_b_imm3_aips_dfm() // 5018 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -96530,7 +96530,7 @@ void m68000_device::addq_b_imm3_aips_dfm() // 5018 f1f8 return; } -void m68000_device::addq_b_imm3_pais_dfm() // 5020 f1f8 +void m68000_mcu_device::addq_b_imm3_pais_dfm() // 5020 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -96611,7 +96611,7 @@ void m68000_device::addq_b_imm3_pais_dfm() // 5020 f1f8 return; } -void m68000_device::addq_b_imm3_das_dfm() // 5028 f1f8 +void m68000_mcu_device::addq_b_imm3_das_dfm() // 5028 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -96708,7 +96708,7 @@ void m68000_device::addq_b_imm3_das_dfm() // 5028 f1f8 return; } -void m68000_device::addq_b_imm3_dais_dfm() // 5030 f1f8 +void m68000_mcu_device::addq_b_imm3_dais_dfm() // 5030 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -96843,7 +96843,7 @@ adsw2: return; } -void m68000_device::addq_b_imm3_adr16_dfm() // 5038 f1ff +void m68000_mcu_device::addq_b_imm3_adr16_dfm() // 5038 f1ff { // 00a abwl1 m_aob = m_au; @@ -96939,7 +96939,7 @@ void m68000_device::addq_b_imm3_adr16_dfm() // 5038 f1ff return; } -void m68000_device::addq_b_imm3_adr32_dfm() // 5039 f1ff +void m68000_mcu_device::addq_b_imm3_adr32_dfm() // 5039 f1ff { // 1e2 abll1 m_aob = m_au; @@ -97056,7 +97056,7 @@ void m68000_device::addq_b_imm3_adr32_dfm() // 5039 f1ff return; } -void m68000_device::addq_w_imm3_ds_dfm() // 5040 f1f8 +void m68000_mcu_device::addq_w_imm3_ds_dfm() // 5040 f1f8 { int ry = m_irdi & 7; // 2d8 raqw1 @@ -97097,7 +97097,7 @@ void m68000_device::addq_w_imm3_ds_dfm() // 5040 f1f8 return; } -void m68000_device::addq_w_imm3_as_dfm() // 5048 f1f8 +void m68000_mcu_device::addq_w_imm3_as_dfm() // 5048 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 2dc raql1 @@ -97144,7 +97144,7 @@ void m68000_device::addq_w_imm3_as_dfm() // 5048 f1f8 return; } -void m68000_device::addq_w_imm3_ais_dfm() // 5050 f1f8 +void m68000_mcu_device::addq_w_imm3_ais_dfm() // 5050 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -97227,7 +97227,7 @@ void m68000_device::addq_w_imm3_ais_dfm() // 5050 f1f8 return; } -void m68000_device::addq_w_imm3_aips_dfm() // 5058 f1f8 +void m68000_mcu_device::addq_w_imm3_aips_dfm() // 5058 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -97314,7 +97314,7 @@ void m68000_device::addq_w_imm3_aips_dfm() // 5058 f1f8 return; } -void m68000_device::addq_w_imm3_pais_dfm() // 5060 f1f8 +void m68000_mcu_device::addq_w_imm3_pais_dfm() // 5060 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -97403,7 +97403,7 @@ void m68000_device::addq_w_imm3_pais_dfm() // 5060 f1f8 return; } -void m68000_device::addq_w_imm3_das_dfm() // 5068 f1f8 +void m68000_mcu_device::addq_w_imm3_das_dfm() // 5068 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -97508,7 +97508,7 @@ void m68000_device::addq_w_imm3_das_dfm() // 5068 f1f8 return; } -void m68000_device::addq_w_imm3_dais_dfm() // 5070 f1f8 +void m68000_mcu_device::addq_w_imm3_dais_dfm() // 5070 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -97651,7 +97651,7 @@ adsw2: return; } -void m68000_device::addq_w_imm3_adr16_dfm() // 5078 f1ff +void m68000_mcu_device::addq_w_imm3_adr16_dfm() // 5078 f1ff { // 00a abwl1 m_aob = m_au; @@ -97755,7 +97755,7 @@ void m68000_device::addq_w_imm3_adr16_dfm() // 5078 f1ff return; } -void m68000_device::addq_w_imm3_adr32_dfm() // 5079 f1ff +void m68000_mcu_device::addq_w_imm3_adr32_dfm() // 5079 f1ff { // 1e2 abll1 m_aob = m_au; @@ -97880,7 +97880,7 @@ void m68000_device::addq_w_imm3_adr32_dfm() // 5079 f1ff return; } -void m68000_device::addq_l_imm3_ds_dfm() // 5080 f1f8 +void m68000_mcu_device::addq_l_imm3_ds_dfm() // 5080 f1f8 { int ry = m_irdi & 7; // 2dc raql1 @@ -97929,7 +97929,7 @@ void m68000_device::addq_l_imm3_ds_dfm() // 5080 f1f8 return; } -void m68000_device::addq_l_imm3_as_dfm() // 5088 f1f8 +void m68000_mcu_device::addq_l_imm3_as_dfm() // 5088 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 2dc raql1 @@ -97976,7 +97976,7 @@ void m68000_device::addq_l_imm3_as_dfm() // 5088 f1f8 return; } -void m68000_device::addq_l_imm3_ais_dfm() // 5090 f1f8 +void m68000_mcu_device::addq_l_imm3_ais_dfm() // 5090 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -98103,7 +98103,7 @@ void m68000_device::addq_l_imm3_ais_dfm() // 5090 f1f8 return; } -void m68000_device::addq_l_imm3_aips_dfm() // 5098 f1f8 +void m68000_mcu_device::addq_l_imm3_aips_dfm() // 5098 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -98233,7 +98233,7 @@ void m68000_device::addq_l_imm3_aips_dfm() // 5098 f1f8 return; } -void m68000_device::addq_l_imm3_pais_dfm() // 50a0 f1f8 +void m68000_mcu_device::addq_l_imm3_pais_dfm() // 50a0 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -98364,7 +98364,7 @@ void m68000_device::addq_l_imm3_pais_dfm() // 50a0 f1f8 return; } -void m68000_device::addq_l_imm3_das_dfm() // 50a8 f1f8 +void m68000_mcu_device::addq_l_imm3_das_dfm() // 50a8 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -98512,7 +98512,7 @@ void m68000_device::addq_l_imm3_das_dfm() // 50a8 f1f8 return; } -void m68000_device::addq_l_imm3_dais_dfm() // 50b0 f1f8 +void m68000_mcu_device::addq_l_imm3_dais_dfm() // 50b0 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -98698,7 +98698,7 @@ adsl2: return; } -void m68000_device::addq_l_imm3_adr16_dfm() // 50b8 f1ff +void m68000_mcu_device::addq_l_imm3_adr16_dfm() // 50b8 f1ff { // 00e abww1 m_aob = m_au; @@ -98848,7 +98848,7 @@ void m68000_device::addq_l_imm3_adr16_dfm() // 50b8 f1ff return; } -void m68000_device::addq_l_imm3_adr32_dfm() // 50b9 f1ff +void m68000_mcu_device::addq_l_imm3_adr32_dfm() // 50b9 f1ff { // 1e6 ablw1 m_aob = m_au; @@ -99019,7 +99019,7 @@ void m68000_device::addq_l_imm3_adr32_dfm() // 50b9 f1ff return; } -void m68000_device::st_ds_dfm() // 50c0 fff8 +void m68000_mcu_device::st_ds_dfm() // 50c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -99100,7 +99100,7 @@ sccr2: return; } -void m68000_device::dbt_ds_rel16_dfm() // 50c8 fff8 +void m68000_mcu_device::dbt_ds_rel16_dfm() // 50c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -99279,7 +99279,7 @@ dbcc5: goto dbcc4; } -void m68000_device::st_ais_dfm() // 50d0 fff8 +void m68000_mcu_device::st_ais_dfm() // 50d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -99390,7 +99390,7 @@ morw2: return; } -void m68000_device::st_aips_dfm() // 50d8 fff8 +void m68000_mcu_device::st_aips_dfm() // 50d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -99506,7 +99506,7 @@ morw2: return; } -void m68000_device::st_pais_dfm() // 50e0 fff8 +void m68000_mcu_device::st_pais_dfm() // 50e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -99624,7 +99624,7 @@ morw2: return; } -void m68000_device::st_das_dfm() // 50e8 fff8 +void m68000_mcu_device::st_das_dfm() // 50e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -99758,7 +99758,7 @@ morw2: return; } -void m68000_device::st_dais_dfm() // 50f0 fff8 +void m68000_mcu_device::st_dais_dfm() // 50f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -99932,7 +99932,7 @@ morw2: return; } -void m68000_device::st_adr16_dfm() // 50f8 ffff +void m68000_mcu_device::st_adr16_dfm() // 50f8 ffff { // 00a abwl1 m_aob = m_au; @@ -100065,7 +100065,7 @@ morw2: return; } -void m68000_device::st_adr32_dfm() // 50f9 ffff +void m68000_mcu_device::st_adr32_dfm() // 50f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -100220,7 +100220,7 @@ morw2: return; } -void m68000_device::subq_b_imm3_ds_dfm() // 5100 f1f8 +void m68000_mcu_device::subq_b_imm3_ds_dfm() // 5100 f1f8 { int ry = m_irdi & 7; // 2d8 raqw1 @@ -100261,7 +100261,7 @@ void m68000_device::subq_b_imm3_ds_dfm() // 5100 f1f8 return; } -void m68000_device::subq_b_imm3_ais_dfm() // 5110 f1f8 +void m68000_mcu_device::subq_b_imm3_ais_dfm() // 5110 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -100336,7 +100336,7 @@ void m68000_device::subq_b_imm3_ais_dfm() // 5110 f1f8 return; } -void m68000_device::subq_b_imm3_aips_dfm() // 5118 f1f8 +void m68000_mcu_device::subq_b_imm3_aips_dfm() // 5118 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -100415,7 +100415,7 @@ void m68000_device::subq_b_imm3_aips_dfm() // 5118 f1f8 return; } -void m68000_device::subq_b_imm3_pais_dfm() // 5120 f1f8 +void m68000_mcu_device::subq_b_imm3_pais_dfm() // 5120 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -100496,7 +100496,7 @@ void m68000_device::subq_b_imm3_pais_dfm() // 5120 f1f8 return; } -void m68000_device::subq_b_imm3_das_dfm() // 5128 f1f8 +void m68000_mcu_device::subq_b_imm3_das_dfm() // 5128 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -100593,7 +100593,7 @@ void m68000_device::subq_b_imm3_das_dfm() // 5128 f1f8 return; } -void m68000_device::subq_b_imm3_dais_dfm() // 5130 f1f8 +void m68000_mcu_device::subq_b_imm3_dais_dfm() // 5130 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -100728,7 +100728,7 @@ adsw2: return; } -void m68000_device::subq_b_imm3_adr16_dfm() // 5138 f1ff +void m68000_mcu_device::subq_b_imm3_adr16_dfm() // 5138 f1ff { // 00a abwl1 m_aob = m_au; @@ -100824,7 +100824,7 @@ void m68000_device::subq_b_imm3_adr16_dfm() // 5138 f1ff return; } -void m68000_device::subq_b_imm3_adr32_dfm() // 5139 f1ff +void m68000_mcu_device::subq_b_imm3_adr32_dfm() // 5139 f1ff { // 1e2 abll1 m_aob = m_au; @@ -100941,7 +100941,7 @@ void m68000_device::subq_b_imm3_adr32_dfm() // 5139 f1ff return; } -void m68000_device::subq_w_imm3_ds_dfm() // 5140 f1f8 +void m68000_mcu_device::subq_w_imm3_ds_dfm() // 5140 f1f8 { int ry = m_irdi & 7; // 2d8 raqw1 @@ -100982,7 +100982,7 @@ void m68000_device::subq_w_imm3_ds_dfm() // 5140 f1f8 return; } -void m68000_device::subq_w_imm3_as_dfm() // 5148 f1f8 +void m68000_mcu_device::subq_w_imm3_as_dfm() // 5148 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 2dc raql1 @@ -101029,7 +101029,7 @@ void m68000_device::subq_w_imm3_as_dfm() // 5148 f1f8 return; } -void m68000_device::subq_w_imm3_ais_dfm() // 5150 f1f8 +void m68000_mcu_device::subq_w_imm3_ais_dfm() // 5150 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -101112,7 +101112,7 @@ void m68000_device::subq_w_imm3_ais_dfm() // 5150 f1f8 return; } -void m68000_device::subq_w_imm3_aips_dfm() // 5158 f1f8 +void m68000_mcu_device::subq_w_imm3_aips_dfm() // 5158 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -101199,7 +101199,7 @@ void m68000_device::subq_w_imm3_aips_dfm() // 5158 f1f8 return; } -void m68000_device::subq_w_imm3_pais_dfm() // 5160 f1f8 +void m68000_mcu_device::subq_w_imm3_pais_dfm() // 5160 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -101288,7 +101288,7 @@ void m68000_device::subq_w_imm3_pais_dfm() // 5160 f1f8 return; } -void m68000_device::subq_w_imm3_das_dfm() // 5168 f1f8 +void m68000_mcu_device::subq_w_imm3_das_dfm() // 5168 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -101393,7 +101393,7 @@ void m68000_device::subq_w_imm3_das_dfm() // 5168 f1f8 return; } -void m68000_device::subq_w_imm3_dais_dfm() // 5170 f1f8 +void m68000_mcu_device::subq_w_imm3_dais_dfm() // 5170 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -101536,7 +101536,7 @@ adsw2: return; } -void m68000_device::subq_w_imm3_adr16_dfm() // 5178 f1ff +void m68000_mcu_device::subq_w_imm3_adr16_dfm() // 5178 f1ff { // 00a abwl1 m_aob = m_au; @@ -101640,7 +101640,7 @@ void m68000_device::subq_w_imm3_adr16_dfm() // 5178 f1ff return; } -void m68000_device::subq_w_imm3_adr32_dfm() // 5179 f1ff +void m68000_mcu_device::subq_w_imm3_adr32_dfm() // 5179 f1ff { // 1e2 abll1 m_aob = m_au; @@ -101765,7 +101765,7 @@ void m68000_device::subq_w_imm3_adr32_dfm() // 5179 f1ff return; } -void m68000_device::subq_l_imm3_ds_dfm() // 5180 f1f8 +void m68000_mcu_device::subq_l_imm3_ds_dfm() // 5180 f1f8 { int ry = m_irdi & 7; // 2dc raql1 @@ -101814,7 +101814,7 @@ void m68000_device::subq_l_imm3_ds_dfm() // 5180 f1f8 return; } -void m68000_device::subq_l_imm3_as_dfm() // 5188 f1f8 +void m68000_mcu_device::subq_l_imm3_as_dfm() // 5188 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 2dc raql1 @@ -101861,7 +101861,7 @@ void m68000_device::subq_l_imm3_as_dfm() // 5188 f1f8 return; } -void m68000_device::subq_l_imm3_ais_dfm() // 5190 f1f8 +void m68000_mcu_device::subq_l_imm3_ais_dfm() // 5190 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -101988,7 +101988,7 @@ void m68000_device::subq_l_imm3_ais_dfm() // 5190 f1f8 return; } -void m68000_device::subq_l_imm3_aips_dfm() // 5198 f1f8 +void m68000_mcu_device::subq_l_imm3_aips_dfm() // 5198 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -102118,7 +102118,7 @@ void m68000_device::subq_l_imm3_aips_dfm() // 5198 f1f8 return; } -void m68000_device::subq_l_imm3_pais_dfm() // 51a0 f1f8 +void m68000_mcu_device::subq_l_imm3_pais_dfm() // 51a0 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -102249,7 +102249,7 @@ void m68000_device::subq_l_imm3_pais_dfm() // 51a0 f1f8 return; } -void m68000_device::subq_l_imm3_das_dfm() // 51a8 f1f8 +void m68000_mcu_device::subq_l_imm3_das_dfm() // 51a8 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -102397,7 +102397,7 @@ void m68000_device::subq_l_imm3_das_dfm() // 51a8 f1f8 return; } -void m68000_device::subq_l_imm3_dais_dfm() // 51b0 f1f8 +void m68000_mcu_device::subq_l_imm3_dais_dfm() // 51b0 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -102583,7 +102583,7 @@ adsl2: return; } -void m68000_device::subq_l_imm3_adr16_dfm() // 51b8 f1ff +void m68000_mcu_device::subq_l_imm3_adr16_dfm() // 51b8 f1ff { // 00e abww1 m_aob = m_au; @@ -102733,7 +102733,7 @@ void m68000_device::subq_l_imm3_adr16_dfm() // 51b8 f1ff return; } -void m68000_device::subq_l_imm3_adr32_dfm() // 51b9 f1ff +void m68000_mcu_device::subq_l_imm3_adr32_dfm() // 51b9 f1ff { // 1e6 ablw1 m_aob = m_au; @@ -102904,7 +102904,7 @@ void m68000_device::subq_l_imm3_adr32_dfm() // 51b9 f1ff return; } -void m68000_device::sf_ds_dfm() // 51c0 fff8 +void m68000_mcu_device::sf_ds_dfm() // 51c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -102985,7 +102985,7 @@ sccr2: return; } -void m68000_device::dbra_ds_rel16_dfm() // 51c8 fff8 +void m68000_mcu_device::dbra_ds_rel16_dfm() // 51c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -103164,7 +103164,7 @@ dbcc5: goto dbcc4; } -void m68000_device::sf_ais_dfm() // 51d0 fff8 +void m68000_mcu_device::sf_ais_dfm() // 51d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -103275,7 +103275,7 @@ morw2: return; } -void m68000_device::sf_aips_dfm() // 51d8 fff8 +void m68000_mcu_device::sf_aips_dfm() // 51d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -103391,7 +103391,7 @@ morw2: return; } -void m68000_device::sf_pais_dfm() // 51e0 fff8 +void m68000_mcu_device::sf_pais_dfm() // 51e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -103509,7 +103509,7 @@ morw2: return; } -void m68000_device::sf_das_dfm() // 51e8 fff8 +void m68000_mcu_device::sf_das_dfm() // 51e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -103643,7 +103643,7 @@ morw2: return; } -void m68000_device::sf_dais_dfm() // 51f0 fff8 +void m68000_mcu_device::sf_dais_dfm() // 51f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -103817,7 +103817,7 @@ morw2: return; } -void m68000_device::sf_adr16_dfm() // 51f8 ffff +void m68000_mcu_device::sf_adr16_dfm() // 51f8 ffff { // 00a abwl1 m_aob = m_au; @@ -103950,7 +103950,7 @@ morw2: return; } -void m68000_device::sf_adr32_dfm() // 51f9 ffff +void m68000_mcu_device::sf_adr32_dfm() // 51f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -104105,7 +104105,7 @@ morw2: return; } -void m68000_device::shi_ds_dfm() // 52c0 fff8 +void m68000_mcu_device::shi_ds_dfm() // 52c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -104186,7 +104186,7 @@ sccr2: return; } -void m68000_device::dbhi_ds_rel16_dfm() // 52c8 fff8 +void m68000_mcu_device::dbhi_ds_rel16_dfm() // 52c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -104365,7 +104365,7 @@ dbcc5: goto dbcc4; } -void m68000_device::shi_ais_dfm() // 52d0 fff8 +void m68000_mcu_device::shi_ais_dfm() // 52d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -104476,7 +104476,7 @@ morw2: return; } -void m68000_device::shi_aips_dfm() // 52d8 fff8 +void m68000_mcu_device::shi_aips_dfm() // 52d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -104592,7 +104592,7 @@ morw2: return; } -void m68000_device::shi_pais_dfm() // 52e0 fff8 +void m68000_mcu_device::shi_pais_dfm() // 52e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -104710,7 +104710,7 @@ morw2: return; } -void m68000_device::shi_das_dfm() // 52e8 fff8 +void m68000_mcu_device::shi_das_dfm() // 52e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -104844,7 +104844,7 @@ morw2: return; } -void m68000_device::shi_dais_dfm() // 52f0 fff8 +void m68000_mcu_device::shi_dais_dfm() // 52f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -105018,7 +105018,7 @@ morw2: return; } -void m68000_device::shi_adr16_dfm() // 52f8 ffff +void m68000_mcu_device::shi_adr16_dfm() // 52f8 ffff { // 00a abwl1 m_aob = m_au; @@ -105151,7 +105151,7 @@ morw2: return; } -void m68000_device::shi_adr32_dfm() // 52f9 ffff +void m68000_mcu_device::shi_adr32_dfm() // 52f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -105306,7 +105306,7 @@ morw2: return; } -void m68000_device::sls_ds_dfm() // 53c0 fff8 +void m68000_mcu_device::sls_ds_dfm() // 53c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -105387,7 +105387,7 @@ sccr2: return; } -void m68000_device::dbls_ds_rel16_dfm() // 53c8 fff8 +void m68000_mcu_device::dbls_ds_rel16_dfm() // 53c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -105566,7 +105566,7 @@ dbcc5: goto dbcc4; } -void m68000_device::sls_ais_dfm() // 53d0 fff8 +void m68000_mcu_device::sls_ais_dfm() // 53d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -105677,7 +105677,7 @@ morw2: return; } -void m68000_device::sls_aips_dfm() // 53d8 fff8 +void m68000_mcu_device::sls_aips_dfm() // 53d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -105793,7 +105793,7 @@ morw2: return; } -void m68000_device::sls_pais_dfm() // 53e0 fff8 +void m68000_mcu_device::sls_pais_dfm() // 53e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -105911,7 +105911,7 @@ morw2: return; } -void m68000_device::sls_das_dfm() // 53e8 fff8 +void m68000_mcu_device::sls_das_dfm() // 53e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -106045,7 +106045,7 @@ morw2: return; } -void m68000_device::sls_dais_dfm() // 53f0 fff8 +void m68000_mcu_device::sls_dais_dfm() // 53f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -106219,7 +106219,7 @@ morw2: return; } -void m68000_device::sls_adr16_dfm() // 53f8 ffff +void m68000_mcu_device::sls_adr16_dfm() // 53f8 ffff { // 00a abwl1 m_aob = m_au; @@ -106352,7 +106352,7 @@ morw2: return; } -void m68000_device::sls_adr32_dfm() // 53f9 ffff +void m68000_mcu_device::sls_adr32_dfm() // 53f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -106507,7 +106507,7 @@ morw2: return; } -void m68000_device::scc_ds_dfm() // 54c0 fff8 +void m68000_mcu_device::scc_ds_dfm() // 54c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -106588,7 +106588,7 @@ sccr2: return; } -void m68000_device::dbcc_ds_rel16_dfm() // 54c8 fff8 +void m68000_mcu_device::dbcc_ds_rel16_dfm() // 54c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -106767,7 +106767,7 @@ dbcc5: goto dbcc4; } -void m68000_device::scc_ais_dfm() // 54d0 fff8 +void m68000_mcu_device::scc_ais_dfm() // 54d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -106878,7 +106878,7 @@ morw2: return; } -void m68000_device::scc_aips_dfm() // 54d8 fff8 +void m68000_mcu_device::scc_aips_dfm() // 54d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -106994,7 +106994,7 @@ morw2: return; } -void m68000_device::scc_pais_dfm() // 54e0 fff8 +void m68000_mcu_device::scc_pais_dfm() // 54e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -107112,7 +107112,7 @@ morw2: return; } -void m68000_device::scc_das_dfm() // 54e8 fff8 +void m68000_mcu_device::scc_das_dfm() // 54e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -107246,7 +107246,7 @@ morw2: return; } -void m68000_device::scc_dais_dfm() // 54f0 fff8 +void m68000_mcu_device::scc_dais_dfm() // 54f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -107420,7 +107420,7 @@ morw2: return; } -void m68000_device::scc_adr16_dfm() // 54f8 ffff +void m68000_mcu_device::scc_adr16_dfm() // 54f8 ffff { // 00a abwl1 m_aob = m_au; @@ -107553,7 +107553,7 @@ morw2: return; } -void m68000_device::scc_adr32_dfm() // 54f9 ffff +void m68000_mcu_device::scc_adr32_dfm() // 54f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -107708,7 +107708,7 @@ morw2: return; } -void m68000_device::scs_ds_dfm() // 55c0 fff8 +void m68000_mcu_device::scs_ds_dfm() // 55c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -107789,7 +107789,7 @@ sccr2: return; } -void m68000_device::dbcs_ds_rel16_dfm() // 55c8 fff8 +void m68000_mcu_device::dbcs_ds_rel16_dfm() // 55c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -107968,7 +107968,7 @@ dbcc5: goto dbcc4; } -void m68000_device::scs_ais_dfm() // 55d0 fff8 +void m68000_mcu_device::scs_ais_dfm() // 55d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -108079,7 +108079,7 @@ morw2: return; } -void m68000_device::scs_aips_dfm() // 55d8 fff8 +void m68000_mcu_device::scs_aips_dfm() // 55d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -108195,7 +108195,7 @@ morw2: return; } -void m68000_device::scs_pais_dfm() // 55e0 fff8 +void m68000_mcu_device::scs_pais_dfm() // 55e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -108313,7 +108313,7 @@ morw2: return; } -void m68000_device::scs_das_dfm() // 55e8 fff8 +void m68000_mcu_device::scs_das_dfm() // 55e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -108447,7 +108447,7 @@ morw2: return; } -void m68000_device::scs_dais_dfm() // 55f0 fff8 +void m68000_mcu_device::scs_dais_dfm() // 55f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -108621,7 +108621,7 @@ morw2: return; } -void m68000_device::scs_adr16_dfm() // 55f8 ffff +void m68000_mcu_device::scs_adr16_dfm() // 55f8 ffff { // 00a abwl1 m_aob = m_au; @@ -108754,7 +108754,7 @@ morw2: return; } -void m68000_device::scs_adr32_dfm() // 55f9 ffff +void m68000_mcu_device::scs_adr32_dfm() // 55f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -108909,7 +108909,7 @@ morw2: return; } -void m68000_device::sne_ds_dfm() // 56c0 fff8 +void m68000_mcu_device::sne_ds_dfm() // 56c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -108990,7 +108990,7 @@ sccr2: return; } -void m68000_device::dbne_ds_rel16_dfm() // 56c8 fff8 +void m68000_mcu_device::dbne_ds_rel16_dfm() // 56c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -109169,7 +109169,7 @@ dbcc5: goto dbcc4; } -void m68000_device::sne_ais_dfm() // 56d0 fff8 +void m68000_mcu_device::sne_ais_dfm() // 56d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -109280,7 +109280,7 @@ morw2: return; } -void m68000_device::sne_aips_dfm() // 56d8 fff8 +void m68000_mcu_device::sne_aips_dfm() // 56d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -109396,7 +109396,7 @@ morw2: return; } -void m68000_device::sne_pais_dfm() // 56e0 fff8 +void m68000_mcu_device::sne_pais_dfm() // 56e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -109514,7 +109514,7 @@ morw2: return; } -void m68000_device::sne_das_dfm() // 56e8 fff8 +void m68000_mcu_device::sne_das_dfm() // 56e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -109648,7 +109648,7 @@ morw2: return; } -void m68000_device::sne_dais_dfm() // 56f0 fff8 +void m68000_mcu_device::sne_dais_dfm() // 56f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -109822,7 +109822,7 @@ morw2: return; } -void m68000_device::sne_adr16_dfm() // 56f8 ffff +void m68000_mcu_device::sne_adr16_dfm() // 56f8 ffff { // 00a abwl1 m_aob = m_au; @@ -109955,7 +109955,7 @@ morw2: return; } -void m68000_device::sne_adr32_dfm() // 56f9 ffff +void m68000_mcu_device::sne_adr32_dfm() // 56f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -110110,7 +110110,7 @@ morw2: return; } -void m68000_device::seq_ds_dfm() // 57c0 fff8 +void m68000_mcu_device::seq_ds_dfm() // 57c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -110191,7 +110191,7 @@ sccr2: return; } -void m68000_device::dbeq_ds_rel16_dfm() // 57c8 fff8 +void m68000_mcu_device::dbeq_ds_rel16_dfm() // 57c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -110370,7 +110370,7 @@ dbcc5: goto dbcc4; } -void m68000_device::seq_ais_dfm() // 57d0 fff8 +void m68000_mcu_device::seq_ais_dfm() // 57d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -110481,7 +110481,7 @@ morw2: return; } -void m68000_device::seq_aips_dfm() // 57d8 fff8 +void m68000_mcu_device::seq_aips_dfm() // 57d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -110597,7 +110597,7 @@ morw2: return; } -void m68000_device::seq_pais_dfm() // 57e0 fff8 +void m68000_mcu_device::seq_pais_dfm() // 57e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -110715,7 +110715,7 @@ morw2: return; } -void m68000_device::seq_das_dfm() // 57e8 fff8 +void m68000_mcu_device::seq_das_dfm() // 57e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -110849,7 +110849,7 @@ morw2: return; } -void m68000_device::seq_dais_dfm() // 57f0 fff8 +void m68000_mcu_device::seq_dais_dfm() // 57f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -111023,7 +111023,7 @@ morw2: return; } -void m68000_device::seq_adr16_dfm() // 57f8 ffff +void m68000_mcu_device::seq_adr16_dfm() // 57f8 ffff { // 00a abwl1 m_aob = m_au; @@ -111156,7 +111156,7 @@ morw2: return; } -void m68000_device::seq_adr32_dfm() // 57f9 ffff +void m68000_mcu_device::seq_adr32_dfm() // 57f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -111311,7 +111311,7 @@ morw2: return; } -void m68000_device::svc_ds_dfm() // 58c0 fff8 +void m68000_mcu_device::svc_ds_dfm() // 58c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -111392,7 +111392,7 @@ sccr2: return; } -void m68000_device::dbvc_ds_rel16_dfm() // 58c8 fff8 +void m68000_mcu_device::dbvc_ds_rel16_dfm() // 58c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -111571,7 +111571,7 @@ dbcc5: goto dbcc4; } -void m68000_device::svc_ais_dfm() // 58d0 fff8 +void m68000_mcu_device::svc_ais_dfm() // 58d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -111682,7 +111682,7 @@ morw2: return; } -void m68000_device::svc_aips_dfm() // 58d8 fff8 +void m68000_mcu_device::svc_aips_dfm() // 58d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -111798,7 +111798,7 @@ morw2: return; } -void m68000_device::svc_pais_dfm() // 58e0 fff8 +void m68000_mcu_device::svc_pais_dfm() // 58e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -111916,7 +111916,7 @@ morw2: return; } -void m68000_device::svc_das_dfm() // 58e8 fff8 +void m68000_mcu_device::svc_das_dfm() // 58e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -112050,7 +112050,7 @@ morw2: return; } -void m68000_device::svc_dais_dfm() // 58f0 fff8 +void m68000_mcu_device::svc_dais_dfm() // 58f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -112224,7 +112224,7 @@ morw2: return; } -void m68000_device::svc_adr16_dfm() // 58f8 ffff +void m68000_mcu_device::svc_adr16_dfm() // 58f8 ffff { // 00a abwl1 m_aob = m_au; @@ -112357,7 +112357,7 @@ morw2: return; } -void m68000_device::svc_adr32_dfm() // 58f9 ffff +void m68000_mcu_device::svc_adr32_dfm() // 58f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -112512,7 +112512,7 @@ morw2: return; } -void m68000_device::svs_ds_dfm() // 59c0 fff8 +void m68000_mcu_device::svs_ds_dfm() // 59c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -112593,7 +112593,7 @@ sccr2: return; } -void m68000_device::dbvs_ds_rel16_dfm() // 59c8 fff8 +void m68000_mcu_device::dbvs_ds_rel16_dfm() // 59c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -112772,7 +112772,7 @@ dbcc5: goto dbcc4; } -void m68000_device::svs_ais_dfm() // 59d0 fff8 +void m68000_mcu_device::svs_ais_dfm() // 59d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -112883,7 +112883,7 @@ morw2: return; } -void m68000_device::svs_aips_dfm() // 59d8 fff8 +void m68000_mcu_device::svs_aips_dfm() // 59d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -112999,7 +112999,7 @@ morw2: return; } -void m68000_device::svs_pais_dfm() // 59e0 fff8 +void m68000_mcu_device::svs_pais_dfm() // 59e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -113117,7 +113117,7 @@ morw2: return; } -void m68000_device::svs_das_dfm() // 59e8 fff8 +void m68000_mcu_device::svs_das_dfm() // 59e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -113251,7 +113251,7 @@ morw2: return; } -void m68000_device::svs_dais_dfm() // 59f0 fff8 +void m68000_mcu_device::svs_dais_dfm() // 59f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -113425,7 +113425,7 @@ morw2: return; } -void m68000_device::svs_adr16_dfm() // 59f8 ffff +void m68000_mcu_device::svs_adr16_dfm() // 59f8 ffff { // 00a abwl1 m_aob = m_au; @@ -113558,7 +113558,7 @@ morw2: return; } -void m68000_device::svs_adr32_dfm() // 59f9 ffff +void m68000_mcu_device::svs_adr32_dfm() // 59f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -113713,7 +113713,7 @@ morw2: return; } -void m68000_device::spl_ds_dfm() // 5ac0 fff8 +void m68000_mcu_device::spl_ds_dfm() // 5ac0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -113794,7 +113794,7 @@ sccr2: return; } -void m68000_device::dbpl_ds_rel16_dfm() // 5ac8 fff8 +void m68000_mcu_device::dbpl_ds_rel16_dfm() // 5ac8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -113973,7 +113973,7 @@ dbcc5: goto dbcc4; } -void m68000_device::spl_ais_dfm() // 5ad0 fff8 +void m68000_mcu_device::spl_ais_dfm() // 5ad0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -114084,7 +114084,7 @@ morw2: return; } -void m68000_device::spl_aips_dfm() // 5ad8 fff8 +void m68000_mcu_device::spl_aips_dfm() // 5ad8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -114200,7 +114200,7 @@ morw2: return; } -void m68000_device::spl_pais_dfm() // 5ae0 fff8 +void m68000_mcu_device::spl_pais_dfm() // 5ae0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -114318,7 +114318,7 @@ morw2: return; } -void m68000_device::spl_das_dfm() // 5ae8 fff8 +void m68000_mcu_device::spl_das_dfm() // 5ae8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -114452,7 +114452,7 @@ morw2: return; } -void m68000_device::spl_dais_dfm() // 5af0 fff8 +void m68000_mcu_device::spl_dais_dfm() // 5af0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -114626,7 +114626,7 @@ morw2: return; } -void m68000_device::spl_adr16_dfm() // 5af8 ffff +void m68000_mcu_device::spl_adr16_dfm() // 5af8 ffff { // 00a abwl1 m_aob = m_au; @@ -114759,7 +114759,7 @@ morw2: return; } -void m68000_device::spl_adr32_dfm() // 5af9 ffff +void m68000_mcu_device::spl_adr32_dfm() // 5af9 ffff { // 1e2 abll1 m_aob = m_au; @@ -114914,7 +114914,7 @@ morw2: return; } -void m68000_device::smi_ds_dfm() // 5bc0 fff8 +void m68000_mcu_device::smi_ds_dfm() // 5bc0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -114995,7 +114995,7 @@ sccr2: return; } -void m68000_device::dbmi_ds_rel16_dfm() // 5bc8 fff8 +void m68000_mcu_device::dbmi_ds_rel16_dfm() // 5bc8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -115174,7 +115174,7 @@ dbcc5: goto dbcc4; } -void m68000_device::smi_ais_dfm() // 5bd0 fff8 +void m68000_mcu_device::smi_ais_dfm() // 5bd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -115285,7 +115285,7 @@ morw2: return; } -void m68000_device::smi_aips_dfm() // 5bd8 fff8 +void m68000_mcu_device::smi_aips_dfm() // 5bd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -115401,7 +115401,7 @@ morw2: return; } -void m68000_device::smi_pais_dfm() // 5be0 fff8 +void m68000_mcu_device::smi_pais_dfm() // 5be0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -115519,7 +115519,7 @@ morw2: return; } -void m68000_device::smi_das_dfm() // 5be8 fff8 +void m68000_mcu_device::smi_das_dfm() // 5be8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -115653,7 +115653,7 @@ morw2: return; } -void m68000_device::smi_dais_dfm() // 5bf0 fff8 +void m68000_mcu_device::smi_dais_dfm() // 5bf0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -115827,7 +115827,7 @@ morw2: return; } -void m68000_device::smi_adr16_dfm() // 5bf8 ffff +void m68000_mcu_device::smi_adr16_dfm() // 5bf8 ffff { // 00a abwl1 m_aob = m_au; @@ -115960,7 +115960,7 @@ morw2: return; } -void m68000_device::smi_adr32_dfm() // 5bf9 ffff +void m68000_mcu_device::smi_adr32_dfm() // 5bf9 ffff { // 1e2 abll1 m_aob = m_au; @@ -116115,7 +116115,7 @@ morw2: return; } -void m68000_device::sge_ds_dfm() // 5cc0 fff8 +void m68000_mcu_device::sge_ds_dfm() // 5cc0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -116196,7 +116196,7 @@ sccr2: return; } -void m68000_device::dbge_ds_rel16_dfm() // 5cc8 fff8 +void m68000_mcu_device::dbge_ds_rel16_dfm() // 5cc8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -116375,7 +116375,7 @@ dbcc5: goto dbcc4; } -void m68000_device::sge_ais_dfm() // 5cd0 fff8 +void m68000_mcu_device::sge_ais_dfm() // 5cd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -116486,7 +116486,7 @@ morw2: return; } -void m68000_device::sge_aips_dfm() // 5cd8 fff8 +void m68000_mcu_device::sge_aips_dfm() // 5cd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -116602,7 +116602,7 @@ morw2: return; } -void m68000_device::sge_pais_dfm() // 5ce0 fff8 +void m68000_mcu_device::sge_pais_dfm() // 5ce0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -116720,7 +116720,7 @@ morw2: return; } -void m68000_device::sge_das_dfm() // 5ce8 fff8 +void m68000_mcu_device::sge_das_dfm() // 5ce8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -116854,7 +116854,7 @@ morw2: return; } -void m68000_device::sge_dais_dfm() // 5cf0 fff8 +void m68000_mcu_device::sge_dais_dfm() // 5cf0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -117028,7 +117028,7 @@ morw2: return; } -void m68000_device::sge_adr16_dfm() // 5cf8 ffff +void m68000_mcu_device::sge_adr16_dfm() // 5cf8 ffff { // 00a abwl1 m_aob = m_au; @@ -117161,7 +117161,7 @@ morw2: return; } -void m68000_device::sge_adr32_dfm() // 5cf9 ffff +void m68000_mcu_device::sge_adr32_dfm() // 5cf9 ffff { // 1e2 abll1 m_aob = m_au; @@ -117316,7 +117316,7 @@ morw2: return; } -void m68000_device::slt_ds_dfm() // 5dc0 fff8 +void m68000_mcu_device::slt_ds_dfm() // 5dc0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -117397,7 +117397,7 @@ sccr2: return; } -void m68000_device::dblt_ds_rel16_dfm() // 5dc8 fff8 +void m68000_mcu_device::dblt_ds_rel16_dfm() // 5dc8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -117576,7 +117576,7 @@ dbcc5: goto dbcc4; } -void m68000_device::slt_ais_dfm() // 5dd0 fff8 +void m68000_mcu_device::slt_ais_dfm() // 5dd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -117687,7 +117687,7 @@ morw2: return; } -void m68000_device::slt_aips_dfm() // 5dd8 fff8 +void m68000_mcu_device::slt_aips_dfm() // 5dd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -117803,7 +117803,7 @@ morw2: return; } -void m68000_device::slt_pais_dfm() // 5de0 fff8 +void m68000_mcu_device::slt_pais_dfm() // 5de0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -117921,7 +117921,7 @@ morw2: return; } -void m68000_device::slt_das_dfm() // 5de8 fff8 +void m68000_mcu_device::slt_das_dfm() // 5de8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -118055,7 +118055,7 @@ morw2: return; } -void m68000_device::slt_dais_dfm() // 5df0 fff8 +void m68000_mcu_device::slt_dais_dfm() // 5df0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -118229,7 +118229,7 @@ morw2: return; } -void m68000_device::slt_adr16_dfm() // 5df8 ffff +void m68000_mcu_device::slt_adr16_dfm() // 5df8 ffff { // 00a abwl1 m_aob = m_au; @@ -118362,7 +118362,7 @@ morw2: return; } -void m68000_device::slt_adr32_dfm() // 5df9 ffff +void m68000_mcu_device::slt_adr32_dfm() // 5df9 ffff { // 1e2 abll1 m_aob = m_au; @@ -118517,7 +118517,7 @@ morw2: return; } -void m68000_device::sgt_ds_dfm() // 5ec0 fff8 +void m68000_mcu_device::sgt_ds_dfm() // 5ec0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -118598,7 +118598,7 @@ sccr2: return; } -void m68000_device::dbgt_ds_rel16_dfm() // 5ec8 fff8 +void m68000_mcu_device::dbgt_ds_rel16_dfm() // 5ec8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -118777,7 +118777,7 @@ dbcc5: goto dbcc4; } -void m68000_device::sgt_ais_dfm() // 5ed0 fff8 +void m68000_mcu_device::sgt_ais_dfm() // 5ed0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -118888,7 +118888,7 @@ morw2: return; } -void m68000_device::sgt_aips_dfm() // 5ed8 fff8 +void m68000_mcu_device::sgt_aips_dfm() // 5ed8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -119004,7 +119004,7 @@ morw2: return; } -void m68000_device::sgt_pais_dfm() // 5ee0 fff8 +void m68000_mcu_device::sgt_pais_dfm() // 5ee0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -119122,7 +119122,7 @@ morw2: return; } -void m68000_device::sgt_das_dfm() // 5ee8 fff8 +void m68000_mcu_device::sgt_das_dfm() // 5ee8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -119256,7 +119256,7 @@ morw2: return; } -void m68000_device::sgt_dais_dfm() // 5ef0 fff8 +void m68000_mcu_device::sgt_dais_dfm() // 5ef0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -119430,7 +119430,7 @@ morw2: return; } -void m68000_device::sgt_adr16_dfm() // 5ef8 ffff +void m68000_mcu_device::sgt_adr16_dfm() // 5ef8 ffff { // 00a abwl1 m_aob = m_au; @@ -119563,7 +119563,7 @@ morw2: return; } -void m68000_device::sgt_adr32_dfm() // 5ef9 ffff +void m68000_mcu_device::sgt_adr32_dfm() // 5ef9 ffff { // 1e2 abll1 m_aob = m_au; @@ -119718,7 +119718,7 @@ morw2: return; } -void m68000_device::sle_ds_dfm() // 5fc0 fff8 +void m68000_mcu_device::sle_ds_dfm() // 5fc0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -119799,7 +119799,7 @@ sccr2: return; } -void m68000_device::dble_ds_rel16_dfm() // 5fc8 fff8 +void m68000_mcu_device::dble_ds_rel16_dfm() // 5fc8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -119978,7 +119978,7 @@ dbcc5: goto dbcc4; } -void m68000_device::sle_ais_dfm() // 5fd0 fff8 +void m68000_mcu_device::sle_ais_dfm() // 5fd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -120089,7 +120089,7 @@ morw2: return; } -void m68000_device::sle_aips_dfm() // 5fd8 fff8 +void m68000_mcu_device::sle_aips_dfm() // 5fd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -120205,7 +120205,7 @@ morw2: return; } -void m68000_device::sle_pais_dfm() // 5fe0 fff8 +void m68000_mcu_device::sle_pais_dfm() // 5fe0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -120323,7 +120323,7 @@ morw2: return; } -void m68000_device::sle_das_dfm() // 5fe8 fff8 +void m68000_mcu_device::sle_das_dfm() // 5fe8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -120457,7 +120457,7 @@ morw2: return; } -void m68000_device::sle_dais_dfm() // 5ff0 fff8 +void m68000_mcu_device::sle_dais_dfm() // 5ff0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -120631,7 +120631,7 @@ morw2: return; } -void m68000_device::sle_adr16_dfm() // 5ff8 ffff +void m68000_mcu_device::sle_adr16_dfm() // 5ff8 ffff { // 00a abwl1 m_aob = m_au; @@ -120764,7 +120764,7 @@ morw2: return; } -void m68000_device::sle_adr32_dfm() // 5ff9 ffff +void m68000_mcu_device::sle_adr32_dfm() // 5ff9 ffff { // 1e2 abll1 m_aob = m_au; @@ -120919,7 +120919,7 @@ morw2: return; } -void m68000_device::bra_rel16_dfm() // 6000 ffff +void m68000_mcu_device::bra_rel16_dfm() // 6000 ffff { // 068 bbcw1 m_t = 1; @@ -121020,7 +121020,7 @@ b: return; } -void m68000_device::bra_rel8_dfm() // 6000 ff00 +void m68000_mcu_device::bra_rel8_dfm() // 6000 ff00 { // 308 bbci1 m_t = 1; @@ -121097,7 +121097,7 @@ b: return; } -void m68000_device::bsr_rel16_dfm() // 6100 ffff +void m68000_mcu_device::bsr_rel16_dfm() // 6100 ffff { // 0a9 bsrw1 m_at = m_au; @@ -121203,7 +121203,7 @@ void m68000_device::bsr_rel16_dfm() // 6100 ffff return; } -void m68000_device::bsr_rel8_dfm() // 6100 ff00 +void m68000_mcu_device::bsr_rel8_dfm() // 6100 ff00 { // 089 bsri1 m_at = m_pc; @@ -121309,7 +121309,7 @@ void m68000_device::bsr_rel8_dfm() // 6100 ff00 return; } -void m68000_device::bhi_rel16_dfm() // 6200 ffff +void m68000_mcu_device::bhi_rel16_dfm() // 6200 ffff { // 068 bbcw1 m_t = (m_sr & (SR_C|SR_Z)) == 0; @@ -121410,7 +121410,7 @@ b: return; } -void m68000_device::bhi_rel8_dfm() // 6200 ff00 +void m68000_mcu_device::bhi_rel8_dfm() // 6200 ff00 { // 308 bbci1 m_t = (m_sr & (SR_C|SR_Z)) == 0; @@ -121487,7 +121487,7 @@ b: return; } -void m68000_device::bls_rel16_dfm() // 6300 ffff +void m68000_mcu_device::bls_rel16_dfm() // 6300 ffff { // 068 bbcw1 m_t = (m_sr & (SR_C|SR_Z)) != 0; @@ -121588,7 +121588,7 @@ b: return; } -void m68000_device::bls_rel8_dfm() // 6300 ff00 +void m68000_mcu_device::bls_rel8_dfm() // 6300 ff00 { // 308 bbci1 m_t = (m_sr & (SR_C|SR_Z)) != 0; @@ -121665,7 +121665,7 @@ b: return; } -void m68000_device::bcc_rel16_dfm() // 6400 ffff +void m68000_mcu_device::bcc_rel16_dfm() // 6400 ffff { // 068 bbcw1 m_t = !(m_sr & SR_C); @@ -121766,7 +121766,7 @@ b: return; } -void m68000_device::bcc_rel8_dfm() // 6400 ff00 +void m68000_mcu_device::bcc_rel8_dfm() // 6400 ff00 { // 308 bbci1 m_t = !(m_sr & SR_C); @@ -121843,7 +121843,7 @@ b: return; } -void m68000_device::bcs_rel16_dfm() // 6500 ffff +void m68000_mcu_device::bcs_rel16_dfm() // 6500 ffff { // 068 bbcw1 m_t = m_sr & SR_C; @@ -121944,7 +121944,7 @@ b: return; } -void m68000_device::bcs_rel8_dfm() // 6500 ff00 +void m68000_mcu_device::bcs_rel8_dfm() // 6500 ff00 { // 308 bbci1 m_t = m_sr & SR_C; @@ -122021,7 +122021,7 @@ b: return; } -void m68000_device::bne_rel16_dfm() // 6600 ffff +void m68000_mcu_device::bne_rel16_dfm() // 6600 ffff { // 068 bbcw1 m_t = !(m_sr & SR_Z); @@ -122122,7 +122122,7 @@ b: return; } -void m68000_device::bne_rel8_dfm() // 6600 ff00 +void m68000_mcu_device::bne_rel8_dfm() // 6600 ff00 { // 308 bbci1 m_t = !(m_sr & SR_Z); @@ -122199,7 +122199,7 @@ b: return; } -void m68000_device::beq_rel16_dfm() // 6700 ffff +void m68000_mcu_device::beq_rel16_dfm() // 6700 ffff { // 068 bbcw1 m_t = m_sr & SR_Z; @@ -122300,7 +122300,7 @@ b: return; } -void m68000_device::beq_rel8_dfm() // 6700 ff00 +void m68000_mcu_device::beq_rel8_dfm() // 6700 ff00 { // 308 bbci1 m_t = m_sr & SR_Z; @@ -122377,7 +122377,7 @@ b: return; } -void m68000_device::bvc_rel16_dfm() // 6800 ffff +void m68000_mcu_device::bvc_rel16_dfm() // 6800 ffff { // 068 bbcw1 m_t = !(m_sr & SR_V); @@ -122478,7 +122478,7 @@ b: return; } -void m68000_device::bvc_rel8_dfm() // 6800 ff00 +void m68000_mcu_device::bvc_rel8_dfm() // 6800 ff00 { // 308 bbci1 m_t = !(m_sr & SR_V); @@ -122555,7 +122555,7 @@ b: return; } -void m68000_device::bvs_rel16_dfm() // 6900 ffff +void m68000_mcu_device::bvs_rel16_dfm() // 6900 ffff { // 068 bbcw1 m_t = m_sr & SR_V; @@ -122656,7 +122656,7 @@ b: return; } -void m68000_device::bvs_rel8_dfm() // 6900 ff00 +void m68000_mcu_device::bvs_rel8_dfm() // 6900 ff00 { // 308 bbci1 m_t = m_sr & SR_V; @@ -122733,7 +122733,7 @@ b: return; } -void m68000_device::bpl_rel16_dfm() // 6a00 ffff +void m68000_mcu_device::bpl_rel16_dfm() // 6a00 ffff { // 068 bbcw1 m_t = !(m_sr & SR_N); @@ -122834,7 +122834,7 @@ b: return; } -void m68000_device::bpl_rel8_dfm() // 6a00 ff00 +void m68000_mcu_device::bpl_rel8_dfm() // 6a00 ff00 { // 308 bbci1 m_t = !(m_sr & SR_N); @@ -122911,7 +122911,7 @@ b: return; } -void m68000_device::bmi_rel16_dfm() // 6b00 ffff +void m68000_mcu_device::bmi_rel16_dfm() // 6b00 ffff { // 068 bbcw1 m_t = m_sr & SR_N; @@ -123012,7 +123012,7 @@ b: return; } -void m68000_device::bmi_rel8_dfm() // 6b00 ff00 +void m68000_mcu_device::bmi_rel8_dfm() // 6b00 ff00 { // 308 bbci1 m_t = m_sr & SR_N; @@ -123089,7 +123089,7 @@ b: return; } -void m68000_device::bge_rel16_dfm() // 6c00 ffff +void m68000_mcu_device::bge_rel16_dfm() // 6c00 ffff { // 068 bbcw1 m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); @@ -123190,7 +123190,7 @@ b: return; } -void m68000_device::bge_rel8_dfm() // 6c00 ff00 +void m68000_mcu_device::bge_rel8_dfm() // 6c00 ff00 { // 308 bbci1 m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); @@ -123267,7 +123267,7 @@ b: return; } -void m68000_device::blt_rel16_dfm() // 6d00 ffff +void m68000_mcu_device::blt_rel16_dfm() // 6d00 ffff { // 068 bbcw1 m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); @@ -123368,7 +123368,7 @@ b: return; } -void m68000_device::blt_rel8_dfm() // 6d00 ff00 +void m68000_mcu_device::blt_rel8_dfm() // 6d00 ff00 { // 308 bbci1 m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); @@ -123445,7 +123445,7 @@ b: return; } -void m68000_device::bgt_rel16_dfm() // 6e00 ffff +void m68000_mcu_device::bgt_rel16_dfm() // 6e00 ffff { // 068 bbcw1 m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); @@ -123546,7 +123546,7 @@ b: return; } -void m68000_device::bgt_rel8_dfm() // 6e00 ff00 +void m68000_mcu_device::bgt_rel8_dfm() // 6e00 ff00 { // 308 bbci1 m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); @@ -123623,7 +123623,7 @@ b: return; } -void m68000_device::ble_rel16_dfm() // 6f00 ffff +void m68000_mcu_device::ble_rel16_dfm() // 6f00 ffff { // 068 bbcw1 m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); @@ -123724,7 +123724,7 @@ b: return; } -void m68000_device::ble_rel8_dfm() // 6f00 ff00 +void m68000_mcu_device::ble_rel8_dfm() // 6f00 ff00 { // 308 bbci1 m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); @@ -123801,7 +123801,7 @@ b: return; } -void m68000_device::moveq_imm8o_dd_dfm() // 7000 f100 +void m68000_mcu_device::moveq_imm8o_dd_dfm() // 7000 f100 { int rx = (m_irdi >> 9) & 7; // 23b rlql1 @@ -123841,7 +123841,7 @@ void m68000_device::moveq_imm8o_dd_dfm() // 7000 f100 return; } -void m68000_device::or_b_ds_dd_dfm() // 8000 f1f8 +void m68000_mcu_device::or_b_ds_dd_dfm() // 8000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -123884,7 +123884,7 @@ void m68000_device::or_b_ds_dd_dfm() // 8000 f1f8 return; } -void m68000_device::or_b_ais_dd_dfm() // 8010 f1f8 +void m68000_mcu_device::or_b_ais_dd_dfm() // 8010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -123949,7 +123949,7 @@ void m68000_device::or_b_ais_dd_dfm() // 8010 f1f8 return; } -void m68000_device::or_b_aips_dd_dfm() // 8018 f1f8 +void m68000_mcu_device::or_b_aips_dd_dfm() // 8018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -124019,7 +124019,7 @@ void m68000_device::or_b_aips_dd_dfm() // 8018 f1f8 return; } -void m68000_device::or_b_pais_dd_dfm() // 8020 f1f8 +void m68000_mcu_device::or_b_pais_dd_dfm() // 8020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -124091,7 +124091,7 @@ void m68000_device::or_b_pais_dd_dfm() // 8020 f1f8 return; } -void m68000_device::or_b_das_dd_dfm() // 8028 f1f8 +void m68000_mcu_device::or_b_das_dd_dfm() // 8028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -124179,7 +124179,7 @@ void m68000_device::or_b_das_dd_dfm() // 8028 f1f8 return; } -void m68000_device::or_b_dais_dd_dfm() // 8030 f1f8 +void m68000_mcu_device::or_b_dais_dd_dfm() // 8030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -124307,7 +124307,7 @@ adsw2: return; } -void m68000_device::or_b_adr16_dd_dfm() // 8038 f1ff +void m68000_mcu_device::or_b_adr16_dd_dfm() // 8038 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -124394,7 +124394,7 @@ void m68000_device::or_b_adr16_dd_dfm() // 8038 f1ff return; } -void m68000_device::or_b_adr32_dd_dfm() // 8039 f1ff +void m68000_mcu_device::or_b_adr32_dd_dfm() // 8039 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -124503,7 +124503,7 @@ void m68000_device::or_b_adr32_dd_dfm() // 8039 f1ff return; } -void m68000_device::or_b_dpc_dd_dfm() // 803a f1ff +void m68000_mcu_device::or_b_dpc_dd_dfm() // 803a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -124590,7 +124590,7 @@ void m68000_device::or_b_dpc_dd_dfm() // 803a f1ff return; } -void m68000_device::or_b_dpci_dd_dfm() // 803b f1ff +void m68000_mcu_device::or_b_dpci_dd_dfm() // 803b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -124717,7 +124717,7 @@ adsw2: return; } -void m68000_device::or_b_imm8_dd_dfm() // 803c f1ff +void m68000_mcu_device::or_b_imm8_dd_dfm() // 803c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -124784,7 +124784,7 @@ void m68000_device::or_b_imm8_dd_dfm() // 803c f1ff return; } -void m68000_device::or_w_ds_dd_dfm() // 8040 f1f8 +void m68000_mcu_device::or_w_ds_dd_dfm() // 8040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -124827,7 +124827,7 @@ void m68000_device::or_w_ds_dd_dfm() // 8040 f1f8 return; } -void m68000_device::or_w_ais_dd_dfm() // 8050 f1f8 +void m68000_mcu_device::or_w_ais_dd_dfm() // 8050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -124895,7 +124895,7 @@ void m68000_device::or_w_ais_dd_dfm() // 8050 f1f8 return; } -void m68000_device::or_w_aips_dd_dfm() // 8058 f1f8 +void m68000_mcu_device::or_w_aips_dd_dfm() // 8058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -124968,7 +124968,7 @@ void m68000_device::or_w_aips_dd_dfm() // 8058 f1f8 return; } -void m68000_device::or_w_pais_dd_dfm() // 8060 f1f8 +void m68000_mcu_device::or_w_pais_dd_dfm() // 8060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -125043,7 +125043,7 @@ void m68000_device::or_w_pais_dd_dfm() // 8060 f1f8 return; } -void m68000_device::or_w_das_dd_dfm() // 8068 f1f8 +void m68000_mcu_device::or_w_das_dd_dfm() // 8068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -125134,7 +125134,7 @@ void m68000_device::or_w_das_dd_dfm() // 8068 f1f8 return; } -void m68000_device::or_w_dais_dd_dfm() // 8070 f1f8 +void m68000_mcu_device::or_w_dais_dd_dfm() // 8070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -125265,7 +125265,7 @@ adsw2: return; } -void m68000_device::or_w_adr16_dd_dfm() // 8078 f1ff +void m68000_mcu_device::or_w_adr16_dd_dfm() // 8078 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -125355,7 +125355,7 @@ void m68000_device::or_w_adr16_dd_dfm() // 8078 f1ff return; } -void m68000_device::or_w_adr32_dd_dfm() // 8079 f1ff +void m68000_mcu_device::or_w_adr32_dd_dfm() // 8079 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -125467,7 +125467,7 @@ void m68000_device::or_w_adr32_dd_dfm() // 8079 f1ff return; } -void m68000_device::or_w_dpc_dd_dfm() // 807a f1ff +void m68000_mcu_device::or_w_dpc_dd_dfm() // 807a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -125557,7 +125557,7 @@ void m68000_device::or_w_dpc_dd_dfm() // 807a f1ff return; } -void m68000_device::or_w_dpci_dd_dfm() // 807b f1ff +void m68000_mcu_device::or_w_dpci_dd_dfm() // 807b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -125687,7 +125687,7 @@ adsw2: return; } -void m68000_device::or_w_imm16_dd_dfm() // 807c f1ff +void m68000_mcu_device::or_w_imm16_dd_dfm() // 807c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -125754,7 +125754,7 @@ void m68000_device::or_w_imm16_dd_dfm() // 807c f1ff return; } -void m68000_device::or_l_ds_dd_dfm() // 8080 f1f8 +void m68000_mcu_device::or_l_ds_dd_dfm() // 8080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -125806,7 +125806,7 @@ void m68000_device::or_l_ds_dd_dfm() // 8080 f1f8 return; } -void m68000_device::or_l_ais_dd_dfm() // 8090 f1f8 +void m68000_mcu_device::or_l_ais_dd_dfm() // 8090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -125901,7 +125901,7 @@ void m68000_device::or_l_ais_dd_dfm() // 8090 f1f8 return; } -void m68000_device::or_l_aips_dd_dfm() // 8098 f1f8 +void m68000_mcu_device::or_l_aips_dd_dfm() // 8098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -126000,7 +126000,7 @@ void m68000_device::or_l_aips_dd_dfm() // 8098 f1f8 return; } -void m68000_device::or_l_pais_dd_dfm() // 80a0 f1f8 +void m68000_mcu_device::or_l_pais_dd_dfm() // 80a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -126100,7 +126100,7 @@ void m68000_device::or_l_pais_dd_dfm() // 80a0 f1f8 return; } -void m68000_device::or_l_das_dd_dfm() // 80a8 f1f8 +void m68000_mcu_device::or_l_das_dd_dfm() // 80a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -126217,7 +126217,7 @@ void m68000_device::or_l_das_dd_dfm() // 80a8 f1f8 return; } -void m68000_device::or_l_dais_dd_dfm() // 80b0 f1f8 +void m68000_mcu_device::or_l_dais_dd_dfm() // 80b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -126374,7 +126374,7 @@ adsl2: return; } -void m68000_device::or_l_adr16_dd_dfm() // 80b8 f1ff +void m68000_mcu_device::or_l_adr16_dd_dfm() // 80b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -126494,7 +126494,7 @@ void m68000_device::or_l_adr16_dd_dfm() // 80b8 f1ff return; } -void m68000_device::or_l_adr32_dd_dfm() // 80b9 f1ff +void m68000_mcu_device::or_l_adr32_dd_dfm() // 80b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -126636,7 +126636,7 @@ void m68000_device::or_l_adr32_dd_dfm() // 80b9 f1ff return; } -void m68000_device::or_l_dpc_dd_dfm() // 80ba f1ff +void m68000_mcu_device::or_l_dpc_dd_dfm() // 80ba f1ff { int rx = (m_irdi >> 9) & 7; // 1c6 adsl1 @@ -126752,7 +126752,7 @@ void m68000_device::or_l_dpc_dd_dfm() // 80ba f1ff return; } -void m68000_device::or_l_dpci_dd_dfm() // 80bb f1ff +void m68000_mcu_device::or_l_dpci_dd_dfm() // 80bb f1ff { int rx = (m_irdi >> 9) & 7; // 1e7 aixw0 @@ -126908,7 +126908,7 @@ adsl2: return; } -void m68000_device::or_l_imm32_dd_dfm() // 80bc f1ff +void m68000_mcu_device::or_l_imm32_dd_dfm() // 80bc f1ff { int rx = (m_irdi >> 9) & 7; // 0a7 e#l1 @@ -127006,7 +127006,7 @@ void m68000_device::or_l_imm32_dd_dfm() // 80bc f1ff return; } -void m68000_device::divu_w_ds_dd_dfm() // 80c0 f1f8 +void m68000_mcu_device::divu_w_ds_dd_dfm() // 80c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -127386,7 +127386,7 @@ dvum0: return; } -void m68000_device::divu_w_ais_dd_dfm() // 80d0 f1f8 +void m68000_mcu_device::divu_w_ais_dd_dfm() // 80d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -127790,7 +127790,7 @@ dvum0: return; } -void m68000_device::divu_w_aips_dd_dfm() // 80d8 f1f8 +void m68000_mcu_device::divu_w_aips_dd_dfm() // 80d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -128198,7 +128198,7 @@ dvum0: return; } -void m68000_device::divu_w_pais_dd_dfm() // 80e0 f1f8 +void m68000_mcu_device::divu_w_pais_dd_dfm() // 80e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -128608,7 +128608,7 @@ dvum0: return; } -void m68000_device::divu_w_das_dd_dfm() // 80e8 f1f8 +void m68000_mcu_device::divu_w_das_dd_dfm() // 80e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -129034,7 +129034,7 @@ dvum0: return; } -void m68000_device::divu_w_dais_dd_dfm() // 80f0 f1f8 +void m68000_mcu_device::divu_w_dais_dd_dfm() // 80f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -129498,7 +129498,7 @@ dvum0: return; } -void m68000_device::divu_w_adr16_dd_dfm() // 80f8 f1ff +void m68000_mcu_device::divu_w_adr16_dd_dfm() // 80f8 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -129923,7 +129923,7 @@ dvum0: return; } -void m68000_device::divu_w_adr32_dd_dfm() // 80f9 f1ff +void m68000_mcu_device::divu_w_adr32_dd_dfm() // 80f9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -130369,7 +130369,7 @@ dvum0: return; } -void m68000_device::divu_w_dpc_dd_dfm() // 80fa f1ff +void m68000_mcu_device::divu_w_dpc_dd_dfm() // 80fa f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -130794,7 +130794,7 @@ dvum0: return; } -void m68000_device::divu_w_dpci_dd_dfm() // 80fb f1ff +void m68000_mcu_device::divu_w_dpci_dd_dfm() // 80fb f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -131257,7 +131257,7 @@ dvum0: return; } -void m68000_device::divu_w_imm16_dd_dfm() // 80fc f1ff +void m68000_mcu_device::divu_w_imm16_dd_dfm() // 80fc f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -131660,7 +131660,7 @@ dvum0: return; } -void m68000_device::sbcd_ds_dd_dfm() // 8100 f1f8 +void m68000_mcu_device::sbcd_ds_dd_dfm() // 8100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -131706,7 +131706,7 @@ void m68000_device::sbcd_ds_dd_dfm() // 8100 f1f8 return; } -void m68000_device::sbcd_pais_paid_dfm() // 8108 f1f8 +void m68000_mcu_device::sbcd_pais_paid_dfm() // 8108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -131807,7 +131807,7 @@ void m68000_device::sbcd_pais_paid_dfm() // 8108 f1f8 return; } -void m68000_device::or_b_dd_ais_dfm() // 8110 f1f8 +void m68000_mcu_device::or_b_dd_ais_dfm() // 8110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -131884,7 +131884,7 @@ void m68000_device::or_b_dd_ais_dfm() // 8110 f1f8 return; } -void m68000_device::or_b_dd_aips_dfm() // 8118 f1f8 +void m68000_mcu_device::or_b_dd_aips_dfm() // 8118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -131966,7 +131966,7 @@ void m68000_device::or_b_dd_aips_dfm() // 8118 f1f8 return; } -void m68000_device::or_b_dd_pais_dfm() // 8120 f1f8 +void m68000_mcu_device::or_b_dd_pais_dfm() // 8120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -132050,7 +132050,7 @@ void m68000_device::or_b_dd_pais_dfm() // 8120 f1f8 return; } -void m68000_device::or_b_dd_das_dfm() // 8128 f1f8 +void m68000_mcu_device::or_b_dd_das_dfm() // 8128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -132150,7 +132150,7 @@ void m68000_device::or_b_dd_das_dfm() // 8128 f1f8 return; } -void m68000_device::or_b_dd_dais_dfm() // 8130 f1f8 +void m68000_mcu_device::or_b_dd_dais_dfm() // 8130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -132290,7 +132290,7 @@ adsw2: return; } -void m68000_device::or_b_dd_adr16_dfm() // 8138 f1ff +void m68000_mcu_device::or_b_dd_adr16_dfm() // 8138 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -132389,7 +132389,7 @@ void m68000_device::or_b_dd_adr16_dfm() // 8138 f1ff return; } -void m68000_device::or_b_dd_adr32_dfm() // 8139 f1ff +void m68000_mcu_device::or_b_dd_adr32_dfm() // 8139 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -132510,7 +132510,7 @@ void m68000_device::or_b_dd_adr32_dfm() // 8139 f1ff return; } -void m68000_device::or_w_dd_ais_dfm() // 8150 f1f8 +void m68000_mcu_device::or_w_dd_ais_dfm() // 8150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -132595,7 +132595,7 @@ void m68000_device::or_w_dd_ais_dfm() // 8150 f1f8 return; } -void m68000_device::or_w_dd_aips_dfm() // 8158 f1f8 +void m68000_mcu_device::or_w_dd_aips_dfm() // 8158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -132685,7 +132685,7 @@ void m68000_device::or_w_dd_aips_dfm() // 8158 f1f8 return; } -void m68000_device::or_w_dd_pais_dfm() // 8160 f1f8 +void m68000_mcu_device::or_w_dd_pais_dfm() // 8160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -132777,7 +132777,7 @@ void m68000_device::or_w_dd_pais_dfm() // 8160 f1f8 return; } -void m68000_device::or_w_dd_das_dfm() // 8168 f1f8 +void m68000_mcu_device::or_w_dd_das_dfm() // 8168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -132885,7 +132885,7 @@ void m68000_device::or_w_dd_das_dfm() // 8168 f1f8 return; } -void m68000_device::or_w_dd_dais_dfm() // 8170 f1f8 +void m68000_mcu_device::or_w_dd_dais_dfm() // 8170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -133033,7 +133033,7 @@ adsw2: return; } -void m68000_device::or_w_dd_adr16_dfm() // 8178 f1ff +void m68000_mcu_device::or_w_dd_adr16_dfm() // 8178 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -133140,7 +133140,7 @@ void m68000_device::or_w_dd_adr16_dfm() // 8178 f1ff return; } -void m68000_device::or_w_dd_adr32_dfm() // 8179 f1ff +void m68000_mcu_device::or_w_dd_adr32_dfm() // 8179 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -133269,7 +133269,7 @@ void m68000_device::or_w_dd_adr32_dfm() // 8179 f1ff return; } -void m68000_device::or_l_dd_ais_dfm() // 8190 f1f8 +void m68000_mcu_device::or_l_dd_ais_dfm() // 8190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -133398,7 +133398,7 @@ void m68000_device::or_l_dd_ais_dfm() // 8190 f1f8 return; } -void m68000_device::or_l_dd_aips_dfm() // 8198 f1f8 +void m68000_mcu_device::or_l_dd_aips_dfm() // 8198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -133531,7 +133531,7 @@ void m68000_device::or_l_dd_aips_dfm() // 8198 f1f8 return; } -void m68000_device::or_l_dd_pais_dfm() // 81a0 f1f8 +void m68000_mcu_device::or_l_dd_pais_dfm() // 81a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -133665,7 +133665,7 @@ void m68000_device::or_l_dd_pais_dfm() // 81a0 f1f8 return; } -void m68000_device::or_l_dd_das_dfm() // 81a8 f1f8 +void m68000_mcu_device::or_l_dd_das_dfm() // 81a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -133816,7 +133816,7 @@ void m68000_device::or_l_dd_das_dfm() // 81a8 f1f8 return; } -void m68000_device::or_l_dd_dais_dfm() // 81b0 f1f8 +void m68000_mcu_device::or_l_dd_dais_dfm() // 81b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -134007,7 +134007,7 @@ adsl2: return; } -void m68000_device::or_l_dd_adr16_dfm() // 81b8 f1ff +void m68000_mcu_device::or_l_dd_adr16_dfm() // 81b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -134161,7 +134161,7 @@ void m68000_device::or_l_dd_adr16_dfm() // 81b8 f1ff return; } -void m68000_device::or_l_dd_adr32_dfm() // 81b9 f1ff +void m68000_mcu_device::or_l_dd_adr32_dfm() // 81b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -134337,7 +134337,7 @@ void m68000_device::or_l_dd_adr32_dfm() // 81b9 f1ff return; } -void m68000_device::divs_w_ds_dd_dfm() // 81c0 f1f8 +void m68000_mcu_device::divs_w_ds_dd_dfm() // 81c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -134850,7 +134850,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_ais_dd_dfm() // 81d0 f1f8 +void m68000_mcu_device::divs_w_ais_dd_dfm() // 81d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -135387,7 +135387,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_aips_dd_dfm() // 81d8 f1f8 +void m68000_mcu_device::divs_w_aips_dd_dfm() // 81d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -135928,7 +135928,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_pais_dd_dfm() // 81e0 f1f8 +void m68000_mcu_device::divs_w_pais_dd_dfm() // 81e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -136471,7 +136471,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_das_dd_dfm() // 81e8 f1f8 +void m68000_mcu_device::divs_w_das_dd_dfm() // 81e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -137030,7 +137030,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_dais_dd_dfm() // 81f0 f1f8 +void m68000_mcu_device::divs_w_dais_dd_dfm() // 81f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -137627,7 +137627,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_adr16_dd_dfm() // 81f8 f1ff +void m68000_mcu_device::divs_w_adr16_dd_dfm() // 81f8 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -138185,7 +138185,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_adr32_dd_dfm() // 81f9 f1ff +void m68000_mcu_device::divs_w_adr32_dd_dfm() // 81f9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -138764,7 +138764,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_dpc_dd_dfm() // 81fa f1ff +void m68000_mcu_device::divs_w_dpc_dd_dfm() // 81fa f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -139322,7 +139322,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_dpci_dd_dfm() // 81fb f1ff +void m68000_mcu_device::divs_w_dpci_dd_dfm() // 81fb f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -139918,7 +139918,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_imm16_dd_dfm() // 81fc f1ff +void m68000_mcu_device::divs_w_imm16_dd_dfm() // 81fc f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -140454,7 +140454,7 @@ dvs1c: goto leaa2; } -void m68000_device::sub_b_ds_dd_dfm() // 9000 f1f8 +void m68000_mcu_device::sub_b_ds_dd_dfm() // 9000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -140496,7 +140496,7 @@ void m68000_device::sub_b_ds_dd_dfm() // 9000 f1f8 return; } -void m68000_device::sub_b_ais_dd_dfm() // 9010 f1f8 +void m68000_mcu_device::sub_b_ais_dd_dfm() // 9010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -140559,7 +140559,7 @@ void m68000_device::sub_b_ais_dd_dfm() // 9010 f1f8 return; } -void m68000_device::sub_b_aips_dd_dfm() // 9018 f1f8 +void m68000_mcu_device::sub_b_aips_dd_dfm() // 9018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -140626,7 +140626,7 @@ void m68000_device::sub_b_aips_dd_dfm() // 9018 f1f8 return; } -void m68000_device::sub_b_pais_dd_dfm() // 9020 f1f8 +void m68000_mcu_device::sub_b_pais_dd_dfm() // 9020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -140695,7 +140695,7 @@ void m68000_device::sub_b_pais_dd_dfm() // 9020 f1f8 return; } -void m68000_device::sub_b_das_dd_dfm() // 9028 f1f8 +void m68000_mcu_device::sub_b_das_dd_dfm() // 9028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -140780,7 +140780,7 @@ void m68000_device::sub_b_das_dd_dfm() // 9028 f1f8 return; } -void m68000_device::sub_b_dais_dd_dfm() // 9030 f1f8 +void m68000_mcu_device::sub_b_dais_dd_dfm() // 9030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -140903,7 +140903,7 @@ adsw2: return; } -void m68000_device::sub_b_adr16_dd_dfm() // 9038 f1ff +void m68000_mcu_device::sub_b_adr16_dd_dfm() // 9038 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -140987,7 +140987,7 @@ void m68000_device::sub_b_adr16_dd_dfm() // 9038 f1ff return; } -void m68000_device::sub_b_adr32_dd_dfm() // 9039 f1ff +void m68000_mcu_device::sub_b_adr32_dd_dfm() // 9039 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -141092,7 +141092,7 @@ void m68000_device::sub_b_adr32_dd_dfm() // 9039 f1ff return; } -void m68000_device::sub_b_dpc_dd_dfm() // 903a f1ff +void m68000_mcu_device::sub_b_dpc_dd_dfm() // 903a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -141176,7 +141176,7 @@ void m68000_device::sub_b_dpc_dd_dfm() // 903a f1ff return; } -void m68000_device::sub_b_dpci_dd_dfm() // 903b f1ff +void m68000_mcu_device::sub_b_dpci_dd_dfm() // 903b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -141298,7 +141298,7 @@ adsw2: return; } -void m68000_device::sub_b_imm8_dd_dfm() // 903c f1ff +void m68000_mcu_device::sub_b_imm8_dd_dfm() // 903c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -141363,7 +141363,7 @@ void m68000_device::sub_b_imm8_dd_dfm() // 903c f1ff return; } -void m68000_device::sub_w_ds_dd_dfm() // 9040 f1f8 +void m68000_mcu_device::sub_w_ds_dd_dfm() // 9040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -141405,7 +141405,7 @@ void m68000_device::sub_w_ds_dd_dfm() // 9040 f1f8 return; } -void m68000_device::sub_w_as_dd_dfm() // 9048 f1f8 +void m68000_mcu_device::sub_w_as_dd_dfm() // 9048 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141447,7 +141447,7 @@ void m68000_device::sub_w_as_dd_dfm() // 9048 f1f8 return; } -void m68000_device::sub_w_ais_dd_dfm() // 9050 f1f8 +void m68000_mcu_device::sub_w_ais_dd_dfm() // 9050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141513,7 +141513,7 @@ void m68000_device::sub_w_ais_dd_dfm() // 9050 f1f8 return; } -void m68000_device::sub_w_aips_dd_dfm() // 9058 f1f8 +void m68000_mcu_device::sub_w_aips_dd_dfm() // 9058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141583,7 +141583,7 @@ void m68000_device::sub_w_aips_dd_dfm() // 9058 f1f8 return; } -void m68000_device::sub_w_pais_dd_dfm() // 9060 f1f8 +void m68000_mcu_device::sub_w_pais_dd_dfm() // 9060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141655,7 +141655,7 @@ void m68000_device::sub_w_pais_dd_dfm() // 9060 f1f8 return; } -void m68000_device::sub_w_das_dd_dfm() // 9068 f1f8 +void m68000_mcu_device::sub_w_das_dd_dfm() // 9068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141743,7 +141743,7 @@ void m68000_device::sub_w_das_dd_dfm() // 9068 f1f8 return; } -void m68000_device::sub_w_dais_dd_dfm() // 9070 f1f8 +void m68000_mcu_device::sub_w_dais_dd_dfm() // 9070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141869,7 +141869,7 @@ adsw2: return; } -void m68000_device::sub_w_adr16_dd_dfm() // 9078 f1ff +void m68000_mcu_device::sub_w_adr16_dd_dfm() // 9078 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -141956,7 +141956,7 @@ void m68000_device::sub_w_adr16_dd_dfm() // 9078 f1ff return; } -void m68000_device::sub_w_adr32_dd_dfm() // 9079 f1ff +void m68000_mcu_device::sub_w_adr32_dd_dfm() // 9079 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -142064,7 +142064,7 @@ void m68000_device::sub_w_adr32_dd_dfm() // 9079 f1ff return; } -void m68000_device::sub_w_dpc_dd_dfm() // 907a f1ff +void m68000_mcu_device::sub_w_dpc_dd_dfm() // 907a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -142151,7 +142151,7 @@ void m68000_device::sub_w_dpc_dd_dfm() // 907a f1ff return; } -void m68000_device::sub_w_dpci_dd_dfm() // 907b f1ff +void m68000_mcu_device::sub_w_dpci_dd_dfm() // 907b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -142276,7 +142276,7 @@ adsw2: return; } -void m68000_device::sub_w_imm16_dd_dfm() // 907c f1ff +void m68000_mcu_device::sub_w_imm16_dd_dfm() // 907c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -142341,7 +142341,7 @@ void m68000_device::sub_w_imm16_dd_dfm() // 907c f1ff return; } -void m68000_device::sub_l_ds_dd_dfm() // 9080 f1f8 +void m68000_mcu_device::sub_l_ds_dd_dfm() // 9080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -142391,7 +142391,7 @@ void m68000_device::sub_l_ds_dd_dfm() // 9080 f1f8 return; } -void m68000_device::sub_l_as_dd_dfm() // 9088 f1f8 +void m68000_mcu_device::sub_l_as_dd_dfm() // 9088 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142441,7 +142441,7 @@ void m68000_device::sub_l_as_dd_dfm() // 9088 f1f8 return; } -void m68000_device::sub_l_ais_dd_dfm() // 9090 f1f8 +void m68000_mcu_device::sub_l_ais_dd_dfm() // 9090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142534,7 +142534,7 @@ void m68000_device::sub_l_ais_dd_dfm() // 9090 f1f8 return; } -void m68000_device::sub_l_aips_dd_dfm() // 9098 f1f8 +void m68000_mcu_device::sub_l_aips_dd_dfm() // 9098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142630,7 +142630,7 @@ void m68000_device::sub_l_aips_dd_dfm() // 9098 f1f8 return; } -void m68000_device::sub_l_pais_dd_dfm() // 90a0 f1f8 +void m68000_mcu_device::sub_l_pais_dd_dfm() // 90a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142727,7 +142727,7 @@ void m68000_device::sub_l_pais_dd_dfm() // 90a0 f1f8 return; } -void m68000_device::sub_l_das_dd_dfm() // 90a8 f1f8 +void m68000_mcu_device::sub_l_das_dd_dfm() // 90a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142841,7 +142841,7 @@ void m68000_device::sub_l_das_dd_dfm() // 90a8 f1f8 return; } -void m68000_device::sub_l_dais_dd_dfm() // 90b0 f1f8 +void m68000_mcu_device::sub_l_dais_dd_dfm() // 90b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142993,7 +142993,7 @@ adsl2: return; } -void m68000_device::sub_l_adr16_dd_dfm() // 90b8 f1ff +void m68000_mcu_device::sub_l_adr16_dd_dfm() // 90b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -143109,7 +143109,7 @@ void m68000_device::sub_l_adr16_dd_dfm() // 90b8 f1ff return; } -void m68000_device::sub_l_adr32_dd_dfm() // 90b9 f1ff +void m68000_mcu_device::sub_l_adr32_dd_dfm() // 90b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -143246,7 +143246,7 @@ void m68000_device::sub_l_adr32_dd_dfm() // 90b9 f1ff return; } -void m68000_device::sub_l_dpc_dd_dfm() // 90ba f1ff +void m68000_mcu_device::sub_l_dpc_dd_dfm() // 90ba f1ff { int rx = (m_irdi >> 9) & 7; // 1c6 adsl1 @@ -143359,7 +143359,7 @@ void m68000_device::sub_l_dpc_dd_dfm() // 90ba f1ff return; } -void m68000_device::sub_l_dpci_dd_dfm() // 90bb f1ff +void m68000_mcu_device::sub_l_dpci_dd_dfm() // 90bb f1ff { int rx = (m_irdi >> 9) & 7; // 1e7 aixw0 @@ -143510,7 +143510,7 @@ adsl2: return; } -void m68000_device::sub_l_imm32_dd_dfm() // 90bc f1ff +void m68000_mcu_device::sub_l_imm32_dd_dfm() // 90bc f1ff { int rx = (m_irdi >> 9) & 7; // 0a7 e#l1 @@ -143604,7 +143604,7 @@ void m68000_device::sub_l_imm32_dd_dfm() // 90bc f1ff return; } -void m68000_device::suba_w_ds_ad_dfm() // 90c0 f1f8 +void m68000_mcu_device::suba_w_ds_ad_dfm() // 90c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -143652,7 +143652,7 @@ void m68000_device::suba_w_ds_ad_dfm() // 90c0 f1f8 return; } -void m68000_device::suba_w_as_ad_dfm() // 90c8 f1f8 +void m68000_mcu_device::suba_w_as_ad_dfm() // 90c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -143700,7 +143700,7 @@ void m68000_device::suba_w_as_ad_dfm() // 90c8 f1f8 return; } -void m68000_device::suba_w_ais_ad_dfm() // 90d0 f1f8 +void m68000_mcu_device::suba_w_ais_ad_dfm() // 90d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -143772,7 +143772,7 @@ void m68000_device::suba_w_ais_ad_dfm() // 90d0 f1f8 return; } -void m68000_device::suba_w_aips_ad_dfm() // 90d8 f1f8 +void m68000_mcu_device::suba_w_aips_ad_dfm() // 90d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -143848,7 +143848,7 @@ void m68000_device::suba_w_aips_ad_dfm() // 90d8 f1f8 return; } -void m68000_device::suba_w_pais_ad_dfm() // 90e0 f1f8 +void m68000_mcu_device::suba_w_pais_ad_dfm() // 90e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -143926,7 +143926,7 @@ void m68000_device::suba_w_pais_ad_dfm() // 90e0 f1f8 return; } -void m68000_device::suba_w_das_ad_dfm() // 90e8 f1f8 +void m68000_mcu_device::suba_w_das_ad_dfm() // 90e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -144020,7 +144020,7 @@ void m68000_device::suba_w_das_ad_dfm() // 90e8 f1f8 return; } -void m68000_device::suba_w_dais_ad_dfm() // 90f0 f1f8 +void m68000_mcu_device::suba_w_dais_ad_dfm() // 90f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -144152,7 +144152,7 @@ adsw2: return; } -void m68000_device::suba_w_adr16_ad_dfm() // 90f8 f1ff +void m68000_mcu_device::suba_w_adr16_ad_dfm() // 90f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -144245,7 +144245,7 @@ void m68000_device::suba_w_adr16_ad_dfm() // 90f8 f1ff return; } -void m68000_device::suba_w_adr32_ad_dfm() // 90f9 f1ff +void m68000_mcu_device::suba_w_adr32_ad_dfm() // 90f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -144359,7 +144359,7 @@ void m68000_device::suba_w_adr32_ad_dfm() // 90f9 f1ff return; } -void m68000_device::suba_w_dpc_ad_dfm() // 90fa f1ff +void m68000_mcu_device::suba_w_dpc_ad_dfm() // 90fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -144452,7 +144452,7 @@ void m68000_device::suba_w_dpc_ad_dfm() // 90fa f1ff return; } -void m68000_device::suba_w_dpci_ad_dfm() // 90fb f1ff +void m68000_mcu_device::suba_w_dpci_ad_dfm() // 90fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -144583,7 +144583,7 @@ adsw2: return; } -void m68000_device::suba_w_imm16_ad_dfm() // 90fc f1ff +void m68000_mcu_device::suba_w_imm16_ad_dfm() // 90fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -144654,7 +144654,7 @@ void m68000_device::suba_w_imm16_ad_dfm() // 90fc f1ff return; } -void m68000_device::subx_b_ds_dd_dfm() // 9100 f1f8 +void m68000_mcu_device::subx_b_ds_dd_dfm() // 9100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -144696,7 +144696,7 @@ void m68000_device::subx_b_ds_dd_dfm() // 9100 f1f8 return; } -void m68000_device::subx_b_pais_paid_dfm() // 9108 f1f8 +void m68000_mcu_device::subx_b_pais_paid_dfm() // 9108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -144795,7 +144795,7 @@ void m68000_device::subx_b_pais_paid_dfm() // 9108 f1f8 return; } -void m68000_device::sub_b_dd_ais_dfm() // 9110 f1f8 +void m68000_mcu_device::sub_b_dd_ais_dfm() // 9110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -144870,7 +144870,7 @@ void m68000_device::sub_b_dd_ais_dfm() // 9110 f1f8 return; } -void m68000_device::sub_b_dd_aips_dfm() // 9118 f1f8 +void m68000_mcu_device::sub_b_dd_aips_dfm() // 9118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -144949,7 +144949,7 @@ void m68000_device::sub_b_dd_aips_dfm() // 9118 f1f8 return; } -void m68000_device::sub_b_dd_pais_dfm() // 9120 f1f8 +void m68000_mcu_device::sub_b_dd_pais_dfm() // 9120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145030,7 +145030,7 @@ void m68000_device::sub_b_dd_pais_dfm() // 9120 f1f8 return; } -void m68000_device::sub_b_dd_das_dfm() // 9128 f1f8 +void m68000_mcu_device::sub_b_dd_das_dfm() // 9128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145127,7 +145127,7 @@ void m68000_device::sub_b_dd_das_dfm() // 9128 f1f8 return; } -void m68000_device::sub_b_dd_dais_dfm() // 9130 f1f8 +void m68000_mcu_device::sub_b_dd_dais_dfm() // 9130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145262,7 +145262,7 @@ adsw2: return; } -void m68000_device::sub_b_dd_adr16_dfm() // 9138 f1ff +void m68000_mcu_device::sub_b_dd_adr16_dfm() // 9138 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -145358,7 +145358,7 @@ void m68000_device::sub_b_dd_adr16_dfm() // 9138 f1ff return; } -void m68000_device::sub_b_dd_adr32_dfm() // 9139 f1ff +void m68000_mcu_device::sub_b_dd_adr32_dfm() // 9139 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -145475,7 +145475,7 @@ void m68000_device::sub_b_dd_adr32_dfm() // 9139 f1ff return; } -void m68000_device::subx_w_ds_dd_dfm() // 9140 f1f8 +void m68000_mcu_device::subx_w_ds_dd_dfm() // 9140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -145517,7 +145517,7 @@ void m68000_device::subx_w_ds_dd_dfm() // 9140 f1f8 return; } -void m68000_device::subx_w_pais_paid_dfm() // 9148 f1f8 +void m68000_mcu_device::subx_w_pais_paid_dfm() // 9148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -145627,7 +145627,7 @@ void m68000_device::subx_w_pais_paid_dfm() // 9148 f1f8 return; } -void m68000_device::sub_w_dd_ais_dfm() // 9150 f1f8 +void m68000_mcu_device::sub_w_dd_ais_dfm() // 9150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145710,7 +145710,7 @@ void m68000_device::sub_w_dd_ais_dfm() // 9150 f1f8 return; } -void m68000_device::sub_w_dd_aips_dfm() // 9158 f1f8 +void m68000_mcu_device::sub_w_dd_aips_dfm() // 9158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145797,7 +145797,7 @@ void m68000_device::sub_w_dd_aips_dfm() // 9158 f1f8 return; } -void m68000_device::sub_w_dd_pais_dfm() // 9160 f1f8 +void m68000_mcu_device::sub_w_dd_pais_dfm() // 9160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145886,7 +145886,7 @@ void m68000_device::sub_w_dd_pais_dfm() // 9160 f1f8 return; } -void m68000_device::sub_w_dd_das_dfm() // 9168 f1f8 +void m68000_mcu_device::sub_w_dd_das_dfm() // 9168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145991,7 +145991,7 @@ void m68000_device::sub_w_dd_das_dfm() // 9168 f1f8 return; } -void m68000_device::sub_w_dd_dais_dfm() // 9170 f1f8 +void m68000_mcu_device::sub_w_dd_dais_dfm() // 9170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -146134,7 +146134,7 @@ adsw2: return; } -void m68000_device::sub_w_dd_adr16_dfm() // 9178 f1ff +void m68000_mcu_device::sub_w_dd_adr16_dfm() // 9178 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -146238,7 +146238,7 @@ void m68000_device::sub_w_dd_adr16_dfm() // 9178 f1ff return; } -void m68000_device::sub_w_dd_adr32_dfm() // 9179 f1ff +void m68000_mcu_device::sub_w_dd_adr32_dfm() // 9179 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -146363,7 +146363,7 @@ void m68000_device::sub_w_dd_adr32_dfm() // 9179 f1ff return; } -void m68000_device::subx_l_ds_dd_dfm() // 9180 f1f8 +void m68000_mcu_device::subx_l_ds_dd_dfm() // 9180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -146413,7 +146413,7 @@ void m68000_device::subx_l_ds_dd_dfm() // 9180 f1f8 return; } -void m68000_device::subx_l_pais_paid_dfm() // 9188 f1f8 +void m68000_mcu_device::subx_l_pais_paid_dfm() // 9188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -146588,7 +146588,7 @@ void m68000_device::subx_l_pais_paid_dfm() // 9188 f1f8 return; } -void m68000_device::sub_l_dd_ais_dfm() // 9190 f1f8 +void m68000_mcu_device::sub_l_dd_ais_dfm() // 9190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -146715,7 +146715,7 @@ void m68000_device::sub_l_dd_ais_dfm() // 9190 f1f8 return; } -void m68000_device::sub_l_dd_aips_dfm() // 9198 f1f8 +void m68000_mcu_device::sub_l_dd_aips_dfm() // 9198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -146845,7 +146845,7 @@ void m68000_device::sub_l_dd_aips_dfm() // 9198 f1f8 return; } -void m68000_device::sub_l_dd_pais_dfm() // 91a0 f1f8 +void m68000_mcu_device::sub_l_dd_pais_dfm() // 91a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -146976,7 +146976,7 @@ void m68000_device::sub_l_dd_pais_dfm() // 91a0 f1f8 return; } -void m68000_device::sub_l_dd_das_dfm() // 91a8 f1f8 +void m68000_mcu_device::sub_l_dd_das_dfm() // 91a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -147124,7 +147124,7 @@ void m68000_device::sub_l_dd_das_dfm() // 91a8 f1f8 return; } -void m68000_device::sub_l_dd_dais_dfm() // 91b0 f1f8 +void m68000_mcu_device::sub_l_dd_dais_dfm() // 91b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -147310,7 +147310,7 @@ adsl2: return; } -void m68000_device::sub_l_dd_adr16_dfm() // 91b8 f1ff +void m68000_mcu_device::sub_l_dd_adr16_dfm() // 91b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -147460,7 +147460,7 @@ void m68000_device::sub_l_dd_adr16_dfm() // 91b8 f1ff return; } -void m68000_device::sub_l_dd_adr32_dfm() // 91b9 f1ff +void m68000_mcu_device::sub_l_dd_adr32_dfm() // 91b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -147631,7 +147631,7 @@ void m68000_device::sub_l_dd_adr32_dfm() // 91b9 f1ff return; } -void m68000_device::suba_l_ds_ad_dfm() // 91c0 f1f8 +void m68000_mcu_device::suba_l_ds_ad_dfm() // 91c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -147679,7 +147679,7 @@ void m68000_device::suba_l_ds_ad_dfm() // 91c0 f1f8 return; } -void m68000_device::suba_l_as_ad_dfm() // 91c8 f1f8 +void m68000_mcu_device::suba_l_as_ad_dfm() // 91c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -147727,7 +147727,7 @@ void m68000_device::suba_l_as_ad_dfm() // 91c8 f1f8 return; } -void m68000_device::suba_l_ais_ad_dfm() // 91d0 f1f8 +void m68000_mcu_device::suba_l_ais_ad_dfm() // 91d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -147818,7 +147818,7 @@ void m68000_device::suba_l_ais_ad_dfm() // 91d0 f1f8 return; } -void m68000_device::suba_l_aips_ad_dfm() // 91d8 f1f8 +void m68000_mcu_device::suba_l_aips_ad_dfm() // 91d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -147912,7 +147912,7 @@ void m68000_device::suba_l_aips_ad_dfm() // 91d8 f1f8 return; } -void m68000_device::suba_l_pais_ad_dfm() // 91e0 f1f8 +void m68000_mcu_device::suba_l_pais_ad_dfm() // 91e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -148007,7 +148007,7 @@ void m68000_device::suba_l_pais_ad_dfm() // 91e0 f1f8 return; } -void m68000_device::suba_l_das_ad_dfm() // 91e8 f1f8 +void m68000_mcu_device::suba_l_das_ad_dfm() // 91e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -148119,7 +148119,7 @@ void m68000_device::suba_l_das_ad_dfm() // 91e8 f1f8 return; } -void m68000_device::suba_l_dais_ad_dfm() // 91f0 f1f8 +void m68000_mcu_device::suba_l_dais_ad_dfm() // 91f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -148269,7 +148269,7 @@ adsl2: return; } -void m68000_device::suba_l_adr16_ad_dfm() // 91f8 f1ff +void m68000_mcu_device::suba_l_adr16_ad_dfm() // 91f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -148383,7 +148383,7 @@ void m68000_device::suba_l_adr16_ad_dfm() // 91f8 f1ff return; } -void m68000_device::suba_l_adr32_ad_dfm() // 91f9 f1ff +void m68000_mcu_device::suba_l_adr32_ad_dfm() // 91f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -148518,7 +148518,7 @@ void m68000_device::suba_l_adr32_ad_dfm() // 91f9 f1ff return; } -void m68000_device::suba_l_dpc_ad_dfm() // 91fa f1ff +void m68000_mcu_device::suba_l_dpc_ad_dfm() // 91fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -148629,7 +148629,7 @@ void m68000_device::suba_l_dpc_ad_dfm() // 91fa f1ff return; } -void m68000_device::suba_l_dpci_ad_dfm() // 91fb f1ff +void m68000_mcu_device::suba_l_dpci_ad_dfm() // 91fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -148778,7 +148778,7 @@ adsl2: return; } -void m68000_device::suba_l_imm32_ad_dfm() // 91fc f1ff +void m68000_mcu_device::suba_l_imm32_ad_dfm() // 91fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -148870,7 +148870,7 @@ void m68000_device::suba_l_imm32_ad_dfm() // 91fc f1ff return; } -void m68000_device::cmp_b_ds_dd_dfm() // b000 f1f8 +void m68000_mcu_device::cmp_b_ds_dd_dfm() // b000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -148911,7 +148911,7 @@ void m68000_device::cmp_b_ds_dd_dfm() // b000 f1f8 return; } -void m68000_device::cmp_b_ais_dd_dfm() // b010 f1f8 +void m68000_mcu_device::cmp_b_ais_dd_dfm() // b010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -148973,7 +148973,7 @@ void m68000_device::cmp_b_ais_dd_dfm() // b010 f1f8 return; } -void m68000_device::cmp_b_aips_dd_dfm() // b018 f1f8 +void m68000_mcu_device::cmp_b_aips_dd_dfm() // b018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149039,7 +149039,7 @@ void m68000_device::cmp_b_aips_dd_dfm() // b018 f1f8 return; } -void m68000_device::cmp_b_pais_dd_dfm() // b020 f1f8 +void m68000_mcu_device::cmp_b_pais_dd_dfm() // b020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149107,7 +149107,7 @@ void m68000_device::cmp_b_pais_dd_dfm() // b020 f1f8 return; } -void m68000_device::cmp_b_das_dd_dfm() // b028 f1f8 +void m68000_mcu_device::cmp_b_das_dd_dfm() // b028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149191,7 +149191,7 @@ void m68000_device::cmp_b_das_dd_dfm() // b028 f1f8 return; } -void m68000_device::cmp_b_dais_dd_dfm() // b030 f1f8 +void m68000_mcu_device::cmp_b_dais_dd_dfm() // b030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149313,7 +149313,7 @@ adsw2: return; } -void m68000_device::cmp_b_adr16_dd_dfm() // b038 f1ff +void m68000_mcu_device::cmp_b_adr16_dd_dfm() // b038 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -149396,7 +149396,7 @@ void m68000_device::cmp_b_adr16_dd_dfm() // b038 f1ff return; } -void m68000_device::cmp_b_adr32_dd_dfm() // b039 f1ff +void m68000_mcu_device::cmp_b_adr32_dd_dfm() // b039 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -149500,7 +149500,7 @@ void m68000_device::cmp_b_adr32_dd_dfm() // b039 f1ff return; } -void m68000_device::cmp_b_dpc_dd_dfm() // b03a f1ff +void m68000_mcu_device::cmp_b_dpc_dd_dfm() // b03a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -149583,7 +149583,7 @@ void m68000_device::cmp_b_dpc_dd_dfm() // b03a f1ff return; } -void m68000_device::cmp_b_dpci_dd_dfm() // b03b f1ff +void m68000_mcu_device::cmp_b_dpci_dd_dfm() // b03b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -149704,7 +149704,7 @@ adsw2: return; } -void m68000_device::cmp_b_imm8_dd_dfm() // b03c f1ff +void m68000_mcu_device::cmp_b_imm8_dd_dfm() // b03c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -149768,7 +149768,7 @@ void m68000_device::cmp_b_imm8_dd_dfm() // b03c f1ff return; } -void m68000_device::cmp_w_ds_dd_dfm() // b040 f1f8 +void m68000_mcu_device::cmp_w_ds_dd_dfm() // b040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -149809,7 +149809,7 @@ void m68000_device::cmp_w_ds_dd_dfm() // b040 f1f8 return; } -void m68000_device::cmp_w_as_dd_dfm() // b048 f1f8 +void m68000_mcu_device::cmp_w_as_dd_dfm() // b048 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149850,7 +149850,7 @@ void m68000_device::cmp_w_as_dd_dfm() // b048 f1f8 return; } -void m68000_device::cmp_w_ais_dd_dfm() // b050 f1f8 +void m68000_mcu_device::cmp_w_ais_dd_dfm() // b050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149915,7 +149915,7 @@ void m68000_device::cmp_w_ais_dd_dfm() // b050 f1f8 return; } -void m68000_device::cmp_w_aips_dd_dfm() // b058 f1f8 +void m68000_mcu_device::cmp_w_aips_dd_dfm() // b058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149984,7 +149984,7 @@ void m68000_device::cmp_w_aips_dd_dfm() // b058 f1f8 return; } -void m68000_device::cmp_w_pais_dd_dfm() // b060 f1f8 +void m68000_mcu_device::cmp_w_pais_dd_dfm() // b060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150055,7 +150055,7 @@ void m68000_device::cmp_w_pais_dd_dfm() // b060 f1f8 return; } -void m68000_device::cmp_w_das_dd_dfm() // b068 f1f8 +void m68000_mcu_device::cmp_w_das_dd_dfm() // b068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150142,7 +150142,7 @@ void m68000_device::cmp_w_das_dd_dfm() // b068 f1f8 return; } -void m68000_device::cmp_w_dais_dd_dfm() // b070 f1f8 +void m68000_mcu_device::cmp_w_dais_dd_dfm() // b070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150267,7 +150267,7 @@ adsw2: return; } -void m68000_device::cmp_w_adr16_dd_dfm() // b078 f1ff +void m68000_mcu_device::cmp_w_adr16_dd_dfm() // b078 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -150353,7 +150353,7 @@ void m68000_device::cmp_w_adr16_dd_dfm() // b078 f1ff return; } -void m68000_device::cmp_w_adr32_dd_dfm() // b079 f1ff +void m68000_mcu_device::cmp_w_adr32_dd_dfm() // b079 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -150460,7 +150460,7 @@ void m68000_device::cmp_w_adr32_dd_dfm() // b079 f1ff return; } -void m68000_device::cmp_w_dpc_dd_dfm() // b07a f1ff +void m68000_mcu_device::cmp_w_dpc_dd_dfm() // b07a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -150546,7 +150546,7 @@ void m68000_device::cmp_w_dpc_dd_dfm() // b07a f1ff return; } -void m68000_device::cmp_w_dpci_dd_dfm() // b07b f1ff +void m68000_mcu_device::cmp_w_dpci_dd_dfm() // b07b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -150670,7 +150670,7 @@ adsw2: return; } -void m68000_device::cmp_w_imm16_dd_dfm() // b07c f1ff +void m68000_mcu_device::cmp_w_imm16_dd_dfm() // b07c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -150734,7 +150734,7 @@ void m68000_device::cmp_w_imm16_dd_dfm() // b07c f1ff return; } -void m68000_device::cmp_l_ds_dd_dfm() // b080 f1f8 +void m68000_mcu_device::cmp_l_ds_dd_dfm() // b080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -150780,7 +150780,7 @@ void m68000_device::cmp_l_ds_dd_dfm() // b080 f1f8 return; } -void m68000_device::cmp_l_as_dd_dfm() // b088 f1f8 +void m68000_mcu_device::cmp_l_as_dd_dfm() // b088 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150826,7 +150826,7 @@ void m68000_device::cmp_l_as_dd_dfm() // b088 f1f8 return; } -void m68000_device::cmp_l_ais_dd_dfm() // b090 f1f8 +void m68000_mcu_device::cmp_l_ais_dd_dfm() // b090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150917,7 +150917,7 @@ void m68000_device::cmp_l_ais_dd_dfm() // b090 f1f8 return; } -void m68000_device::cmp_l_aips_dd_dfm() // b098 f1f8 +void m68000_mcu_device::cmp_l_aips_dd_dfm() // b098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -151011,7 +151011,7 @@ void m68000_device::cmp_l_aips_dd_dfm() // b098 f1f8 return; } -void m68000_device::cmp_l_pais_dd_dfm() // b0a0 f1f8 +void m68000_mcu_device::cmp_l_pais_dd_dfm() // b0a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -151106,7 +151106,7 @@ void m68000_device::cmp_l_pais_dd_dfm() // b0a0 f1f8 return; } -void m68000_device::cmp_l_das_dd_dfm() // b0a8 f1f8 +void m68000_mcu_device::cmp_l_das_dd_dfm() // b0a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -151218,7 +151218,7 @@ void m68000_device::cmp_l_das_dd_dfm() // b0a8 f1f8 return; } -void m68000_device::cmp_l_dais_dd_dfm() // b0b0 f1f8 +void m68000_mcu_device::cmp_l_dais_dd_dfm() // b0b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -151368,7 +151368,7 @@ adsl2: return; } -void m68000_device::cmp_l_adr16_dd_dfm() // b0b8 f1ff +void m68000_mcu_device::cmp_l_adr16_dd_dfm() // b0b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -151482,7 +151482,7 @@ void m68000_device::cmp_l_adr16_dd_dfm() // b0b8 f1ff return; } -void m68000_device::cmp_l_adr32_dd_dfm() // b0b9 f1ff +void m68000_mcu_device::cmp_l_adr32_dd_dfm() // b0b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -151617,7 +151617,7 @@ void m68000_device::cmp_l_adr32_dd_dfm() // b0b9 f1ff return; } -void m68000_device::cmp_l_dpc_dd_dfm() // b0ba f1ff +void m68000_mcu_device::cmp_l_dpc_dd_dfm() // b0ba f1ff { int rx = (m_irdi >> 9) & 7; // 1c6 adsl1 @@ -151728,7 +151728,7 @@ void m68000_device::cmp_l_dpc_dd_dfm() // b0ba f1ff return; } -void m68000_device::cmp_l_dpci_dd_dfm() // b0bb f1ff +void m68000_mcu_device::cmp_l_dpci_dd_dfm() // b0bb f1ff { int rx = (m_irdi >> 9) & 7; // 1e7 aixw0 @@ -151877,7 +151877,7 @@ adsl2: return; } -void m68000_device::cmp_l_imm32_dd_dfm() // b0bc f1ff +void m68000_mcu_device::cmp_l_imm32_dd_dfm() // b0bc f1ff { int rx = (m_irdi >> 9) & 7; // 0a7 e#l1 @@ -151967,7 +151967,7 @@ void m68000_device::cmp_l_imm32_dd_dfm() // b0bc f1ff return; } -void m68000_device::cmpa_w_ds_ad_dfm() // b0c0 f1f8 +void m68000_mcu_device::cmpa_w_ds_ad_dfm() // b0c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -152013,7 +152013,7 @@ void m68000_device::cmpa_w_ds_ad_dfm() // b0c0 f1f8 return; } -void m68000_device::cmpa_w_as_ad_dfm() // b0c8 f1f8 +void m68000_mcu_device::cmpa_w_as_ad_dfm() // b0c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -152059,7 +152059,7 @@ void m68000_device::cmpa_w_as_ad_dfm() // b0c8 f1f8 return; } -void m68000_device::cmpa_w_ais_ad_dfm() // b0d0 f1f8 +void m68000_mcu_device::cmpa_w_ais_ad_dfm() // b0d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -152129,7 +152129,7 @@ void m68000_device::cmpa_w_ais_ad_dfm() // b0d0 f1f8 return; } -void m68000_device::cmpa_w_aips_ad_dfm() // b0d8 f1f8 +void m68000_mcu_device::cmpa_w_aips_ad_dfm() // b0d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -152203,7 +152203,7 @@ void m68000_device::cmpa_w_aips_ad_dfm() // b0d8 f1f8 return; } -void m68000_device::cmpa_w_pais_ad_dfm() // b0e0 f1f8 +void m68000_mcu_device::cmpa_w_pais_ad_dfm() // b0e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -152279,7 +152279,7 @@ void m68000_device::cmpa_w_pais_ad_dfm() // b0e0 f1f8 return; } -void m68000_device::cmpa_w_das_ad_dfm() // b0e8 f1f8 +void m68000_mcu_device::cmpa_w_das_ad_dfm() // b0e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -152371,7 +152371,7 @@ void m68000_device::cmpa_w_das_ad_dfm() // b0e8 f1f8 return; } -void m68000_device::cmpa_w_dais_ad_dfm() // b0f0 f1f8 +void m68000_mcu_device::cmpa_w_dais_ad_dfm() // b0f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -152501,7 +152501,7 @@ adsw2: return; } -void m68000_device::cmpa_w_adr16_ad_dfm() // b0f8 f1ff +void m68000_mcu_device::cmpa_w_adr16_ad_dfm() // b0f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -152592,7 +152592,7 @@ void m68000_device::cmpa_w_adr16_ad_dfm() // b0f8 f1ff return; } -void m68000_device::cmpa_w_adr32_ad_dfm() // b0f9 f1ff +void m68000_mcu_device::cmpa_w_adr32_ad_dfm() // b0f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -152704,7 +152704,7 @@ void m68000_device::cmpa_w_adr32_ad_dfm() // b0f9 f1ff return; } -void m68000_device::cmpa_w_dpc_ad_dfm() // b0fa f1ff +void m68000_mcu_device::cmpa_w_dpc_ad_dfm() // b0fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -152795,7 +152795,7 @@ void m68000_device::cmpa_w_dpc_ad_dfm() // b0fa f1ff return; } -void m68000_device::cmpa_w_dpci_ad_dfm() // b0fb f1ff +void m68000_mcu_device::cmpa_w_dpci_ad_dfm() // b0fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -152924,7 +152924,7 @@ adsw2: return; } -void m68000_device::cmpa_w_imm16_ad_dfm() // b0fc f1ff +void m68000_mcu_device::cmpa_w_imm16_ad_dfm() // b0fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -152993,7 +152993,7 @@ void m68000_device::cmpa_w_imm16_ad_dfm() // b0fc f1ff return; } -void m68000_device::eor_b_dd_ds_dfm() // b100 f1f8 +void m68000_mcu_device::eor_b_dd_ds_dfm() // b100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -153035,7 +153035,7 @@ void m68000_device::eor_b_dd_ds_dfm() // b100 f1f8 return; } -void m68000_device::cmpm_b_aips_aipd_dfm() // b108 f1f8 +void m68000_mcu_device::cmpm_b_aips_aipd_dfm() // b108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -153115,7 +153115,7 @@ void m68000_device::cmpm_b_aips_aipd_dfm() // b108 f1f8 return; } -void m68000_device::eor_b_dd_ais_dfm() // b110 f1f8 +void m68000_mcu_device::eor_b_dd_ais_dfm() // b110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -153192,7 +153192,7 @@ void m68000_device::eor_b_dd_ais_dfm() // b110 f1f8 return; } -void m68000_device::eor_b_dd_aips_dfm() // b118 f1f8 +void m68000_mcu_device::eor_b_dd_aips_dfm() // b118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -153274,7 +153274,7 @@ void m68000_device::eor_b_dd_aips_dfm() // b118 f1f8 return; } -void m68000_device::eor_b_dd_pais_dfm() // b120 f1f8 +void m68000_mcu_device::eor_b_dd_pais_dfm() // b120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -153358,7 +153358,7 @@ void m68000_device::eor_b_dd_pais_dfm() // b120 f1f8 return; } -void m68000_device::eor_b_dd_das_dfm() // b128 f1f8 +void m68000_mcu_device::eor_b_dd_das_dfm() // b128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -153458,7 +153458,7 @@ void m68000_device::eor_b_dd_das_dfm() // b128 f1f8 return; } -void m68000_device::eor_b_dd_dais_dfm() // b130 f1f8 +void m68000_mcu_device::eor_b_dd_dais_dfm() // b130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -153598,7 +153598,7 @@ adsw2: return; } -void m68000_device::eor_b_dd_adr16_dfm() // b138 f1ff +void m68000_mcu_device::eor_b_dd_adr16_dfm() // b138 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -153697,7 +153697,7 @@ void m68000_device::eor_b_dd_adr16_dfm() // b138 f1ff return; } -void m68000_device::eor_b_dd_adr32_dfm() // b139 f1ff +void m68000_mcu_device::eor_b_dd_adr32_dfm() // b139 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -153818,7 +153818,7 @@ void m68000_device::eor_b_dd_adr32_dfm() // b139 f1ff return; } -void m68000_device::eor_w_dd_ds_dfm() // b140 f1f8 +void m68000_mcu_device::eor_w_dd_ds_dfm() // b140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -153860,7 +153860,7 @@ void m68000_device::eor_w_dd_ds_dfm() // b140 f1f8 return; } -void m68000_device::cmpm_w_aips_aipd_dfm() // b148 f1f8 +void m68000_mcu_device::cmpm_w_aips_aipd_dfm() // b148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -153946,7 +153946,7 @@ void m68000_device::cmpm_w_aips_aipd_dfm() // b148 f1f8 return; } -void m68000_device::eor_w_dd_ais_dfm() // b150 f1f8 +void m68000_mcu_device::eor_w_dd_ais_dfm() // b150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -154031,7 +154031,7 @@ void m68000_device::eor_w_dd_ais_dfm() // b150 f1f8 return; } -void m68000_device::eor_w_dd_aips_dfm() // b158 f1f8 +void m68000_mcu_device::eor_w_dd_aips_dfm() // b158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -154121,7 +154121,7 @@ void m68000_device::eor_w_dd_aips_dfm() // b158 f1f8 return; } -void m68000_device::eor_w_dd_pais_dfm() // b160 f1f8 +void m68000_mcu_device::eor_w_dd_pais_dfm() // b160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -154213,7 +154213,7 @@ void m68000_device::eor_w_dd_pais_dfm() // b160 f1f8 return; } -void m68000_device::eor_w_dd_das_dfm() // b168 f1f8 +void m68000_mcu_device::eor_w_dd_das_dfm() // b168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -154321,7 +154321,7 @@ void m68000_device::eor_w_dd_das_dfm() // b168 f1f8 return; } -void m68000_device::eor_w_dd_dais_dfm() // b170 f1f8 +void m68000_mcu_device::eor_w_dd_dais_dfm() // b170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -154469,7 +154469,7 @@ adsw2: return; } -void m68000_device::eor_w_dd_adr16_dfm() // b178 f1ff +void m68000_mcu_device::eor_w_dd_adr16_dfm() // b178 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -154576,7 +154576,7 @@ void m68000_device::eor_w_dd_adr16_dfm() // b178 f1ff return; } -void m68000_device::eor_w_dd_adr32_dfm() // b179 f1ff +void m68000_mcu_device::eor_w_dd_adr32_dfm() // b179 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -154705,7 +154705,7 @@ void m68000_device::eor_w_dd_adr32_dfm() // b179 f1ff return; } -void m68000_device::eor_l_dd_ds_dfm() // b180 f1f8 +void m68000_mcu_device::eor_l_dd_ds_dfm() // b180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -154756,7 +154756,7 @@ void m68000_device::eor_l_dd_ds_dfm() // b180 f1f8 return; } -void m68000_device::cmpm_l_aips_aipd_dfm() // b188 f1f8 +void m68000_mcu_device::cmpm_l_aips_aipd_dfm() // b188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -154888,7 +154888,7 @@ void m68000_device::cmpm_l_aips_aipd_dfm() // b188 f1f8 return; } -void m68000_device::eor_l_dd_ais_dfm() // b190 f1f8 +void m68000_mcu_device::eor_l_dd_ais_dfm() // b190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -155017,7 +155017,7 @@ void m68000_device::eor_l_dd_ais_dfm() // b190 f1f8 return; } -void m68000_device::eor_l_dd_aips_dfm() // b198 f1f8 +void m68000_mcu_device::eor_l_dd_aips_dfm() // b198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -155150,7 +155150,7 @@ void m68000_device::eor_l_dd_aips_dfm() // b198 f1f8 return; } -void m68000_device::eor_l_dd_pais_dfm() // b1a0 f1f8 +void m68000_mcu_device::eor_l_dd_pais_dfm() // b1a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -155284,7 +155284,7 @@ void m68000_device::eor_l_dd_pais_dfm() // b1a0 f1f8 return; } -void m68000_device::eor_l_dd_das_dfm() // b1a8 f1f8 +void m68000_mcu_device::eor_l_dd_das_dfm() // b1a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -155435,7 +155435,7 @@ void m68000_device::eor_l_dd_das_dfm() // b1a8 f1f8 return; } -void m68000_device::eor_l_dd_dais_dfm() // b1b0 f1f8 +void m68000_mcu_device::eor_l_dd_dais_dfm() // b1b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -155626,7 +155626,7 @@ adsl2: return; } -void m68000_device::eor_l_dd_adr16_dfm() // b1b8 f1ff +void m68000_mcu_device::eor_l_dd_adr16_dfm() // b1b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -155780,7 +155780,7 @@ void m68000_device::eor_l_dd_adr16_dfm() // b1b8 f1ff return; } -void m68000_device::eor_l_dd_adr32_dfm() // b1b9 f1ff +void m68000_mcu_device::eor_l_dd_adr32_dfm() // b1b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -155956,7 +155956,7 @@ void m68000_device::eor_l_dd_adr32_dfm() // b1b9 f1ff return; } -void m68000_device::cmpa_l_ds_ad_dfm() // b1c0 f1f8 +void m68000_mcu_device::cmpa_l_ds_ad_dfm() // b1c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -156002,7 +156002,7 @@ void m68000_device::cmpa_l_ds_ad_dfm() // b1c0 f1f8 return; } -void m68000_device::cmpa_l_as_ad_dfm() // b1c8 f1f8 +void m68000_mcu_device::cmpa_l_as_ad_dfm() // b1c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -156048,7 +156048,7 @@ void m68000_device::cmpa_l_as_ad_dfm() // b1c8 f1f8 return; } -void m68000_device::cmpa_l_ais_ad_dfm() // b1d0 f1f8 +void m68000_mcu_device::cmpa_l_ais_ad_dfm() // b1d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -156139,7 +156139,7 @@ void m68000_device::cmpa_l_ais_ad_dfm() // b1d0 f1f8 return; } -void m68000_device::cmpa_l_aips_ad_dfm() // b1d8 f1f8 +void m68000_mcu_device::cmpa_l_aips_ad_dfm() // b1d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -156233,7 +156233,7 @@ void m68000_device::cmpa_l_aips_ad_dfm() // b1d8 f1f8 return; } -void m68000_device::cmpa_l_pais_ad_dfm() // b1e0 f1f8 +void m68000_mcu_device::cmpa_l_pais_ad_dfm() // b1e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -156328,7 +156328,7 @@ void m68000_device::cmpa_l_pais_ad_dfm() // b1e0 f1f8 return; } -void m68000_device::cmpa_l_das_ad_dfm() // b1e8 f1f8 +void m68000_mcu_device::cmpa_l_das_ad_dfm() // b1e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -156440,7 +156440,7 @@ void m68000_device::cmpa_l_das_ad_dfm() // b1e8 f1f8 return; } -void m68000_device::cmpa_l_dais_ad_dfm() // b1f0 f1f8 +void m68000_mcu_device::cmpa_l_dais_ad_dfm() // b1f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -156590,7 +156590,7 @@ adsl2: return; } -void m68000_device::cmpa_l_adr16_ad_dfm() // b1f8 f1ff +void m68000_mcu_device::cmpa_l_adr16_ad_dfm() // b1f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -156704,7 +156704,7 @@ void m68000_device::cmpa_l_adr16_ad_dfm() // b1f8 f1ff return; } -void m68000_device::cmpa_l_adr32_ad_dfm() // b1f9 f1ff +void m68000_mcu_device::cmpa_l_adr32_ad_dfm() // b1f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -156839,7 +156839,7 @@ void m68000_device::cmpa_l_adr32_ad_dfm() // b1f9 f1ff return; } -void m68000_device::cmpa_l_dpc_ad_dfm() // b1fa f1ff +void m68000_mcu_device::cmpa_l_dpc_ad_dfm() // b1fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -156950,7 +156950,7 @@ void m68000_device::cmpa_l_dpc_ad_dfm() // b1fa f1ff return; } -void m68000_device::cmpa_l_dpci_ad_dfm() // b1fb f1ff +void m68000_mcu_device::cmpa_l_dpci_ad_dfm() // b1fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -157099,7 +157099,7 @@ adsl2: return; } -void m68000_device::cmpa_l_imm32_ad_dfm() // b1fc f1ff +void m68000_mcu_device::cmpa_l_imm32_ad_dfm() // b1fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -157189,7 +157189,7 @@ void m68000_device::cmpa_l_imm32_ad_dfm() // b1fc f1ff return; } -void m68000_device::and_b_ds_dd_dfm() // c000 f1f8 +void m68000_mcu_device::and_b_ds_dd_dfm() // c000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -157232,7 +157232,7 @@ void m68000_device::and_b_ds_dd_dfm() // c000 f1f8 return; } -void m68000_device::and_b_ais_dd_dfm() // c010 f1f8 +void m68000_mcu_device::and_b_ais_dd_dfm() // c010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -157297,7 +157297,7 @@ void m68000_device::and_b_ais_dd_dfm() // c010 f1f8 return; } -void m68000_device::and_b_aips_dd_dfm() // c018 f1f8 +void m68000_mcu_device::and_b_aips_dd_dfm() // c018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -157367,7 +157367,7 @@ void m68000_device::and_b_aips_dd_dfm() // c018 f1f8 return; } -void m68000_device::and_b_pais_dd_dfm() // c020 f1f8 +void m68000_mcu_device::and_b_pais_dd_dfm() // c020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -157439,7 +157439,7 @@ void m68000_device::and_b_pais_dd_dfm() // c020 f1f8 return; } -void m68000_device::and_b_das_dd_dfm() // c028 f1f8 +void m68000_mcu_device::and_b_das_dd_dfm() // c028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -157527,7 +157527,7 @@ void m68000_device::and_b_das_dd_dfm() // c028 f1f8 return; } -void m68000_device::and_b_dais_dd_dfm() // c030 f1f8 +void m68000_mcu_device::and_b_dais_dd_dfm() // c030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -157655,7 +157655,7 @@ adsw2: return; } -void m68000_device::and_b_adr16_dd_dfm() // c038 f1ff +void m68000_mcu_device::and_b_adr16_dd_dfm() // c038 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -157742,7 +157742,7 @@ void m68000_device::and_b_adr16_dd_dfm() // c038 f1ff return; } -void m68000_device::and_b_adr32_dd_dfm() // c039 f1ff +void m68000_mcu_device::and_b_adr32_dd_dfm() // c039 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -157851,7 +157851,7 @@ void m68000_device::and_b_adr32_dd_dfm() // c039 f1ff return; } -void m68000_device::and_b_dpc_dd_dfm() // c03a f1ff +void m68000_mcu_device::and_b_dpc_dd_dfm() // c03a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -157938,7 +157938,7 @@ void m68000_device::and_b_dpc_dd_dfm() // c03a f1ff return; } -void m68000_device::and_b_dpci_dd_dfm() // c03b f1ff +void m68000_mcu_device::and_b_dpci_dd_dfm() // c03b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -158065,7 +158065,7 @@ adsw2: return; } -void m68000_device::and_b_imm8_dd_dfm() // c03c f1ff +void m68000_mcu_device::and_b_imm8_dd_dfm() // c03c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -158132,7 +158132,7 @@ void m68000_device::and_b_imm8_dd_dfm() // c03c f1ff return; } -void m68000_device::and_w_ds_dd_dfm() // c040 f1f8 +void m68000_mcu_device::and_w_ds_dd_dfm() // c040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -158175,7 +158175,7 @@ void m68000_device::and_w_ds_dd_dfm() // c040 f1f8 return; } -void m68000_device::and_w_ais_dd_dfm() // c050 f1f8 +void m68000_mcu_device::and_w_ais_dd_dfm() // c050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -158243,7 +158243,7 @@ void m68000_device::and_w_ais_dd_dfm() // c050 f1f8 return; } -void m68000_device::and_w_aips_dd_dfm() // c058 f1f8 +void m68000_mcu_device::and_w_aips_dd_dfm() // c058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -158316,7 +158316,7 @@ void m68000_device::and_w_aips_dd_dfm() // c058 f1f8 return; } -void m68000_device::and_w_pais_dd_dfm() // c060 f1f8 +void m68000_mcu_device::and_w_pais_dd_dfm() // c060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -158391,7 +158391,7 @@ void m68000_device::and_w_pais_dd_dfm() // c060 f1f8 return; } -void m68000_device::and_w_das_dd_dfm() // c068 f1f8 +void m68000_mcu_device::and_w_das_dd_dfm() // c068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -158482,7 +158482,7 @@ void m68000_device::and_w_das_dd_dfm() // c068 f1f8 return; } -void m68000_device::and_w_dais_dd_dfm() // c070 f1f8 +void m68000_mcu_device::and_w_dais_dd_dfm() // c070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -158613,7 +158613,7 @@ adsw2: return; } -void m68000_device::and_w_adr16_dd_dfm() // c078 f1ff +void m68000_mcu_device::and_w_adr16_dd_dfm() // c078 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -158703,7 +158703,7 @@ void m68000_device::and_w_adr16_dd_dfm() // c078 f1ff return; } -void m68000_device::and_w_adr32_dd_dfm() // c079 f1ff +void m68000_mcu_device::and_w_adr32_dd_dfm() // c079 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -158815,7 +158815,7 @@ void m68000_device::and_w_adr32_dd_dfm() // c079 f1ff return; } -void m68000_device::and_w_dpc_dd_dfm() // c07a f1ff +void m68000_mcu_device::and_w_dpc_dd_dfm() // c07a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -158905,7 +158905,7 @@ void m68000_device::and_w_dpc_dd_dfm() // c07a f1ff return; } -void m68000_device::and_w_dpci_dd_dfm() // c07b f1ff +void m68000_mcu_device::and_w_dpci_dd_dfm() // c07b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -159035,7 +159035,7 @@ adsw2: return; } -void m68000_device::and_w_imm16_dd_dfm() // c07c f1ff +void m68000_mcu_device::and_w_imm16_dd_dfm() // c07c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -159102,7 +159102,7 @@ void m68000_device::and_w_imm16_dd_dfm() // c07c f1ff return; } -void m68000_device::and_l_ds_dd_dfm() // c080 f1f8 +void m68000_mcu_device::and_l_ds_dd_dfm() // c080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -159154,7 +159154,7 @@ void m68000_device::and_l_ds_dd_dfm() // c080 f1f8 return; } -void m68000_device::and_l_ais_dd_dfm() // c090 f1f8 +void m68000_mcu_device::and_l_ais_dd_dfm() // c090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159249,7 +159249,7 @@ void m68000_device::and_l_ais_dd_dfm() // c090 f1f8 return; } -void m68000_device::and_l_aips_dd_dfm() // c098 f1f8 +void m68000_mcu_device::and_l_aips_dd_dfm() // c098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159348,7 +159348,7 @@ void m68000_device::and_l_aips_dd_dfm() // c098 f1f8 return; } -void m68000_device::and_l_pais_dd_dfm() // c0a0 f1f8 +void m68000_mcu_device::and_l_pais_dd_dfm() // c0a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159448,7 +159448,7 @@ void m68000_device::and_l_pais_dd_dfm() // c0a0 f1f8 return; } -void m68000_device::and_l_das_dd_dfm() // c0a8 f1f8 +void m68000_mcu_device::and_l_das_dd_dfm() // c0a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159565,7 +159565,7 @@ void m68000_device::and_l_das_dd_dfm() // c0a8 f1f8 return; } -void m68000_device::and_l_dais_dd_dfm() // c0b0 f1f8 +void m68000_mcu_device::and_l_dais_dd_dfm() // c0b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159722,7 +159722,7 @@ adsl2: return; } -void m68000_device::and_l_adr16_dd_dfm() // c0b8 f1ff +void m68000_mcu_device::and_l_adr16_dd_dfm() // c0b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -159842,7 +159842,7 @@ void m68000_device::and_l_adr16_dd_dfm() // c0b8 f1ff return; } -void m68000_device::and_l_adr32_dd_dfm() // c0b9 f1ff +void m68000_mcu_device::and_l_adr32_dd_dfm() // c0b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -159984,7 +159984,7 @@ void m68000_device::and_l_adr32_dd_dfm() // c0b9 f1ff return; } -void m68000_device::and_l_dpc_dd_dfm() // c0ba f1ff +void m68000_mcu_device::and_l_dpc_dd_dfm() // c0ba f1ff { int rx = (m_irdi >> 9) & 7; // 1c6 adsl1 @@ -160100,7 +160100,7 @@ void m68000_device::and_l_dpc_dd_dfm() // c0ba f1ff return; } -void m68000_device::and_l_dpci_dd_dfm() // c0bb f1ff +void m68000_mcu_device::and_l_dpci_dd_dfm() // c0bb f1ff { int rx = (m_irdi >> 9) & 7; // 1e7 aixw0 @@ -160256,7 +160256,7 @@ adsl2: return; } -void m68000_device::and_l_imm32_dd_dfm() // c0bc f1ff +void m68000_mcu_device::and_l_imm32_dd_dfm() // c0bc f1ff { int rx = (m_irdi >> 9) & 7; // 0a7 e#l1 @@ -160354,7 +160354,7 @@ void m68000_device::and_l_imm32_dd_dfm() // c0bc f1ff return; } -void m68000_device::mulu_w_ds_dd_dfm() // c0c0 f1f8 +void m68000_mcu_device::mulu_w_ds_dd_dfm() // c0c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -160433,7 +160433,7 @@ mulm6: return; } -void m68000_device::mulu_w_ais_dd_dfm() // c0d0 f1f8 +void m68000_mcu_device::mulu_w_ais_dd_dfm() // c0d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160536,7 +160536,7 @@ mulm6: return; } -void m68000_device::mulu_w_aips_dd_dfm() // c0d8 f1f8 +void m68000_mcu_device::mulu_w_aips_dd_dfm() // c0d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160643,7 +160643,7 @@ mulm6: return; } -void m68000_device::mulu_w_pais_dd_dfm() // c0e0 f1f8 +void m68000_mcu_device::mulu_w_pais_dd_dfm() // c0e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160752,7 +160752,7 @@ mulm6: return; } -void m68000_device::mulu_w_das_dd_dfm() // c0e8 f1f8 +void m68000_mcu_device::mulu_w_das_dd_dfm() // c0e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160877,7 +160877,7 @@ mulm6: return; } -void m68000_device::mulu_w_dais_dd_dfm() // c0f0 f1f8 +void m68000_mcu_device::mulu_w_dais_dd_dfm() // c0f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -161040,7 +161040,7 @@ mulm6: return; } -void m68000_device::mulu_w_adr16_dd_dfm() // c0f8 f1ff +void m68000_mcu_device::mulu_w_adr16_dd_dfm() // c0f8 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -161164,7 +161164,7 @@ mulm6: return; } -void m68000_device::mulu_w_adr32_dd_dfm() // c0f9 f1ff +void m68000_mcu_device::mulu_w_adr32_dd_dfm() // c0f9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -161309,7 +161309,7 @@ mulm6: return; } -void m68000_device::mulu_w_dpc_dd_dfm() // c0fa f1ff +void m68000_mcu_device::mulu_w_dpc_dd_dfm() // c0fa f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -161433,7 +161433,7 @@ mulm6: return; } -void m68000_device::mulu_w_dpci_dd_dfm() // c0fb f1ff +void m68000_mcu_device::mulu_w_dpci_dd_dfm() // c0fb f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -161595,7 +161595,7 @@ mulm6: return; } -void m68000_device::mulu_w_imm16_dd_dfm() // c0fc f1ff +void m68000_mcu_device::mulu_w_imm16_dd_dfm() // c0fc f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -161697,7 +161697,7 @@ mulm6: return; } -void m68000_device::abcd_ds_dd_dfm() // c100 f1f8 +void m68000_mcu_device::abcd_ds_dd_dfm() // c100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -161743,7 +161743,7 @@ void m68000_device::abcd_ds_dd_dfm() // c100 f1f8 return; } -void m68000_device::abcd_pais_paid_dfm() // c108 f1f8 +void m68000_mcu_device::abcd_pais_paid_dfm() // c108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -161844,7 +161844,7 @@ void m68000_device::abcd_pais_paid_dfm() // c108 f1f8 return; } -void m68000_device::and_b_dd_ais_dfm() // c110 f1f8 +void m68000_mcu_device::and_b_dd_ais_dfm() // c110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -161921,7 +161921,7 @@ void m68000_device::and_b_dd_ais_dfm() // c110 f1f8 return; } -void m68000_device::and_b_dd_aips_dfm() // c118 f1f8 +void m68000_mcu_device::and_b_dd_aips_dfm() // c118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -162003,7 +162003,7 @@ void m68000_device::and_b_dd_aips_dfm() // c118 f1f8 return; } -void m68000_device::and_b_dd_pais_dfm() // c120 f1f8 +void m68000_mcu_device::and_b_dd_pais_dfm() // c120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -162087,7 +162087,7 @@ void m68000_device::and_b_dd_pais_dfm() // c120 f1f8 return; } -void m68000_device::and_b_dd_das_dfm() // c128 f1f8 +void m68000_mcu_device::and_b_dd_das_dfm() // c128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -162187,7 +162187,7 @@ void m68000_device::and_b_dd_das_dfm() // c128 f1f8 return; } -void m68000_device::and_b_dd_dais_dfm() // c130 f1f8 +void m68000_mcu_device::and_b_dd_dais_dfm() // c130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -162327,7 +162327,7 @@ adsw2: return; } -void m68000_device::and_b_dd_adr16_dfm() // c138 f1ff +void m68000_mcu_device::and_b_dd_adr16_dfm() // c138 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -162426,7 +162426,7 @@ void m68000_device::and_b_dd_adr16_dfm() // c138 f1ff return; } -void m68000_device::and_b_dd_adr32_dfm() // c139 f1ff +void m68000_mcu_device::and_b_dd_adr32_dfm() // c139 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -162547,7 +162547,7 @@ void m68000_device::and_b_dd_adr32_dfm() // c139 f1ff return; } -void m68000_device::exg_dd_ds_dfm() // c140 f1f8 +void m68000_mcu_device::exg_dd_ds_dfm() // c140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -162591,7 +162591,7 @@ void m68000_device::exg_dd_ds_dfm() // c140 f1f8 return; } -void m68000_device::exg_ad_as_dfm() // c148 f1f8 +void m68000_mcu_device::exg_ad_as_dfm() // c148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -162635,7 +162635,7 @@ void m68000_device::exg_ad_as_dfm() // c148 f1f8 return; } -void m68000_device::and_w_dd_ais_dfm() // c150 f1f8 +void m68000_mcu_device::and_w_dd_ais_dfm() // c150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -162720,7 +162720,7 @@ void m68000_device::and_w_dd_ais_dfm() // c150 f1f8 return; } -void m68000_device::and_w_dd_aips_dfm() // c158 f1f8 +void m68000_mcu_device::and_w_dd_aips_dfm() // c158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -162810,7 +162810,7 @@ void m68000_device::and_w_dd_aips_dfm() // c158 f1f8 return; } -void m68000_device::and_w_dd_pais_dfm() // c160 f1f8 +void m68000_mcu_device::and_w_dd_pais_dfm() // c160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -162902,7 +162902,7 @@ void m68000_device::and_w_dd_pais_dfm() // c160 f1f8 return; } -void m68000_device::and_w_dd_das_dfm() // c168 f1f8 +void m68000_mcu_device::and_w_dd_das_dfm() // c168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -163010,7 +163010,7 @@ void m68000_device::and_w_dd_das_dfm() // c168 f1f8 return; } -void m68000_device::and_w_dd_dais_dfm() // c170 f1f8 +void m68000_mcu_device::and_w_dd_dais_dfm() // c170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -163158,7 +163158,7 @@ adsw2: return; } -void m68000_device::and_w_dd_adr16_dfm() // c178 f1ff +void m68000_mcu_device::and_w_dd_adr16_dfm() // c178 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -163265,7 +163265,7 @@ void m68000_device::and_w_dd_adr16_dfm() // c178 f1ff return; } -void m68000_device::and_w_dd_adr32_dfm() // c179 f1ff +void m68000_mcu_device::and_w_dd_adr32_dfm() // c179 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -163394,7 +163394,7 @@ void m68000_device::and_w_dd_adr32_dfm() // c179 f1ff return; } -void m68000_device::exg_dd_as_dfm() // c188 f1f8 +void m68000_mcu_device::exg_dd_as_dfm() // c188 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -163438,7 +163438,7 @@ void m68000_device::exg_dd_as_dfm() // c188 f1f8 return; } -void m68000_device::and_l_dd_ais_dfm() // c190 f1f8 +void m68000_mcu_device::and_l_dd_ais_dfm() // c190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -163567,7 +163567,7 @@ void m68000_device::and_l_dd_ais_dfm() // c190 f1f8 return; } -void m68000_device::and_l_dd_aips_dfm() // c198 f1f8 +void m68000_mcu_device::and_l_dd_aips_dfm() // c198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -163700,7 +163700,7 @@ void m68000_device::and_l_dd_aips_dfm() // c198 f1f8 return; } -void m68000_device::and_l_dd_pais_dfm() // c1a0 f1f8 +void m68000_mcu_device::and_l_dd_pais_dfm() // c1a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -163834,7 +163834,7 @@ void m68000_device::and_l_dd_pais_dfm() // c1a0 f1f8 return; } -void m68000_device::and_l_dd_das_dfm() // c1a8 f1f8 +void m68000_mcu_device::and_l_dd_das_dfm() // c1a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -163985,7 +163985,7 @@ void m68000_device::and_l_dd_das_dfm() // c1a8 f1f8 return; } -void m68000_device::and_l_dd_dais_dfm() // c1b0 f1f8 +void m68000_mcu_device::and_l_dd_dais_dfm() // c1b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164176,7 +164176,7 @@ adsl2: return; } -void m68000_device::and_l_dd_adr16_dfm() // c1b8 f1ff +void m68000_mcu_device::and_l_dd_adr16_dfm() // c1b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -164330,7 +164330,7 @@ void m68000_device::and_l_dd_adr16_dfm() // c1b8 f1ff return; } -void m68000_device::and_l_dd_adr32_dfm() // c1b9 f1ff +void m68000_mcu_device::and_l_dd_adr32_dfm() // c1b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -164506,7 +164506,7 @@ void m68000_device::and_l_dd_adr32_dfm() // c1b9 f1ff return; } -void m68000_device::muls_w_ds_dd_dfm() // c1c0 f1f8 +void m68000_mcu_device::muls_w_ds_dd_dfm() // c1c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -164594,7 +164594,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_ais_dd_dfm() // c1d0 f1f8 +void m68000_mcu_device::muls_w_ais_dd_dfm() // c1d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164706,7 +164706,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_aips_dd_dfm() // c1d8 f1f8 +void m68000_mcu_device::muls_w_aips_dd_dfm() // c1d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164822,7 +164822,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_pais_dd_dfm() // c1e0 f1f8 +void m68000_mcu_device::muls_w_pais_dd_dfm() // c1e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164940,7 +164940,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_das_dd_dfm() // c1e8 f1f8 +void m68000_mcu_device::muls_w_das_dd_dfm() // c1e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -165074,7 +165074,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_dais_dd_dfm() // c1f0 f1f8 +void m68000_mcu_device::muls_w_dais_dd_dfm() // c1f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -165246,7 +165246,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_adr16_dd_dfm() // c1f8 f1ff +void m68000_mcu_device::muls_w_adr16_dd_dfm() // c1f8 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -165379,7 +165379,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_adr32_dd_dfm() // c1f9 f1ff +void m68000_mcu_device::muls_w_adr32_dd_dfm() // c1f9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -165533,7 +165533,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_dpc_dd_dfm() // c1fa f1ff +void m68000_mcu_device::muls_w_dpc_dd_dfm() // c1fa f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -165666,7 +165666,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_dpci_dd_dfm() // c1fb f1ff +void m68000_mcu_device::muls_w_dpci_dd_dfm() // c1fb f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -165837,7 +165837,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_imm16_dd_dfm() // c1fc f1ff +void m68000_mcu_device::muls_w_imm16_dd_dfm() // c1fc f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -165948,7 +165948,7 @@ mulm3: goto mulm4; } -void m68000_device::add_b_ds_dd_dfm() // d000 f1f8 +void m68000_mcu_device::add_b_ds_dd_dfm() // d000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -165990,7 +165990,7 @@ void m68000_device::add_b_ds_dd_dfm() // d000 f1f8 return; } -void m68000_device::add_b_ais_dd_dfm() // d010 f1f8 +void m68000_mcu_device::add_b_ais_dd_dfm() // d010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166053,7 +166053,7 @@ void m68000_device::add_b_ais_dd_dfm() // d010 f1f8 return; } -void m68000_device::add_b_aips_dd_dfm() // d018 f1f8 +void m68000_mcu_device::add_b_aips_dd_dfm() // d018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166120,7 +166120,7 @@ void m68000_device::add_b_aips_dd_dfm() // d018 f1f8 return; } -void m68000_device::add_b_pais_dd_dfm() // d020 f1f8 +void m68000_mcu_device::add_b_pais_dd_dfm() // d020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166189,7 +166189,7 @@ void m68000_device::add_b_pais_dd_dfm() // d020 f1f8 return; } -void m68000_device::add_b_das_dd_dfm() // d028 f1f8 +void m68000_mcu_device::add_b_das_dd_dfm() // d028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166274,7 +166274,7 @@ void m68000_device::add_b_das_dd_dfm() // d028 f1f8 return; } -void m68000_device::add_b_dais_dd_dfm() // d030 f1f8 +void m68000_mcu_device::add_b_dais_dd_dfm() // d030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166397,7 +166397,7 @@ adsw2: return; } -void m68000_device::add_b_adr16_dd_dfm() // d038 f1ff +void m68000_mcu_device::add_b_adr16_dd_dfm() // d038 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -166481,7 +166481,7 @@ void m68000_device::add_b_adr16_dd_dfm() // d038 f1ff return; } -void m68000_device::add_b_adr32_dd_dfm() // d039 f1ff +void m68000_mcu_device::add_b_adr32_dd_dfm() // d039 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -166586,7 +166586,7 @@ void m68000_device::add_b_adr32_dd_dfm() // d039 f1ff return; } -void m68000_device::add_b_dpc_dd_dfm() // d03a f1ff +void m68000_mcu_device::add_b_dpc_dd_dfm() // d03a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -166670,7 +166670,7 @@ void m68000_device::add_b_dpc_dd_dfm() // d03a f1ff return; } -void m68000_device::add_b_dpci_dd_dfm() // d03b f1ff +void m68000_mcu_device::add_b_dpci_dd_dfm() // d03b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -166792,7 +166792,7 @@ adsw2: return; } -void m68000_device::add_b_imm8_dd_dfm() // d03c f1ff +void m68000_mcu_device::add_b_imm8_dd_dfm() // d03c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -166857,7 +166857,7 @@ void m68000_device::add_b_imm8_dd_dfm() // d03c f1ff return; } -void m68000_device::add_w_ds_dd_dfm() // d040 f1f8 +void m68000_mcu_device::add_w_ds_dd_dfm() // d040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -166899,7 +166899,7 @@ void m68000_device::add_w_ds_dd_dfm() // d040 f1f8 return; } -void m68000_device::add_w_as_dd_dfm() // d048 f1f8 +void m68000_mcu_device::add_w_as_dd_dfm() // d048 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166941,7 +166941,7 @@ void m68000_device::add_w_as_dd_dfm() // d048 f1f8 return; } -void m68000_device::add_w_ais_dd_dfm() // d050 f1f8 +void m68000_mcu_device::add_w_ais_dd_dfm() // d050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -167007,7 +167007,7 @@ void m68000_device::add_w_ais_dd_dfm() // d050 f1f8 return; } -void m68000_device::add_w_aips_dd_dfm() // d058 f1f8 +void m68000_mcu_device::add_w_aips_dd_dfm() // d058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -167077,7 +167077,7 @@ void m68000_device::add_w_aips_dd_dfm() // d058 f1f8 return; } -void m68000_device::add_w_pais_dd_dfm() // d060 f1f8 +void m68000_mcu_device::add_w_pais_dd_dfm() // d060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -167149,7 +167149,7 @@ void m68000_device::add_w_pais_dd_dfm() // d060 f1f8 return; } -void m68000_device::add_w_das_dd_dfm() // d068 f1f8 +void m68000_mcu_device::add_w_das_dd_dfm() // d068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -167237,7 +167237,7 @@ void m68000_device::add_w_das_dd_dfm() // d068 f1f8 return; } -void m68000_device::add_w_dais_dd_dfm() // d070 f1f8 +void m68000_mcu_device::add_w_dais_dd_dfm() // d070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -167363,7 +167363,7 @@ adsw2: return; } -void m68000_device::add_w_adr16_dd_dfm() // d078 f1ff +void m68000_mcu_device::add_w_adr16_dd_dfm() // d078 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -167450,7 +167450,7 @@ void m68000_device::add_w_adr16_dd_dfm() // d078 f1ff return; } -void m68000_device::add_w_adr32_dd_dfm() // d079 f1ff +void m68000_mcu_device::add_w_adr32_dd_dfm() // d079 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -167558,7 +167558,7 @@ void m68000_device::add_w_adr32_dd_dfm() // d079 f1ff return; } -void m68000_device::add_w_dpc_dd_dfm() // d07a f1ff +void m68000_mcu_device::add_w_dpc_dd_dfm() // d07a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -167645,7 +167645,7 @@ void m68000_device::add_w_dpc_dd_dfm() // d07a f1ff return; } -void m68000_device::add_w_dpci_dd_dfm() // d07b f1ff +void m68000_mcu_device::add_w_dpci_dd_dfm() // d07b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -167770,7 +167770,7 @@ adsw2: return; } -void m68000_device::add_w_imm16_dd_dfm() // d07c f1ff +void m68000_mcu_device::add_w_imm16_dd_dfm() // d07c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -167835,7 +167835,7 @@ void m68000_device::add_w_imm16_dd_dfm() // d07c f1ff return; } -void m68000_device::add_l_ds_dd_dfm() // d080 f1f8 +void m68000_mcu_device::add_l_ds_dd_dfm() // d080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -167885,7 +167885,7 @@ void m68000_device::add_l_ds_dd_dfm() // d080 f1f8 return; } -void m68000_device::add_l_as_dd_dfm() // d088 f1f8 +void m68000_mcu_device::add_l_as_dd_dfm() // d088 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -167935,7 +167935,7 @@ void m68000_device::add_l_as_dd_dfm() // d088 f1f8 return; } -void m68000_device::add_l_ais_dd_dfm() // d090 f1f8 +void m68000_mcu_device::add_l_ais_dd_dfm() // d090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168028,7 +168028,7 @@ void m68000_device::add_l_ais_dd_dfm() // d090 f1f8 return; } -void m68000_device::add_l_aips_dd_dfm() // d098 f1f8 +void m68000_mcu_device::add_l_aips_dd_dfm() // d098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168124,7 +168124,7 @@ void m68000_device::add_l_aips_dd_dfm() // d098 f1f8 return; } -void m68000_device::add_l_pais_dd_dfm() // d0a0 f1f8 +void m68000_mcu_device::add_l_pais_dd_dfm() // d0a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168221,7 +168221,7 @@ void m68000_device::add_l_pais_dd_dfm() // d0a0 f1f8 return; } -void m68000_device::add_l_das_dd_dfm() // d0a8 f1f8 +void m68000_mcu_device::add_l_das_dd_dfm() // d0a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168335,7 +168335,7 @@ void m68000_device::add_l_das_dd_dfm() // d0a8 f1f8 return; } -void m68000_device::add_l_dais_dd_dfm() // d0b0 f1f8 +void m68000_mcu_device::add_l_dais_dd_dfm() // d0b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168487,7 +168487,7 @@ adsl2: return; } -void m68000_device::add_l_adr16_dd_dfm() // d0b8 f1ff +void m68000_mcu_device::add_l_adr16_dd_dfm() // d0b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -168603,7 +168603,7 @@ void m68000_device::add_l_adr16_dd_dfm() // d0b8 f1ff return; } -void m68000_device::add_l_adr32_dd_dfm() // d0b9 f1ff +void m68000_mcu_device::add_l_adr32_dd_dfm() // d0b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -168740,7 +168740,7 @@ void m68000_device::add_l_adr32_dd_dfm() // d0b9 f1ff return; } -void m68000_device::add_l_dpc_dd_dfm() // d0ba f1ff +void m68000_mcu_device::add_l_dpc_dd_dfm() // d0ba f1ff { int rx = (m_irdi >> 9) & 7; // 1c6 adsl1 @@ -168853,7 +168853,7 @@ void m68000_device::add_l_dpc_dd_dfm() // d0ba f1ff return; } -void m68000_device::add_l_dpci_dd_dfm() // d0bb f1ff +void m68000_mcu_device::add_l_dpci_dd_dfm() // d0bb f1ff { int rx = (m_irdi >> 9) & 7; // 1e7 aixw0 @@ -169004,7 +169004,7 @@ adsl2: return; } -void m68000_device::add_l_imm32_dd_dfm() // d0bc f1ff +void m68000_mcu_device::add_l_imm32_dd_dfm() // d0bc f1ff { int rx = (m_irdi >> 9) & 7; // 0a7 e#l1 @@ -169098,7 +169098,7 @@ void m68000_device::add_l_imm32_dd_dfm() // d0bc f1ff return; } -void m68000_device::adda_w_ds_ad_dfm() // d0c0 f1f8 +void m68000_mcu_device::adda_w_ds_ad_dfm() // d0c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -169146,7 +169146,7 @@ void m68000_device::adda_w_ds_ad_dfm() // d0c0 f1f8 return; } -void m68000_device::adda_w_as_ad_dfm() // d0c8 f1f8 +void m68000_mcu_device::adda_w_as_ad_dfm() // d0c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -169194,7 +169194,7 @@ void m68000_device::adda_w_as_ad_dfm() // d0c8 f1f8 return; } -void m68000_device::adda_w_ais_ad_dfm() // d0d0 f1f8 +void m68000_mcu_device::adda_w_ais_ad_dfm() // d0d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -169266,7 +169266,7 @@ void m68000_device::adda_w_ais_ad_dfm() // d0d0 f1f8 return; } -void m68000_device::adda_w_aips_ad_dfm() // d0d8 f1f8 +void m68000_mcu_device::adda_w_aips_ad_dfm() // d0d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -169342,7 +169342,7 @@ void m68000_device::adda_w_aips_ad_dfm() // d0d8 f1f8 return; } -void m68000_device::adda_w_pais_ad_dfm() // d0e0 f1f8 +void m68000_mcu_device::adda_w_pais_ad_dfm() // d0e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -169420,7 +169420,7 @@ void m68000_device::adda_w_pais_ad_dfm() // d0e0 f1f8 return; } -void m68000_device::adda_w_das_ad_dfm() // d0e8 f1f8 +void m68000_mcu_device::adda_w_das_ad_dfm() // d0e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -169514,7 +169514,7 @@ void m68000_device::adda_w_das_ad_dfm() // d0e8 f1f8 return; } -void m68000_device::adda_w_dais_ad_dfm() // d0f0 f1f8 +void m68000_mcu_device::adda_w_dais_ad_dfm() // d0f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -169646,7 +169646,7 @@ adsw2: return; } -void m68000_device::adda_w_adr16_ad_dfm() // d0f8 f1ff +void m68000_mcu_device::adda_w_adr16_ad_dfm() // d0f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -169739,7 +169739,7 @@ void m68000_device::adda_w_adr16_ad_dfm() // d0f8 f1ff return; } -void m68000_device::adda_w_adr32_ad_dfm() // d0f9 f1ff +void m68000_mcu_device::adda_w_adr32_ad_dfm() // d0f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -169853,7 +169853,7 @@ void m68000_device::adda_w_adr32_ad_dfm() // d0f9 f1ff return; } -void m68000_device::adda_w_dpc_ad_dfm() // d0fa f1ff +void m68000_mcu_device::adda_w_dpc_ad_dfm() // d0fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -169946,7 +169946,7 @@ void m68000_device::adda_w_dpc_ad_dfm() // d0fa f1ff return; } -void m68000_device::adda_w_dpci_ad_dfm() // d0fb f1ff +void m68000_mcu_device::adda_w_dpci_ad_dfm() // d0fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -170077,7 +170077,7 @@ adsw2: return; } -void m68000_device::adda_w_imm16_ad_dfm() // d0fc f1ff +void m68000_mcu_device::adda_w_imm16_ad_dfm() // d0fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -170148,7 +170148,7 @@ void m68000_device::adda_w_imm16_ad_dfm() // d0fc f1ff return; } -void m68000_device::addx_b_ds_dd_dfm() // d100 f1f8 +void m68000_mcu_device::addx_b_ds_dd_dfm() // d100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -170191,7 +170191,7 @@ void m68000_device::addx_b_ds_dd_dfm() // d100 f1f8 return; } -void m68000_device::addx_b_pais_paid_dfm() // d108 f1f8 +void m68000_mcu_device::addx_b_pais_paid_dfm() // d108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -170294,7 +170294,7 @@ void m68000_device::addx_b_pais_paid_dfm() // d108 f1f8 return; } -void m68000_device::add_b_dd_ais_dfm() // d110 f1f8 +void m68000_mcu_device::add_b_dd_ais_dfm() // d110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170369,7 +170369,7 @@ void m68000_device::add_b_dd_ais_dfm() // d110 f1f8 return; } -void m68000_device::add_b_dd_aips_dfm() // d118 f1f8 +void m68000_mcu_device::add_b_dd_aips_dfm() // d118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170448,7 +170448,7 @@ void m68000_device::add_b_dd_aips_dfm() // d118 f1f8 return; } -void m68000_device::add_b_dd_pais_dfm() // d120 f1f8 +void m68000_mcu_device::add_b_dd_pais_dfm() // d120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170529,7 +170529,7 @@ void m68000_device::add_b_dd_pais_dfm() // d120 f1f8 return; } -void m68000_device::add_b_dd_das_dfm() // d128 f1f8 +void m68000_mcu_device::add_b_dd_das_dfm() // d128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170626,7 +170626,7 @@ void m68000_device::add_b_dd_das_dfm() // d128 f1f8 return; } -void m68000_device::add_b_dd_dais_dfm() // d130 f1f8 +void m68000_mcu_device::add_b_dd_dais_dfm() // d130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170761,7 +170761,7 @@ adsw2: return; } -void m68000_device::add_b_dd_adr16_dfm() // d138 f1ff +void m68000_mcu_device::add_b_dd_adr16_dfm() // d138 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -170857,7 +170857,7 @@ void m68000_device::add_b_dd_adr16_dfm() // d138 f1ff return; } -void m68000_device::add_b_dd_adr32_dfm() // d139 f1ff +void m68000_mcu_device::add_b_dd_adr32_dfm() // d139 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -170974,7 +170974,7 @@ void m68000_device::add_b_dd_adr32_dfm() // d139 f1ff return; } -void m68000_device::addx_w_ds_dd_dfm() // d140 f1f8 +void m68000_mcu_device::addx_w_ds_dd_dfm() // d140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -171017,7 +171017,7 @@ void m68000_device::addx_w_ds_dd_dfm() // d140 f1f8 return; } -void m68000_device::addx_w_pais_paid_dfm() // d148 f1f8 +void m68000_mcu_device::addx_w_pais_paid_dfm() // d148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -171131,7 +171131,7 @@ void m68000_device::addx_w_pais_paid_dfm() // d148 f1f8 return; } -void m68000_device::add_w_dd_ais_dfm() // d150 f1f8 +void m68000_mcu_device::add_w_dd_ais_dfm() // d150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171214,7 +171214,7 @@ void m68000_device::add_w_dd_ais_dfm() // d150 f1f8 return; } -void m68000_device::add_w_dd_aips_dfm() // d158 f1f8 +void m68000_mcu_device::add_w_dd_aips_dfm() // d158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171301,7 +171301,7 @@ void m68000_device::add_w_dd_aips_dfm() // d158 f1f8 return; } -void m68000_device::add_w_dd_pais_dfm() // d160 f1f8 +void m68000_mcu_device::add_w_dd_pais_dfm() // d160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171390,7 +171390,7 @@ void m68000_device::add_w_dd_pais_dfm() // d160 f1f8 return; } -void m68000_device::add_w_dd_das_dfm() // d168 f1f8 +void m68000_mcu_device::add_w_dd_das_dfm() // d168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171495,7 +171495,7 @@ void m68000_device::add_w_dd_das_dfm() // d168 f1f8 return; } -void m68000_device::add_w_dd_dais_dfm() // d170 f1f8 +void m68000_mcu_device::add_w_dd_dais_dfm() // d170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171638,7 +171638,7 @@ adsw2: return; } -void m68000_device::add_w_dd_adr16_dfm() // d178 f1ff +void m68000_mcu_device::add_w_dd_adr16_dfm() // d178 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -171742,7 +171742,7 @@ void m68000_device::add_w_dd_adr16_dfm() // d178 f1ff return; } -void m68000_device::add_w_dd_adr32_dfm() // d179 f1ff +void m68000_mcu_device::add_w_dd_adr32_dfm() // d179 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -171867,7 +171867,7 @@ void m68000_device::add_w_dd_adr32_dfm() // d179 f1ff return; } -void m68000_device::addx_l_ds_dd_dfm() // d180 f1f8 +void m68000_mcu_device::addx_l_ds_dd_dfm() // d180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -171919,7 +171919,7 @@ void m68000_device::addx_l_ds_dd_dfm() // d180 f1f8 return; } -void m68000_device::addx_l_pais_paid_dfm() // d188 f1f8 +void m68000_mcu_device::addx_l_pais_paid_dfm() // d188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -172100,7 +172100,7 @@ void m68000_device::addx_l_pais_paid_dfm() // d188 f1f8 return; } -void m68000_device::add_l_dd_ais_dfm() // d190 f1f8 +void m68000_mcu_device::add_l_dd_ais_dfm() // d190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -172227,7 +172227,7 @@ void m68000_device::add_l_dd_ais_dfm() // d190 f1f8 return; } -void m68000_device::add_l_dd_aips_dfm() // d198 f1f8 +void m68000_mcu_device::add_l_dd_aips_dfm() // d198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -172357,7 +172357,7 @@ void m68000_device::add_l_dd_aips_dfm() // d198 f1f8 return; } -void m68000_device::add_l_dd_pais_dfm() // d1a0 f1f8 +void m68000_mcu_device::add_l_dd_pais_dfm() // d1a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -172488,7 +172488,7 @@ void m68000_device::add_l_dd_pais_dfm() // d1a0 f1f8 return; } -void m68000_device::add_l_dd_das_dfm() // d1a8 f1f8 +void m68000_mcu_device::add_l_dd_das_dfm() // d1a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -172636,7 +172636,7 @@ void m68000_device::add_l_dd_das_dfm() // d1a8 f1f8 return; } -void m68000_device::add_l_dd_dais_dfm() // d1b0 f1f8 +void m68000_mcu_device::add_l_dd_dais_dfm() // d1b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -172822,7 +172822,7 @@ adsl2: return; } -void m68000_device::add_l_dd_adr16_dfm() // d1b8 f1ff +void m68000_mcu_device::add_l_dd_adr16_dfm() // d1b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -172972,7 +172972,7 @@ void m68000_device::add_l_dd_adr16_dfm() // d1b8 f1ff return; } -void m68000_device::add_l_dd_adr32_dfm() // d1b9 f1ff +void m68000_mcu_device::add_l_dd_adr32_dfm() // d1b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -173143,7 +173143,7 @@ void m68000_device::add_l_dd_adr32_dfm() // d1b9 f1ff return; } -void m68000_device::adda_l_ds_ad_dfm() // d1c0 f1f8 +void m68000_mcu_device::adda_l_ds_ad_dfm() // d1c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -173191,7 +173191,7 @@ void m68000_device::adda_l_ds_ad_dfm() // d1c0 f1f8 return; } -void m68000_device::adda_l_as_ad_dfm() // d1c8 f1f8 +void m68000_mcu_device::adda_l_as_ad_dfm() // d1c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -173239,7 +173239,7 @@ void m68000_device::adda_l_as_ad_dfm() // d1c8 f1f8 return; } -void m68000_device::adda_l_ais_ad_dfm() // d1d0 f1f8 +void m68000_mcu_device::adda_l_ais_ad_dfm() // d1d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -173330,7 +173330,7 @@ void m68000_device::adda_l_ais_ad_dfm() // d1d0 f1f8 return; } -void m68000_device::adda_l_aips_ad_dfm() // d1d8 f1f8 +void m68000_mcu_device::adda_l_aips_ad_dfm() // d1d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -173424,7 +173424,7 @@ void m68000_device::adda_l_aips_ad_dfm() // d1d8 f1f8 return; } -void m68000_device::adda_l_pais_ad_dfm() // d1e0 f1f8 +void m68000_mcu_device::adda_l_pais_ad_dfm() // d1e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -173519,7 +173519,7 @@ void m68000_device::adda_l_pais_ad_dfm() // d1e0 f1f8 return; } -void m68000_device::adda_l_das_ad_dfm() // d1e8 f1f8 +void m68000_mcu_device::adda_l_das_ad_dfm() // d1e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -173631,7 +173631,7 @@ void m68000_device::adda_l_das_ad_dfm() // d1e8 f1f8 return; } -void m68000_device::adda_l_dais_ad_dfm() // d1f0 f1f8 +void m68000_mcu_device::adda_l_dais_ad_dfm() // d1f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -173781,7 +173781,7 @@ adsl2: return; } -void m68000_device::adda_l_adr16_ad_dfm() // d1f8 f1ff +void m68000_mcu_device::adda_l_adr16_ad_dfm() // d1f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -173895,7 +173895,7 @@ void m68000_device::adda_l_adr16_ad_dfm() // d1f8 f1ff return; } -void m68000_device::adda_l_adr32_ad_dfm() // d1f9 f1ff +void m68000_mcu_device::adda_l_adr32_ad_dfm() // d1f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -174030,7 +174030,7 @@ void m68000_device::adda_l_adr32_ad_dfm() // d1f9 f1ff return; } -void m68000_device::adda_l_dpc_ad_dfm() // d1fa f1ff +void m68000_mcu_device::adda_l_dpc_ad_dfm() // d1fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -174141,7 +174141,7 @@ void m68000_device::adda_l_dpc_ad_dfm() // d1fa f1ff return; } -void m68000_device::adda_l_dpci_ad_dfm() // d1fb f1ff +void m68000_mcu_device::adda_l_dpci_ad_dfm() // d1fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -174290,7 +174290,7 @@ adsl2: return; } -void m68000_device::adda_l_imm32_ad_dfm() // d1fc f1ff +void m68000_mcu_device::adda_l_imm32_ad_dfm() // d1fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -174382,7 +174382,7 @@ void m68000_device::adda_l_imm32_ad_dfm() // d1fc f1ff return; } -void m68000_device::asr_b_imm3_ds_dfm() // e000 f1f8 +void m68000_mcu_device::asr_b_imm3_ds_dfm() // e000 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -174447,7 +174447,7 @@ nbcr3: return; } -void m68000_device::lsr_b_imm3_ds_dfm() // e008 f1f8 +void m68000_mcu_device::lsr_b_imm3_ds_dfm() // e008 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -174512,7 +174512,7 @@ nbcr3: return; } -void m68000_device::roxr_b_imm3_ds_dfm() // e010 f1f8 +void m68000_mcu_device::roxr_b_imm3_ds_dfm() // e010 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -174577,7 +174577,7 @@ nbcr3: return; } -void m68000_device::ror_b_imm3_ds_dfm() // e018 f1f8 +void m68000_mcu_device::ror_b_imm3_ds_dfm() // e018 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -174642,7 +174642,7 @@ nbcr3: return; } -void m68000_device::asr_b_dd_ds_dfm() // e020 f1f8 +void m68000_mcu_device::asr_b_dd_ds_dfm() // e020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -174708,7 +174708,7 @@ nbcr3: return; } -void m68000_device::lsr_b_dd_ds_dfm() // e028 f1f8 +void m68000_mcu_device::lsr_b_dd_ds_dfm() // e028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -174774,7 +174774,7 @@ nbcr3: return; } -void m68000_device::roxr_b_dd_ds_dfm() // e030 f1f8 +void m68000_mcu_device::roxr_b_dd_ds_dfm() // e030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -174840,7 +174840,7 @@ nbcr3: return; } -void m68000_device::ror_b_dd_ds_dfm() // e038 f1f8 +void m68000_mcu_device::ror_b_dd_ds_dfm() // e038 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -174906,7 +174906,7 @@ nbcr3: return; } -void m68000_device::asr_w_imm3_ds_dfm() // e040 f1f8 +void m68000_mcu_device::asr_w_imm3_ds_dfm() // e040 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -174971,7 +174971,7 @@ nbcr3: return; } -void m68000_device::lsr_w_imm3_ds_dfm() // e048 f1f8 +void m68000_mcu_device::lsr_w_imm3_ds_dfm() // e048 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -175036,7 +175036,7 @@ nbcr3: return; } -void m68000_device::roxr_w_imm3_ds_dfm() // e050 f1f8 +void m68000_mcu_device::roxr_w_imm3_ds_dfm() // e050 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -175101,7 +175101,7 @@ nbcr3: return; } -void m68000_device::ror_w_imm3_ds_dfm() // e058 f1f8 +void m68000_mcu_device::ror_w_imm3_ds_dfm() // e058 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -175166,7 +175166,7 @@ nbcr3: return; } -void m68000_device::asr_w_dd_ds_dfm() // e060 f1f8 +void m68000_mcu_device::asr_w_dd_ds_dfm() // e060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -175232,7 +175232,7 @@ nbcr3: return; } -void m68000_device::lsr_w_dd_ds_dfm() // e068 f1f8 +void m68000_mcu_device::lsr_w_dd_ds_dfm() // e068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -175298,7 +175298,7 @@ nbcr3: return; } -void m68000_device::roxr_w_dd_ds_dfm() // e070 f1f8 +void m68000_mcu_device::roxr_w_dd_ds_dfm() // e070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -175364,7 +175364,7 @@ nbcr3: return; } -void m68000_device::ror_w_dd_ds_dfm() // e078 f1f8 +void m68000_mcu_device::ror_w_dd_ds_dfm() // e078 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -175430,7 +175430,7 @@ nbcr3: return; } -void m68000_device::asr_l_imm3_ds_dfm() // e080 f1f8 +void m68000_mcu_device::asr_l_imm3_ds_dfm() // e080 f1f8 { int ry = m_irdi & 7; // 385 srrl1 @@ -175501,7 +175501,7 @@ srrl4: return; } -void m68000_device::lsr_l_imm3_ds_dfm() // e088 f1f8 +void m68000_mcu_device::lsr_l_imm3_ds_dfm() // e088 f1f8 { int ry = m_irdi & 7; // 385 srrl1 @@ -175572,7 +175572,7 @@ srrl4: return; } -void m68000_device::roxr_l_imm3_ds_dfm() // e090 f1f8 +void m68000_mcu_device::roxr_l_imm3_ds_dfm() // e090 f1f8 { int ry = m_irdi & 7; // 385 srrl1 @@ -175643,7 +175643,7 @@ srrl4: return; } -void m68000_device::ror_l_imm3_ds_dfm() // e098 f1f8 +void m68000_mcu_device::ror_l_imm3_ds_dfm() // e098 f1f8 { int ry = m_irdi & 7; // 385 srrl1 @@ -175714,7 +175714,7 @@ srrl4: return; } -void m68000_device::asr_l_dd_ds_dfm() // e0a0 f1f8 +void m68000_mcu_device::asr_l_dd_ds_dfm() // e0a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -175786,7 +175786,7 @@ srrl4: return; } -void m68000_device::lsr_l_dd_ds_dfm() // e0a8 f1f8 +void m68000_mcu_device::lsr_l_dd_ds_dfm() // e0a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -175858,7 +175858,7 @@ srrl4: return; } -void m68000_device::roxr_l_dd_ds_dfm() // e0b0 f1f8 +void m68000_mcu_device::roxr_l_dd_ds_dfm() // e0b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -175930,7 +175930,7 @@ srrl4: return; } -void m68000_device::ror_l_dd_ds_dfm() // e0b8 f1f8 +void m68000_mcu_device::ror_l_dd_ds_dfm() // e0b8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -176002,7 +176002,7 @@ srrl4: return; } -void m68000_device::asr_ais_dfm() // e0d0 fff8 +void m68000_mcu_device::asr_ais_dfm() // e0d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -176090,7 +176090,7 @@ void m68000_device::asr_ais_dfm() // e0d0 fff8 return; } -void m68000_device::asr_aips_dfm() // e0d8 fff8 +void m68000_mcu_device::asr_aips_dfm() // e0d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -176182,7 +176182,7 @@ void m68000_device::asr_aips_dfm() // e0d8 fff8 return; } -void m68000_device::asr_pais_dfm() // e0e0 fff8 +void m68000_mcu_device::asr_pais_dfm() // e0e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -176276,7 +176276,7 @@ void m68000_device::asr_pais_dfm() // e0e0 fff8 return; } -void m68000_device::asr_das_dfm() // e0e8 fff8 +void m68000_mcu_device::asr_das_dfm() // e0e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -176386,7 +176386,7 @@ void m68000_device::asr_das_dfm() // e0e8 fff8 return; } -void m68000_device::asr_dais_dfm() // e0f0 fff8 +void m68000_mcu_device::asr_dais_dfm() // e0f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -176534,7 +176534,7 @@ adsw2: return; } -void m68000_device::asr_adr16_dfm() // e0f8 ffff +void m68000_mcu_device::asr_adr16_dfm() // e0f8 ffff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -176643,7 +176643,7 @@ void m68000_device::asr_adr16_dfm() // e0f8 ffff return; } -void m68000_device::asr_adr32_dfm() // e0f9 ffff +void m68000_mcu_device::asr_adr32_dfm() // e0f9 ffff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -176773,7 +176773,7 @@ void m68000_device::asr_adr32_dfm() // e0f9 ffff return; } -void m68000_device::asl_b_imm3_ds_dfm() // e100 f1f8 +void m68000_mcu_device::asl_b_imm3_ds_dfm() // e100 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -176838,7 +176838,7 @@ nbcr3: return; } -void m68000_device::lsl_b_imm3_ds_dfm() // e108 f1f8 +void m68000_mcu_device::lsl_b_imm3_ds_dfm() // e108 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -176904,7 +176904,7 @@ nbcr3: return; } -void m68000_device::roxl_b_imm3_ds_dfm() // e110 f1f8 +void m68000_mcu_device::roxl_b_imm3_ds_dfm() // e110 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -176969,7 +176969,7 @@ nbcr3: return; } -void m68000_device::rol_b_imm3_ds_dfm() // e118 f1f8 +void m68000_mcu_device::rol_b_imm3_ds_dfm() // e118 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -177034,7 +177034,7 @@ nbcr3: return; } -void m68000_device::asl_b_dd_ds_dfm() // e120 f1f8 +void m68000_mcu_device::asl_b_dd_ds_dfm() // e120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -177100,7 +177100,7 @@ nbcr3: return; } -void m68000_device::lsl_b_dd_ds_dfm() // e128 f1f8 +void m68000_mcu_device::lsl_b_dd_ds_dfm() // e128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -177167,7 +177167,7 @@ nbcr3: return; } -void m68000_device::roxl_b_dd_ds_dfm() // e130 f1f8 +void m68000_mcu_device::roxl_b_dd_ds_dfm() // e130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -177233,7 +177233,7 @@ nbcr3: return; } -void m68000_device::rol_b_dd_ds_dfm() // e138 f1f8 +void m68000_mcu_device::rol_b_dd_ds_dfm() // e138 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -177299,7 +177299,7 @@ nbcr3: return; } -void m68000_device::asl_w_imm3_ds_dfm() // e140 f1f8 +void m68000_mcu_device::asl_w_imm3_ds_dfm() // e140 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -177364,7 +177364,7 @@ nbcr3: return; } -void m68000_device::lsl_w_imm3_ds_dfm() // e148 f1f8 +void m68000_mcu_device::lsl_w_imm3_ds_dfm() // e148 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -177430,7 +177430,7 @@ nbcr3: return; } -void m68000_device::roxl_w_imm3_ds_dfm() // e150 f1f8 +void m68000_mcu_device::roxl_w_imm3_ds_dfm() // e150 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -177495,7 +177495,7 @@ nbcr3: return; } -void m68000_device::rol_w_imm3_ds_dfm() // e158 f1f8 +void m68000_mcu_device::rol_w_imm3_ds_dfm() // e158 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -177560,7 +177560,7 @@ nbcr3: return; } -void m68000_device::asl_w_dd_ds_dfm() // e160 f1f8 +void m68000_mcu_device::asl_w_dd_ds_dfm() // e160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -177626,7 +177626,7 @@ nbcr3: return; } -void m68000_device::lsl_w_dd_ds_dfm() // e168 f1f8 +void m68000_mcu_device::lsl_w_dd_ds_dfm() // e168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -177693,7 +177693,7 @@ nbcr3: return; } -void m68000_device::roxl_w_dd_ds_dfm() // e170 f1f8 +void m68000_mcu_device::roxl_w_dd_ds_dfm() // e170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -177759,7 +177759,7 @@ nbcr3: return; } -void m68000_device::rol_w_dd_ds_dfm() // e178 f1f8 +void m68000_mcu_device::rol_w_dd_ds_dfm() // e178 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -177825,7 +177825,7 @@ nbcr3: return; } -void m68000_device::asl_l_imm3_ds_dfm() // e180 f1f8 +void m68000_mcu_device::asl_l_imm3_ds_dfm() // e180 f1f8 { int ry = m_irdi & 7; // 385 srrl1 @@ -177896,7 +177896,7 @@ srrl4: return; } -void m68000_device::lsl_l_imm3_ds_dfm() // e188 f1f8 +void m68000_mcu_device::lsl_l_imm3_ds_dfm() // e188 f1f8 { int ry = m_irdi & 7; // 385 srrl1 @@ -177969,7 +177969,7 @@ srrl4: return; } -void m68000_device::roxl_l_imm3_ds_dfm() // e190 f1f8 +void m68000_mcu_device::roxl_l_imm3_ds_dfm() // e190 f1f8 { int ry = m_irdi & 7; // 385 srrl1 @@ -178040,7 +178040,7 @@ srrl4: return; } -void m68000_device::rol_l_imm3_ds_dfm() // e198 f1f8 +void m68000_mcu_device::rol_l_imm3_ds_dfm() // e198 f1f8 { int ry = m_irdi & 7; // 385 srrl1 @@ -178111,7 +178111,7 @@ srrl4: return; } -void m68000_device::asl_l_dd_ds_dfm() // e1a0 f1f8 +void m68000_mcu_device::asl_l_dd_ds_dfm() // e1a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -178183,7 +178183,7 @@ srrl4: return; } -void m68000_device::lsl_l_dd_ds_dfm() // e1a8 f1f8 +void m68000_mcu_device::lsl_l_dd_ds_dfm() // e1a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -178257,7 +178257,7 @@ srrl4: return; } -void m68000_device::roxl_l_dd_ds_dfm() // e1b0 f1f8 +void m68000_mcu_device::roxl_l_dd_ds_dfm() // e1b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -178329,7 +178329,7 @@ srrl4: return; } -void m68000_device::rol_l_dd_ds_dfm() // e1b8 f1f8 +void m68000_mcu_device::rol_l_dd_ds_dfm() // e1b8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -178401,7 +178401,7 @@ srrl4: return; } -void m68000_device::asl_ais_dfm() // e1d0 fff8 +void m68000_mcu_device::asl_ais_dfm() // e1d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178489,7 +178489,7 @@ void m68000_device::asl_ais_dfm() // e1d0 fff8 return; } -void m68000_device::asl_aips_dfm() // e1d8 fff8 +void m68000_mcu_device::asl_aips_dfm() // e1d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178581,7 +178581,7 @@ void m68000_device::asl_aips_dfm() // e1d8 fff8 return; } -void m68000_device::asl_pais_dfm() // e1e0 fff8 +void m68000_mcu_device::asl_pais_dfm() // e1e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178675,7 +178675,7 @@ void m68000_device::asl_pais_dfm() // e1e0 fff8 return; } -void m68000_device::asl_das_dfm() // e1e8 fff8 +void m68000_mcu_device::asl_das_dfm() // e1e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178785,7 +178785,7 @@ void m68000_device::asl_das_dfm() // e1e8 fff8 return; } -void m68000_device::asl_dais_dfm() // e1f0 fff8 +void m68000_mcu_device::asl_dais_dfm() // e1f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178933,7 +178933,7 @@ adsw2: return; } -void m68000_device::asl_adr16_dfm() // e1f8 ffff +void m68000_mcu_device::asl_adr16_dfm() // e1f8 ffff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -179042,7 +179042,7 @@ void m68000_device::asl_adr16_dfm() // e1f8 ffff return; } -void m68000_device::asl_adr32_dfm() // e1f9 ffff +void m68000_mcu_device::asl_adr32_dfm() // e1f9 ffff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -179172,7 +179172,7 @@ void m68000_device::asl_adr32_dfm() // e1f9 ffff return; } -void m68000_device::lsr_ais_dfm() // e2d0 fff8 +void m68000_mcu_device::lsr_ais_dfm() // e2d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179260,7 +179260,7 @@ void m68000_device::lsr_ais_dfm() // e2d0 fff8 return; } -void m68000_device::lsr_aips_dfm() // e2d8 fff8 +void m68000_mcu_device::lsr_aips_dfm() // e2d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179352,7 +179352,7 @@ void m68000_device::lsr_aips_dfm() // e2d8 fff8 return; } -void m68000_device::lsr_pais_dfm() // e2e0 fff8 +void m68000_mcu_device::lsr_pais_dfm() // e2e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179446,7 +179446,7 @@ void m68000_device::lsr_pais_dfm() // e2e0 fff8 return; } -void m68000_device::lsr_das_dfm() // e2e8 fff8 +void m68000_mcu_device::lsr_das_dfm() // e2e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179556,7 +179556,7 @@ void m68000_device::lsr_das_dfm() // e2e8 fff8 return; } -void m68000_device::lsr_dais_dfm() // e2f0 fff8 +void m68000_mcu_device::lsr_dais_dfm() // e2f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179704,7 +179704,7 @@ adsw2: return; } -void m68000_device::lsr_adr16_dfm() // e2f8 ffff +void m68000_mcu_device::lsr_adr16_dfm() // e2f8 ffff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -179813,7 +179813,7 @@ void m68000_device::lsr_adr16_dfm() // e2f8 ffff return; } -void m68000_device::lsr_adr32_dfm() // e2f9 ffff +void m68000_mcu_device::lsr_adr32_dfm() // e2f9 ffff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -179943,7 +179943,7 @@ void m68000_device::lsr_adr32_dfm() // e2f9 ffff return; } -void m68000_device::lsl_ais_dfm() // e3d0 fff8 +void m68000_mcu_device::lsl_ais_dfm() // e3d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180033,7 +180033,7 @@ void m68000_device::lsl_ais_dfm() // e3d0 fff8 return; } -void m68000_device::lsl_aips_dfm() // e3d8 fff8 +void m68000_mcu_device::lsl_aips_dfm() // e3d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180128,7 +180128,7 @@ void m68000_device::lsl_aips_dfm() // e3d8 fff8 return; } -void m68000_device::lsl_pais_dfm() // e3e0 fff8 +void m68000_mcu_device::lsl_pais_dfm() // e3e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180225,7 +180225,7 @@ void m68000_device::lsl_pais_dfm() // e3e0 fff8 return; } -void m68000_device::lsl_das_dfm() // e3e8 fff8 +void m68000_mcu_device::lsl_das_dfm() // e3e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180338,7 +180338,7 @@ void m68000_device::lsl_das_dfm() // e3e8 fff8 return; } -void m68000_device::lsl_dais_dfm() // e3f0 fff8 +void m68000_mcu_device::lsl_dais_dfm() // e3f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180491,7 +180491,7 @@ adsw2: return; } -void m68000_device::lsl_adr16_dfm() // e3f8 ffff +void m68000_mcu_device::lsl_adr16_dfm() // e3f8 ffff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -180603,7 +180603,7 @@ void m68000_device::lsl_adr16_dfm() // e3f8 ffff return; } -void m68000_device::lsl_adr32_dfm() // e3f9 ffff +void m68000_mcu_device::lsl_adr32_dfm() // e3f9 ffff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -180737,7 +180737,7 @@ void m68000_device::lsl_adr32_dfm() // e3f9 ffff return; } -void m68000_device::roxr_ais_dfm() // e4d0 fff8 +void m68000_mcu_device::roxr_ais_dfm() // e4d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180825,7 +180825,7 @@ void m68000_device::roxr_ais_dfm() // e4d0 fff8 return; } -void m68000_device::roxr_aips_dfm() // e4d8 fff8 +void m68000_mcu_device::roxr_aips_dfm() // e4d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180917,7 +180917,7 @@ void m68000_device::roxr_aips_dfm() // e4d8 fff8 return; } -void m68000_device::roxr_pais_dfm() // e4e0 fff8 +void m68000_mcu_device::roxr_pais_dfm() // e4e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181011,7 +181011,7 @@ void m68000_device::roxr_pais_dfm() // e4e0 fff8 return; } -void m68000_device::roxr_das_dfm() // e4e8 fff8 +void m68000_mcu_device::roxr_das_dfm() // e4e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181121,7 +181121,7 @@ void m68000_device::roxr_das_dfm() // e4e8 fff8 return; } -void m68000_device::roxr_dais_dfm() // e4f0 fff8 +void m68000_mcu_device::roxr_dais_dfm() // e4f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181269,7 +181269,7 @@ adsw2: return; } -void m68000_device::roxr_adr16_dfm() // e4f8 ffff +void m68000_mcu_device::roxr_adr16_dfm() // e4f8 ffff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -181378,7 +181378,7 @@ void m68000_device::roxr_adr16_dfm() // e4f8 ffff return; } -void m68000_device::roxr_adr32_dfm() // e4f9 ffff +void m68000_mcu_device::roxr_adr32_dfm() // e4f9 ffff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -181508,7 +181508,7 @@ void m68000_device::roxr_adr32_dfm() // e4f9 ffff return; } -void m68000_device::roxl_ais_dfm() // e5d0 fff8 +void m68000_mcu_device::roxl_ais_dfm() // e5d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181596,7 +181596,7 @@ void m68000_device::roxl_ais_dfm() // e5d0 fff8 return; } -void m68000_device::roxl_aips_dfm() // e5d8 fff8 +void m68000_mcu_device::roxl_aips_dfm() // e5d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181688,7 +181688,7 @@ void m68000_device::roxl_aips_dfm() // e5d8 fff8 return; } -void m68000_device::roxl_pais_dfm() // e5e0 fff8 +void m68000_mcu_device::roxl_pais_dfm() // e5e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181782,7 +181782,7 @@ void m68000_device::roxl_pais_dfm() // e5e0 fff8 return; } -void m68000_device::roxl_das_dfm() // e5e8 fff8 +void m68000_mcu_device::roxl_das_dfm() // e5e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181892,7 +181892,7 @@ void m68000_device::roxl_das_dfm() // e5e8 fff8 return; } -void m68000_device::roxl_dais_dfm() // e5f0 fff8 +void m68000_mcu_device::roxl_dais_dfm() // e5f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182040,7 +182040,7 @@ adsw2: return; } -void m68000_device::roxl_adr16_dfm() // e5f8 ffff +void m68000_mcu_device::roxl_adr16_dfm() // e5f8 ffff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -182149,7 +182149,7 @@ void m68000_device::roxl_adr16_dfm() // e5f8 ffff return; } -void m68000_device::roxl_adr32_dfm() // e5f9 ffff +void m68000_mcu_device::roxl_adr32_dfm() // e5f9 ffff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -182279,7 +182279,7 @@ void m68000_device::roxl_adr32_dfm() // e5f9 ffff return; } -void m68000_device::ror_ais_dfm() // e6d0 fff8 +void m68000_mcu_device::ror_ais_dfm() // e6d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182367,7 +182367,7 @@ void m68000_device::ror_ais_dfm() // e6d0 fff8 return; } -void m68000_device::ror_aips_dfm() // e6d8 fff8 +void m68000_mcu_device::ror_aips_dfm() // e6d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182459,7 +182459,7 @@ void m68000_device::ror_aips_dfm() // e6d8 fff8 return; } -void m68000_device::ror_pais_dfm() // e6e0 fff8 +void m68000_mcu_device::ror_pais_dfm() // e6e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182553,7 +182553,7 @@ void m68000_device::ror_pais_dfm() // e6e0 fff8 return; } -void m68000_device::ror_das_dfm() // e6e8 fff8 +void m68000_mcu_device::ror_das_dfm() // e6e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182663,7 +182663,7 @@ void m68000_device::ror_das_dfm() // e6e8 fff8 return; } -void m68000_device::ror_dais_dfm() // e6f0 fff8 +void m68000_mcu_device::ror_dais_dfm() // e6f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182811,7 +182811,7 @@ adsw2: return; } -void m68000_device::ror_adr16_dfm() // e6f8 ffff +void m68000_mcu_device::ror_adr16_dfm() // e6f8 ffff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -182920,7 +182920,7 @@ void m68000_device::ror_adr16_dfm() // e6f8 ffff return; } -void m68000_device::ror_adr32_dfm() // e6f9 ffff +void m68000_mcu_device::ror_adr32_dfm() // e6f9 ffff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -183050,7 +183050,7 @@ void m68000_device::ror_adr32_dfm() // e6f9 ffff return; } -void m68000_device::rol_ais_dfm() // e7d0 fff8 +void m68000_mcu_device::rol_ais_dfm() // e7d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183138,7 +183138,7 @@ void m68000_device::rol_ais_dfm() // e7d0 fff8 return; } -void m68000_device::rol_aips_dfm() // e7d8 fff8 +void m68000_mcu_device::rol_aips_dfm() // e7d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183230,7 +183230,7 @@ void m68000_device::rol_aips_dfm() // e7d8 fff8 return; } -void m68000_device::rol_pais_dfm() // e7e0 fff8 +void m68000_mcu_device::rol_pais_dfm() // e7e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183324,7 +183324,7 @@ void m68000_device::rol_pais_dfm() // e7e0 fff8 return; } -void m68000_device::rol_das_dfm() // e7e8 fff8 +void m68000_mcu_device::rol_das_dfm() // e7e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183434,7 +183434,7 @@ void m68000_device::rol_das_dfm() // e7e8 fff8 return; } -void m68000_device::rol_dais_dfm() // e7f0 fff8 +void m68000_mcu_device::rol_dais_dfm() // e7f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183582,7 +183582,7 @@ adsw2: return; } -void m68000_device::rol_adr16_dfm() // e7f8 ffff +void m68000_mcu_device::rol_adr16_dfm() // e7f8 ffff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -183691,7 +183691,7 @@ void m68000_device::rol_adr16_dfm() // e7f8 ffff return; } -void m68000_device::rol_adr32_dfm() // e7f9 ffff +void m68000_mcu_device::rol_adr32_dfm() // e7f9 ffff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -183821,1540 +183821,1540 @@ void m68000_device::rol_adr32_dfm() // e7f9 ffff return; } -const m68000_device::handler m68000_device::s_handlers_dfm[] = { - &m68000_device::state_reset_dfm, - &m68000_device::state_bus_error_dfm, - &m68000_device::state_address_error_dfm, - &m68000_device::state_double_fault_dfm, - &m68000_device::state_interrupt_dfm, - &m68000_device::state_trace_dfm, - &m68000_device::state_illegal_dfm, - &m68000_device::state_priviledge_dfm, - &m68000_device::state_linea_dfm, - &m68000_device::state_linef_dfm, - &m68000_device::ori_b_imm8_ds_dfm, - &m68000_device::ori_b_imm8_ais_dfm, - &m68000_device::ori_b_imm8_aips_dfm, - &m68000_device::ori_b_imm8_pais_dfm, - &m68000_device::ori_b_imm8_das_dfm, - &m68000_device::ori_b_imm8_dais_dfm, - &m68000_device::ori_b_imm8_adr16_dfm, - &m68000_device::ori_b_imm8_adr32_dfm, - &m68000_device::ori_imm8_ccr_dfm, - &m68000_device::ori_w_imm16_ds_dfm, - &m68000_device::ori_w_imm16_ais_dfm, - &m68000_device::ori_w_imm16_aips_dfm, - &m68000_device::ori_w_imm16_pais_dfm, - &m68000_device::ori_w_imm16_das_dfm, - &m68000_device::ori_w_imm16_dais_dfm, - &m68000_device::ori_w_imm16_adr16_dfm, - &m68000_device::ori_w_imm16_adr32_dfm, - &m68000_device::ori_i16u_sr_dfm, - &m68000_device::ori_l_imm32_ds_dfm, - &m68000_device::ori_l_imm32_ais_dfm, - &m68000_device::ori_l_imm32_aips_dfm, - &m68000_device::ori_l_imm32_pais_dfm, - &m68000_device::ori_l_imm32_das_dfm, - &m68000_device::ori_l_imm32_dais_dfm, - &m68000_device::ori_l_imm32_adr16_dfm, - &m68000_device::ori_l_imm32_adr32_dfm, - &m68000_device::btst_dd_ds_dfm, - &m68000_device::movep_w_das_dd_dfm, - &m68000_device::btst_dd_ais_dfm, - &m68000_device::btst_dd_aips_dfm, - &m68000_device::btst_dd_pais_dfm, - &m68000_device::btst_dd_das_dfm, - &m68000_device::btst_dd_dais_dfm, - &m68000_device::btst_dd_adr16_dfm, - &m68000_device::btst_dd_adr32_dfm, - &m68000_device::btst_dd_dpc_dfm, - &m68000_device::btst_dd_dpci_dfm, - &m68000_device::btst_dd_imm_dfm, - &m68000_device::bchg_dd_ds_dfm, - &m68000_device::movep_l_das_dd_dfm, - &m68000_device::bchg_dd_ais_dfm, - &m68000_device::bchg_dd_aips_dfm, - &m68000_device::bchg_dd_pais_dfm, - &m68000_device::bchg_dd_das_dfm, - &m68000_device::bchg_dd_dais_dfm, - &m68000_device::bchg_dd_adr16_dfm, - &m68000_device::bchg_dd_adr32_dfm, - &m68000_device::bclr_dd_ds_dfm, - &m68000_device::movep_w_dd_das_dfm, - &m68000_device::bclr_dd_ais_dfm, - &m68000_device::bclr_dd_aips_dfm, - &m68000_device::bclr_dd_pais_dfm, - &m68000_device::bclr_dd_das_dfm, - &m68000_device::bclr_dd_dais_dfm, - &m68000_device::bclr_dd_adr16_dfm, - &m68000_device::bclr_dd_adr32_dfm, - &m68000_device::bset_dd_ds_dfm, - &m68000_device::movep_l_dd_das_dfm, - &m68000_device::bset_dd_ais_dfm, - &m68000_device::bset_dd_aips_dfm, - &m68000_device::bset_dd_pais_dfm, - &m68000_device::bset_dd_das_dfm, - &m68000_device::bset_dd_dais_dfm, - &m68000_device::bset_dd_adr16_dfm, - &m68000_device::bset_dd_adr32_dfm, - &m68000_device::andi_b_imm8_ds_dfm, - &m68000_device::andi_b_imm8_ais_dfm, - &m68000_device::andi_b_imm8_aips_dfm, - &m68000_device::andi_b_imm8_pais_dfm, - &m68000_device::andi_b_imm8_das_dfm, - &m68000_device::andi_b_imm8_dais_dfm, - &m68000_device::andi_b_imm8_adr16_dfm, - &m68000_device::andi_b_imm8_adr32_dfm, - &m68000_device::andi_imm8_ccr_dfm, - &m68000_device::andi_w_imm16_ds_dfm, - &m68000_device::andi_w_imm16_ais_dfm, - &m68000_device::andi_w_imm16_aips_dfm, - &m68000_device::andi_w_imm16_pais_dfm, - &m68000_device::andi_w_imm16_das_dfm, - &m68000_device::andi_w_imm16_dais_dfm, - &m68000_device::andi_w_imm16_adr16_dfm, - &m68000_device::andi_w_imm16_adr32_dfm, - &m68000_device::andi_i16u_sr_dfm, - &m68000_device::andi_l_imm32_ds_dfm, - &m68000_device::andi_l_imm32_ais_dfm, - &m68000_device::andi_l_imm32_aips_dfm, - &m68000_device::andi_l_imm32_pais_dfm, - &m68000_device::andi_l_imm32_das_dfm, - &m68000_device::andi_l_imm32_dais_dfm, - &m68000_device::andi_l_imm32_adr16_dfm, - &m68000_device::andi_l_imm32_adr32_dfm, - &m68000_device::subi_b_imm8_ds_dfm, - &m68000_device::subi_b_imm8_ais_dfm, - &m68000_device::subi_b_imm8_aips_dfm, - &m68000_device::subi_b_imm8_pais_dfm, - &m68000_device::subi_b_imm8_das_dfm, - &m68000_device::subi_b_imm8_dais_dfm, - &m68000_device::subi_b_imm8_adr16_dfm, - &m68000_device::subi_b_imm8_adr32_dfm, - &m68000_device::subi_w_imm16_ds_dfm, - &m68000_device::subi_w_imm16_ais_dfm, - &m68000_device::subi_w_imm16_aips_dfm, - &m68000_device::subi_w_imm16_pais_dfm, - &m68000_device::subi_w_imm16_das_dfm, - &m68000_device::subi_w_imm16_dais_dfm, - &m68000_device::subi_w_imm16_adr16_dfm, - &m68000_device::subi_w_imm16_adr32_dfm, - &m68000_device::subi_l_imm32_ds_dfm, - &m68000_device::subi_l_imm32_ais_dfm, - &m68000_device::subi_l_imm32_aips_dfm, - &m68000_device::subi_l_imm32_pais_dfm, - &m68000_device::subi_l_imm32_das_dfm, - &m68000_device::subi_l_imm32_dais_dfm, - &m68000_device::subi_l_imm32_adr16_dfm, - &m68000_device::subi_l_imm32_adr32_dfm, - &m68000_device::addi_b_imm8_ds_dfm, - &m68000_device::addi_b_imm8_ais_dfm, - &m68000_device::addi_b_imm8_aips_dfm, - &m68000_device::addi_b_imm8_pais_dfm, - &m68000_device::addi_b_imm8_das_dfm, - &m68000_device::addi_b_imm8_dais_dfm, - &m68000_device::addi_b_imm8_adr16_dfm, - &m68000_device::addi_b_imm8_adr32_dfm, - &m68000_device::addi_w_imm16_ds_dfm, - &m68000_device::addi_w_imm16_ais_dfm, - &m68000_device::addi_w_imm16_aips_dfm, - &m68000_device::addi_w_imm16_pais_dfm, - &m68000_device::addi_w_imm16_das_dfm, - &m68000_device::addi_w_imm16_dais_dfm, - &m68000_device::addi_w_imm16_adr16_dfm, - &m68000_device::addi_w_imm16_adr32_dfm, - &m68000_device::addi_l_imm32_ds_dfm, - &m68000_device::addi_l_imm32_ais_dfm, - &m68000_device::addi_l_imm32_aips_dfm, - &m68000_device::addi_l_imm32_pais_dfm, - &m68000_device::addi_l_imm32_das_dfm, - &m68000_device::addi_l_imm32_dais_dfm, - &m68000_device::addi_l_imm32_adr16_dfm, - &m68000_device::addi_l_imm32_adr32_dfm, - &m68000_device::btst_imm8_ds_dfm, - &m68000_device::btst_imm8_ais_dfm, - &m68000_device::btst_imm8_aips_dfm, - &m68000_device::btst_imm8_pais_dfm, - &m68000_device::btst_imm8_das_dfm, - &m68000_device::btst_imm8_dais_dfm, - &m68000_device::btst_imm8_adr16_dfm, - &m68000_device::btst_imm8_adr32_dfm, - &m68000_device::btst_imm8_dpc_dfm, - &m68000_device::btst_imm8_dpci_dfm, - &m68000_device::bchg_imm8_ds_dfm, - &m68000_device::bchg_imm8_ais_dfm, - &m68000_device::bchg_imm8_aips_dfm, - &m68000_device::bchg_imm8_pais_dfm, - &m68000_device::bchg_imm8_das_dfm, - &m68000_device::bchg_imm8_dais_dfm, - &m68000_device::bchg_imm8_adr16_dfm, - &m68000_device::bchg_imm8_adr32_dfm, - &m68000_device::bclr_imm8_ds_dfm, - &m68000_device::bclr_imm8_ais_dfm, - &m68000_device::bclr_imm8_aips_dfm, - &m68000_device::bclr_imm8_pais_dfm, - &m68000_device::bclr_imm8_das_dfm, - &m68000_device::bclr_imm8_dais_dfm, - &m68000_device::bclr_imm8_adr16_dfm, - &m68000_device::bclr_imm8_adr32_dfm, - &m68000_device::bset_imm8_ds_dfm, - &m68000_device::bset_imm8_ais_dfm, - &m68000_device::bset_imm8_aips_dfm, - &m68000_device::bset_imm8_pais_dfm, - &m68000_device::bset_imm8_das_dfm, - &m68000_device::bset_imm8_dais_dfm, - &m68000_device::bset_imm8_adr16_dfm, - &m68000_device::bset_imm8_adr32_dfm, - &m68000_device::eori_b_imm8_ds_dfm, - &m68000_device::eori_b_imm8_ais_dfm, - &m68000_device::eori_b_imm8_aips_dfm, - &m68000_device::eori_b_imm8_pais_dfm, - &m68000_device::eori_b_imm8_das_dfm, - &m68000_device::eori_b_imm8_dais_dfm, - &m68000_device::eori_b_imm8_adr16_dfm, - &m68000_device::eori_b_imm8_adr32_dfm, - &m68000_device::eori_imm8_ccr_dfm, - &m68000_device::eori_w_imm16_ds_dfm, - &m68000_device::eori_w_imm16_ais_dfm, - &m68000_device::eori_w_imm16_aips_dfm, - &m68000_device::eori_w_imm16_pais_dfm, - &m68000_device::eori_w_imm16_das_dfm, - &m68000_device::eori_w_imm16_dais_dfm, - &m68000_device::eori_w_imm16_adr16_dfm, - &m68000_device::eori_w_imm16_adr32_dfm, - &m68000_device::eori_i16u_sr_dfm, - &m68000_device::eori_l_imm32_ds_dfm, - &m68000_device::eori_l_imm32_ais_dfm, - &m68000_device::eori_l_imm32_aips_dfm, - &m68000_device::eori_l_imm32_pais_dfm, - &m68000_device::eori_l_imm32_das_dfm, - &m68000_device::eori_l_imm32_dais_dfm, - &m68000_device::eori_l_imm32_adr16_dfm, - &m68000_device::eori_l_imm32_adr32_dfm, - &m68000_device::cmpi_b_imm8_ds_dfm, - &m68000_device::cmpi_b_imm8_ais_dfm, - &m68000_device::cmpi_b_imm8_aips_dfm, - &m68000_device::cmpi_b_imm8_pais_dfm, - &m68000_device::cmpi_b_imm8_das_dfm, - &m68000_device::cmpi_b_imm8_dais_dfm, - &m68000_device::cmpi_b_imm8_adr16_dfm, - &m68000_device::cmpi_b_imm8_adr32_dfm, - &m68000_device::cmpi_w_imm16_ds_dfm, - &m68000_device::cmpi_w_imm16_ais_dfm, - &m68000_device::cmpi_w_imm16_aips_dfm, - &m68000_device::cmpi_w_imm16_pais_dfm, - &m68000_device::cmpi_w_imm16_das_dfm, - &m68000_device::cmpi_w_imm16_dais_dfm, - &m68000_device::cmpi_w_imm16_adr16_dfm, - &m68000_device::cmpi_w_imm16_adr32_dfm, - &m68000_device::cmpi_l_imm32_ds_dfm, - &m68000_device::cmpi_l_imm32_ais_dfm, - &m68000_device::cmpi_l_imm32_aips_dfm, - &m68000_device::cmpi_l_imm32_pais_dfm, - &m68000_device::cmpi_l_imm32_das_dfm, - &m68000_device::cmpi_l_imm32_dais_dfm, - &m68000_device::cmpi_l_imm32_adr16_dfm, - &m68000_device::cmpi_l_imm32_adr32_dfm, - &m68000_device::move_b_ds_dd_dfm, - &m68000_device::move_b_ais_dd_dfm, - &m68000_device::move_b_aips_dd_dfm, - &m68000_device::move_b_pais_dd_dfm, - &m68000_device::move_b_das_dd_dfm, - &m68000_device::move_b_dais_dd_dfm, - &m68000_device::move_b_adr16_dd_dfm, - &m68000_device::move_b_adr32_dd_dfm, - &m68000_device::move_b_dpc_dd_dfm, - &m68000_device::move_b_dpci_dd_dfm, - &m68000_device::move_b_imm8_dd_dfm, - &m68000_device::move_b_ds_aid_dfm, - &m68000_device::move_b_ais_aid_dfm, - &m68000_device::move_b_aips_aid_dfm, - &m68000_device::move_b_pais_aid_dfm, - &m68000_device::move_b_das_aid_dfm, - &m68000_device::move_b_dais_aid_dfm, - &m68000_device::move_b_adr16_aid_dfm, - &m68000_device::move_b_adr32_aid_dfm, - &m68000_device::move_b_dpc_aid_dfm, - &m68000_device::move_b_dpci_aid_dfm, - &m68000_device::move_b_imm8_aid_dfm, - &m68000_device::move_b_ds_aipd_dfm, - &m68000_device::move_b_ais_aipd_dfm, - &m68000_device::move_b_aips_aipd_dfm, - &m68000_device::move_b_pais_aipd_dfm, - &m68000_device::move_b_das_aipd_dfm, - &m68000_device::move_b_dais_aipd_dfm, - &m68000_device::move_b_adr16_aipd_dfm, - &m68000_device::move_b_adr32_aipd_dfm, - &m68000_device::move_b_dpc_aipd_dfm, - &m68000_device::move_b_dpci_aipd_dfm, - &m68000_device::move_b_imm8_aipd_dfm, - &m68000_device::move_b_ds_paid_dfm, - &m68000_device::move_b_ais_paid_dfm, - &m68000_device::move_b_aips_paid_dfm, - &m68000_device::move_b_pais_paid_dfm, - &m68000_device::move_b_das_paid_dfm, - &m68000_device::move_b_dais_paid_dfm, - &m68000_device::move_b_adr16_paid_dfm, - &m68000_device::move_b_adr32_paid_dfm, - &m68000_device::move_b_dpc_paid_dfm, - &m68000_device::move_b_dpci_paid_dfm, - &m68000_device::move_b_imm8_paid_dfm, - &m68000_device::move_b_ds_dad_dfm, - &m68000_device::move_b_ais_dad_dfm, - &m68000_device::move_b_aips_dad_dfm, - &m68000_device::move_b_pais_dad_dfm, - &m68000_device::move_b_das_dad_dfm, - &m68000_device::move_b_dais_dad_dfm, - &m68000_device::move_b_adr16_dad_dfm, - &m68000_device::move_b_adr32_dad_dfm, - &m68000_device::move_b_dpc_dad_dfm, - &m68000_device::move_b_dpci_dad_dfm, - &m68000_device::move_b_imm8_dad_dfm, - &m68000_device::move_b_ds_daid_dfm, - &m68000_device::move_b_ais_daid_dfm, - &m68000_device::move_b_aips_daid_dfm, - &m68000_device::move_b_pais_daid_dfm, - &m68000_device::move_b_das_daid_dfm, - &m68000_device::move_b_dais_daid_dfm, - &m68000_device::move_b_adr16_daid_dfm, - &m68000_device::move_b_adr32_daid_dfm, - &m68000_device::move_b_dpc_daid_dfm, - &m68000_device::move_b_dpci_daid_dfm, - &m68000_device::move_b_imm8_daid_dfm, - &m68000_device::move_b_ds_adr16_dfm, - &m68000_device::move_b_ais_adr16_dfm, - &m68000_device::move_b_aips_adr16_dfm, - &m68000_device::move_b_pais_adr16_dfm, - &m68000_device::move_b_das_adr16_dfm, - &m68000_device::move_b_dais_adr16_dfm, - &m68000_device::move_b_adr16_adr16_dfm, - &m68000_device::move_b_adr32_adr16_dfm, - &m68000_device::move_b_dpc_adr16_dfm, - &m68000_device::move_b_dpci_adr16_dfm, - &m68000_device::move_b_imm8_adr16_dfm, - &m68000_device::move_b_ds_adr32_dfm, - &m68000_device::move_b_ais_adr32_dfm, - &m68000_device::move_b_aips_adr32_dfm, - &m68000_device::move_b_pais_adr32_dfm, - &m68000_device::move_b_das_adr32_dfm, - &m68000_device::move_b_dais_adr32_dfm, - &m68000_device::move_b_adr16_adr32_dfm, - &m68000_device::move_b_adr32_adr32_dfm, - &m68000_device::move_b_dpc_adr32_dfm, - &m68000_device::move_b_dpci_adr32_dfm, - &m68000_device::move_b_imm8_adr32_dfm, - &m68000_device::move_l_ds_dd_dfm, - &m68000_device::move_l_as_dd_dfm, - &m68000_device::move_l_ais_dd_dfm, - &m68000_device::move_l_aips_dd_dfm, - &m68000_device::move_l_pais_dd_dfm, - &m68000_device::move_l_das_dd_dfm, - &m68000_device::move_l_dais_dd_dfm, - &m68000_device::move_l_adr16_dd_dfm, - &m68000_device::move_l_adr32_dd_dfm, - &m68000_device::move_l_dpc_dd_dfm, - &m68000_device::move_l_dpci_dd_dfm, - &m68000_device::move_l_imm32_dd_dfm, - &m68000_device::movea_l_ds_ad_dfm, - &m68000_device::movea_l_as_ad_dfm, - &m68000_device::movea_l_ais_ad_dfm, - &m68000_device::movea_l_aips_ad_dfm, - &m68000_device::movea_l_pais_ad_dfm, - &m68000_device::movea_l_das_ad_dfm, - &m68000_device::movea_l_dais_ad_dfm, - &m68000_device::movea_l_adr16_ad_dfm, - &m68000_device::movea_l_adr32_ad_dfm, - &m68000_device::movea_l_dpc_ad_dfm, - &m68000_device::movea_l_dpci_ad_dfm, - &m68000_device::movea_l_imm32_ad_dfm, - &m68000_device::move_l_ds_aid_dfm, - &m68000_device::move_l_as_aid_dfm, - &m68000_device::move_l_ais_aid_dfm, - &m68000_device::move_l_aips_aid_dfm, - &m68000_device::move_l_pais_aid_dfm, - &m68000_device::move_l_das_aid_dfm, - &m68000_device::move_l_dais_aid_dfm, - &m68000_device::move_l_adr16_aid_dfm, - &m68000_device::move_l_adr32_aid_dfm, - &m68000_device::move_l_dpc_aid_dfm, - &m68000_device::move_l_dpci_aid_dfm, - &m68000_device::move_l_imm32_aid_dfm, - &m68000_device::move_l_ds_aipd_dfm, - &m68000_device::move_l_as_aipd_dfm, - &m68000_device::move_l_ais_aipd_dfm, - &m68000_device::move_l_aips_aipd_dfm, - &m68000_device::move_l_pais_aipd_dfm, - &m68000_device::move_l_das_aipd_dfm, - &m68000_device::move_l_dais_aipd_dfm, - &m68000_device::move_l_adr16_aipd_dfm, - &m68000_device::move_l_adr32_aipd_dfm, - &m68000_device::move_l_dpc_aipd_dfm, - &m68000_device::move_l_dpci_aipd_dfm, - &m68000_device::move_l_imm32_aipd_dfm, - &m68000_device::move_l_ds_paid_dfm, - &m68000_device::move_l_as_paid_dfm, - &m68000_device::move_l_ais_paid_dfm, - &m68000_device::move_l_aips_paid_dfm, - &m68000_device::move_l_pais_paid_dfm, - &m68000_device::move_l_das_paid_dfm, - &m68000_device::move_l_dais_paid_dfm, - &m68000_device::move_l_adr16_paid_dfm, - &m68000_device::move_l_adr32_paid_dfm, - &m68000_device::move_l_dpc_paid_dfm, - &m68000_device::move_l_dpci_paid_dfm, - &m68000_device::move_l_imm32_paid_dfm, - &m68000_device::move_l_ds_dad_dfm, - &m68000_device::move_l_as_dad_dfm, - &m68000_device::move_l_ais_dad_dfm, - &m68000_device::move_l_aips_dad_dfm, - &m68000_device::move_l_pais_dad_dfm, - &m68000_device::move_l_das_dad_dfm, - &m68000_device::move_l_dais_dad_dfm, - &m68000_device::move_l_adr16_dad_dfm, - &m68000_device::move_l_adr32_dad_dfm, - &m68000_device::move_l_dpc_dad_dfm, - &m68000_device::move_l_dpci_dad_dfm, - &m68000_device::move_l_imm32_dad_dfm, - &m68000_device::move_l_ds_daid_dfm, - &m68000_device::move_l_as_daid_dfm, - &m68000_device::move_l_ais_daid_dfm, - &m68000_device::move_l_aips_daid_dfm, - &m68000_device::move_l_pais_daid_dfm, - &m68000_device::move_l_das_daid_dfm, - &m68000_device::move_l_dais_daid_dfm, - &m68000_device::move_l_adr16_daid_dfm, - &m68000_device::move_l_adr32_daid_dfm, - &m68000_device::move_l_dpc_daid_dfm, - &m68000_device::move_l_dpci_daid_dfm, - &m68000_device::move_l_imm32_daid_dfm, - &m68000_device::move_l_ds_adr16_dfm, - &m68000_device::move_l_as_adr16_dfm, - &m68000_device::move_l_ais_adr16_dfm, - &m68000_device::move_l_aips_adr16_dfm, - &m68000_device::move_l_pais_adr16_dfm, - &m68000_device::move_l_das_adr16_dfm, - &m68000_device::move_l_dais_adr16_dfm, - &m68000_device::move_l_adr16_adr16_dfm, - &m68000_device::move_l_adr32_adr16_dfm, - &m68000_device::move_l_dpc_adr16_dfm, - &m68000_device::move_l_dpci_adr16_dfm, - &m68000_device::move_l_imm32_adr16_dfm, - &m68000_device::move_l_ds_adr32_dfm, - &m68000_device::move_l_as_adr32_dfm, - &m68000_device::move_l_ais_adr32_dfm, - &m68000_device::move_l_aips_adr32_dfm, - &m68000_device::move_l_pais_adr32_dfm, - &m68000_device::move_l_das_adr32_dfm, - &m68000_device::move_l_dais_adr32_dfm, - &m68000_device::move_l_adr16_adr32_dfm, - &m68000_device::move_l_adr32_adr32_dfm, - &m68000_device::move_l_dpc_adr32_dfm, - &m68000_device::move_l_dpci_adr32_dfm, - &m68000_device::move_l_imm32_adr32_dfm, - &m68000_device::move_w_ds_dd_dfm, - &m68000_device::move_w_as_dd_dfm, - &m68000_device::move_w_ais_dd_dfm, - &m68000_device::move_w_aips_dd_dfm, - &m68000_device::move_w_pais_dd_dfm, - &m68000_device::move_w_das_dd_dfm, - &m68000_device::move_w_dais_dd_dfm, - &m68000_device::move_w_adr16_dd_dfm, - &m68000_device::move_w_adr32_dd_dfm, - &m68000_device::move_w_dpc_dd_dfm, - &m68000_device::move_w_dpci_dd_dfm, - &m68000_device::move_w_imm16_dd_dfm, - &m68000_device::movea_w_ds_ad_dfm, - &m68000_device::movea_w_as_ad_dfm, - &m68000_device::movea_w_ais_ad_dfm, - &m68000_device::movea_w_aips_ad_dfm, - &m68000_device::movea_w_pais_ad_dfm, - &m68000_device::movea_w_das_ad_dfm, - &m68000_device::movea_w_dais_ad_dfm, - &m68000_device::movea_w_adr16_ad_dfm, - &m68000_device::movea_w_adr32_ad_dfm, - &m68000_device::movea_w_dpc_ad_dfm, - &m68000_device::movea_w_dpci_ad_dfm, - &m68000_device::movea_w_imm16_ad_dfm, - &m68000_device::move_w_ds_aid_dfm, - &m68000_device::move_w_as_aid_dfm, - &m68000_device::move_w_ais_aid_dfm, - &m68000_device::move_w_aips_aid_dfm, - &m68000_device::move_w_pais_aid_dfm, - &m68000_device::move_w_das_aid_dfm, - &m68000_device::move_w_dais_aid_dfm, - &m68000_device::move_w_adr16_aid_dfm, - &m68000_device::move_w_adr32_aid_dfm, - &m68000_device::move_w_dpc_aid_dfm, - &m68000_device::move_w_dpci_aid_dfm, - &m68000_device::move_w_imm16_aid_dfm, - &m68000_device::move_w_ds_aipd_dfm, - &m68000_device::move_w_as_aipd_dfm, - &m68000_device::move_w_ais_aipd_dfm, - &m68000_device::move_w_aips_aipd_dfm, - &m68000_device::move_w_pais_aipd_dfm, - &m68000_device::move_w_das_aipd_dfm, - &m68000_device::move_w_dais_aipd_dfm, - &m68000_device::move_w_adr16_aipd_dfm, - &m68000_device::move_w_adr32_aipd_dfm, - &m68000_device::move_w_dpc_aipd_dfm, - &m68000_device::move_w_dpci_aipd_dfm, - &m68000_device::move_w_imm16_aipd_dfm, - &m68000_device::move_w_ds_paid_dfm, - &m68000_device::move_w_as_paid_dfm, - &m68000_device::move_w_ais_paid_dfm, - &m68000_device::move_w_aips_paid_dfm, - &m68000_device::move_w_pais_paid_dfm, - &m68000_device::move_w_das_paid_dfm, - &m68000_device::move_w_dais_paid_dfm, - &m68000_device::move_w_adr16_paid_dfm, - &m68000_device::move_w_adr32_paid_dfm, - &m68000_device::move_w_dpc_paid_dfm, - &m68000_device::move_w_dpci_paid_dfm, - &m68000_device::move_w_imm16_paid_dfm, - &m68000_device::move_w_ds_dad_dfm, - &m68000_device::move_w_as_dad_dfm, - &m68000_device::move_w_ais_dad_dfm, - &m68000_device::move_w_aips_dad_dfm, - &m68000_device::move_w_pais_dad_dfm, - &m68000_device::move_w_das_dad_dfm, - &m68000_device::move_w_dais_dad_dfm, - &m68000_device::move_w_adr16_dad_dfm, - &m68000_device::move_w_adr32_dad_dfm, - &m68000_device::move_w_dpc_dad_dfm, - &m68000_device::move_w_dpci_dad_dfm, - &m68000_device::move_w_imm16_dad_dfm, - &m68000_device::move_w_ds_daid_dfm, - &m68000_device::move_w_as_daid_dfm, - &m68000_device::move_w_ais_daid_dfm, - &m68000_device::move_w_aips_daid_dfm, - &m68000_device::move_w_pais_daid_dfm, - &m68000_device::move_w_das_daid_dfm, - &m68000_device::move_w_dais_daid_dfm, - &m68000_device::move_w_adr16_daid_dfm, - &m68000_device::move_w_adr32_daid_dfm, - &m68000_device::move_w_dpc_daid_dfm, - &m68000_device::move_w_dpci_daid_dfm, - &m68000_device::move_w_imm16_daid_dfm, - &m68000_device::move_w_ds_adr16_dfm, - &m68000_device::move_w_as_adr16_dfm, - &m68000_device::move_w_ais_adr16_dfm, - &m68000_device::move_w_aips_adr16_dfm, - &m68000_device::move_w_pais_adr16_dfm, - &m68000_device::move_w_das_adr16_dfm, - &m68000_device::move_w_dais_adr16_dfm, - &m68000_device::move_w_adr16_adr16_dfm, - &m68000_device::move_w_adr32_adr16_dfm, - &m68000_device::move_w_dpc_adr16_dfm, - &m68000_device::move_w_dpci_adr16_dfm, - &m68000_device::move_w_imm16_adr16_dfm, - &m68000_device::move_w_ds_adr32_dfm, - &m68000_device::move_w_as_adr32_dfm, - &m68000_device::move_w_ais_adr32_dfm, - &m68000_device::move_w_aips_adr32_dfm, - &m68000_device::move_w_pais_adr32_dfm, - &m68000_device::move_w_das_adr32_dfm, - &m68000_device::move_w_dais_adr32_dfm, - &m68000_device::move_w_adr16_adr32_dfm, - &m68000_device::move_w_adr32_adr32_dfm, - &m68000_device::move_w_dpc_adr32_dfm, - &m68000_device::move_w_dpci_adr32_dfm, - &m68000_device::move_w_imm16_adr32_dfm, - &m68000_device::negx_b_ds_dfm, - &m68000_device::negx_b_ais_dfm, - &m68000_device::negx_b_aips_dfm, - &m68000_device::negx_b_pais_dfm, - &m68000_device::negx_b_das_dfm, - &m68000_device::negx_b_dais_dfm, - &m68000_device::negx_b_adr16_dfm, - &m68000_device::negx_b_adr32_dfm, - &m68000_device::negx_w_ds_dfm, - &m68000_device::negx_w_ais_dfm, - &m68000_device::negx_w_aips_dfm, - &m68000_device::negx_w_pais_dfm, - &m68000_device::negx_w_das_dfm, - &m68000_device::negx_w_dais_dfm, - &m68000_device::negx_w_adr16_dfm, - &m68000_device::negx_w_adr32_dfm, - &m68000_device::negx_l_ds_dfm, - &m68000_device::negx_l_ais_dfm, - &m68000_device::negx_l_aips_dfm, - &m68000_device::negx_l_pais_dfm, - &m68000_device::negx_l_das_dfm, - &m68000_device::negx_l_dais_dfm, - &m68000_device::negx_l_adr16_dfm, - &m68000_device::negx_l_adr32_dfm, - &m68000_device::move_sr_ds_dfm, - &m68000_device::move_sr_ais_dfm, - &m68000_device::move_sr_aips_dfm, - &m68000_device::move_sr_pais_dfm, - &m68000_device::move_sr_das_dfm, - &m68000_device::move_sr_dais_dfm, - &m68000_device::move_sr_adr16_dfm, - &m68000_device::move_sr_adr32_dfm, - &m68000_device::chk_w_ds_dd_dfm, - &m68000_device::chk_w_ais_dd_dfm, - &m68000_device::chk_w_aips_dd_dfm, - &m68000_device::chk_w_pais_dd_dfm, - &m68000_device::chk_w_das_dd_dfm, - &m68000_device::chk_w_dais_dd_dfm, - &m68000_device::chk_w_adr16_dd_dfm, - &m68000_device::chk_w_adr32_dd_dfm, - &m68000_device::chk_w_dpc_dd_dfm, - &m68000_device::chk_w_dpci_dd_dfm, - &m68000_device::chk_w_imm16_dd_dfm, - &m68000_device::lea_ais_ad_dfm, - &m68000_device::lea_das_ad_dfm, - &m68000_device::lea_dais_ad_dfm, - &m68000_device::lea_adr16_ad_dfm, - &m68000_device::lea_adr32_ad_dfm, - &m68000_device::lea_dpc_ad_dfm, - &m68000_device::lea_dpci_ad_dfm, - &m68000_device::clr_b_ds_dfm, - &m68000_device::clr_b_ais_dfm, - &m68000_device::clr_b_aips_dfm, - &m68000_device::clr_b_pais_dfm, - &m68000_device::clr_b_das_dfm, - &m68000_device::clr_b_dais_dfm, - &m68000_device::clr_b_adr16_dfm, - &m68000_device::clr_b_adr32_dfm, - &m68000_device::clr_w_ds_dfm, - &m68000_device::clr_w_ais_dfm, - &m68000_device::clr_w_aips_dfm, - &m68000_device::clr_w_pais_dfm, - &m68000_device::clr_w_das_dfm, - &m68000_device::clr_w_dais_dfm, - &m68000_device::clr_w_adr16_dfm, - &m68000_device::clr_w_adr32_dfm, - &m68000_device::clr_l_ds_dfm, - &m68000_device::clr_l_ais_dfm, - &m68000_device::clr_l_aips_dfm, - &m68000_device::clr_l_pais_dfm, - &m68000_device::clr_l_das_dfm, - &m68000_device::clr_l_dais_dfm, - &m68000_device::clr_l_adr16_dfm, - &m68000_device::clr_l_adr32_dfm, - &m68000_device::neg_b_ds_dfm, - &m68000_device::neg_b_ais_dfm, - &m68000_device::neg_b_aips_dfm, - &m68000_device::neg_b_pais_dfm, - &m68000_device::neg_b_das_dfm, - &m68000_device::neg_b_dais_dfm, - &m68000_device::neg_b_adr16_dfm, - &m68000_device::neg_b_adr32_dfm, - &m68000_device::neg_w_ds_dfm, - &m68000_device::neg_w_ais_dfm, - &m68000_device::neg_w_aips_dfm, - &m68000_device::neg_w_pais_dfm, - &m68000_device::neg_w_das_dfm, - &m68000_device::neg_w_dais_dfm, - &m68000_device::neg_w_adr16_dfm, - &m68000_device::neg_w_adr32_dfm, - &m68000_device::neg_l_ds_dfm, - &m68000_device::neg_l_ais_dfm, - &m68000_device::neg_l_aips_dfm, - &m68000_device::neg_l_pais_dfm, - &m68000_device::neg_l_das_dfm, - &m68000_device::neg_l_dais_dfm, - &m68000_device::neg_l_adr16_dfm, - &m68000_device::neg_l_adr32_dfm, - &m68000_device::move_ds_ccr_dfm, - &m68000_device::move_ais_ccr_dfm, - &m68000_device::move_aips_ccr_dfm, - &m68000_device::move_pais_ccr_dfm, - &m68000_device::move_das_ccr_dfm, - &m68000_device::move_dais_ccr_dfm, - &m68000_device::move_adr16_ccr_dfm, - &m68000_device::move_adr32_ccr_dfm, - &m68000_device::move_dpc_ccr_dfm, - &m68000_device::move_dpci_ccr_dfm, - &m68000_device::move_imm8_ccr_dfm, - &m68000_device::not_b_ds_dfm, - &m68000_device::not_b_ais_dfm, - &m68000_device::not_b_aips_dfm, - &m68000_device::not_b_pais_dfm, - &m68000_device::not_b_das_dfm, - &m68000_device::not_b_dais_dfm, - &m68000_device::not_b_adr16_dfm, - &m68000_device::not_b_adr32_dfm, - &m68000_device::not_w_ds_dfm, - &m68000_device::not_w_ais_dfm, - &m68000_device::not_w_aips_dfm, - &m68000_device::not_w_pais_dfm, - &m68000_device::not_w_das_dfm, - &m68000_device::not_w_dais_dfm, - &m68000_device::not_w_adr16_dfm, - &m68000_device::not_w_adr32_dfm, - &m68000_device::not_l_ds_dfm, - &m68000_device::not_l_ais_dfm, - &m68000_device::not_l_aips_dfm, - &m68000_device::not_l_pais_dfm, - &m68000_device::not_l_das_dfm, - &m68000_device::not_l_dais_dfm, - &m68000_device::not_l_adr16_dfm, - &m68000_device::not_l_adr32_dfm, - &m68000_device::move_ds_sr_dfm, - &m68000_device::move_ais_sr_dfm, - &m68000_device::move_aips_sr_dfm, - &m68000_device::move_pais_sr_dfm, - &m68000_device::move_das_sr_dfm, - &m68000_device::move_dais_sr_dfm, - &m68000_device::move_adr16_sr_dfm, - &m68000_device::move_adr32_sr_dfm, - &m68000_device::move_dpc_sr_dfm, - &m68000_device::move_dpci_sr_dfm, - &m68000_device::move_i16u_sr_dfm, - &m68000_device::nbcd_b_ds_dfm, - &m68000_device::nbcd_b_ais_dfm, - &m68000_device::nbcd_b_aips_dfm, - &m68000_device::nbcd_b_pais_dfm, - &m68000_device::nbcd_b_das_dfm, - &m68000_device::nbcd_b_dais_dfm, - &m68000_device::nbcd_b_adr16_dfm, - &m68000_device::nbcd_b_adr32_dfm, - &m68000_device::swap_ds_dfm, - &m68000_device::pea_ais_dfm, - &m68000_device::pea_das_dfm, - &m68000_device::pea_dais_dfm, - &m68000_device::pea_adr16_dfm, - &m68000_device::pea_adr32_dfm, - &m68000_device::pea_dpc_dfm, - &m68000_device::pea_dpci_dfm, - &m68000_device::ext_w_ds_dfm, - &m68000_device::movem_w_list_ais_dfm, - &m68000_device::movem_w_listp_pais_dfm, - &m68000_device::movem_w_list_das_dfm, - &m68000_device::movem_w_list_dais_dfm, - &m68000_device::movem_w_list_adr16_dfm, - &m68000_device::movem_w_list_adr32_dfm, - &m68000_device::ext_l_ds_dfm, - &m68000_device::movem_l_list_ais_dfm, - &m68000_device::movem_l_listp_pais_dfm, - &m68000_device::movem_l_list_das_dfm, - &m68000_device::movem_l_list_dais_dfm, - &m68000_device::movem_l_list_adr16_dfm, - &m68000_device::movem_l_list_adr32_dfm, - &m68000_device::tst_b_ds_dfm, - &m68000_device::tst_b_ais_dfm, - &m68000_device::tst_b_aips_dfm, - &m68000_device::tst_b_pais_dfm, - &m68000_device::tst_b_das_dfm, - &m68000_device::tst_b_dais_dfm, - &m68000_device::tst_b_adr16_dfm, - &m68000_device::tst_b_adr32_dfm, - &m68000_device::tst_w_ds_dfm, - &m68000_device::tst_w_ais_dfm, - &m68000_device::tst_w_aips_dfm, - &m68000_device::tst_w_pais_dfm, - &m68000_device::tst_w_das_dfm, - &m68000_device::tst_w_dais_dfm, - &m68000_device::tst_w_adr16_dfm, - &m68000_device::tst_w_adr32_dfm, - &m68000_device::tst_l_ds_dfm, - &m68000_device::tst_l_ais_dfm, - &m68000_device::tst_l_aips_dfm, - &m68000_device::tst_l_pais_dfm, - &m68000_device::tst_l_das_dfm, - &m68000_device::tst_l_dais_dfm, - &m68000_device::tst_l_adr16_dfm, - &m68000_device::tst_l_adr32_dfm, - &m68000_device::tas_ds_dfm, - &m68000_device::tas_ais_dfm, - &m68000_device::tas_aips_dfm, - &m68000_device::tas_pais_dfm, - &m68000_device::tas_das_dfm, - &m68000_device::tas_dais_dfm, - &m68000_device::tas_adr16_dfm, - &m68000_device::tas_adr32_dfm, - &m68000_device::movem_w_ais_list_dfm, - &m68000_device::movem_w_aips_list_dfm, - &m68000_device::movem_w_das_list_dfm, - &m68000_device::movem_w_dais_list_dfm, - &m68000_device::movem_w_adr16_list_dfm, - &m68000_device::movem_w_adr32_list_dfm, - &m68000_device::movem_w_dpc_list_dfm, - &m68000_device::movem_w_dpci_list_dfm, - &m68000_device::movem_l_ais_list_dfm, - &m68000_device::movem_l_aips_list_dfm, - &m68000_device::movem_l_das_list_dfm, - &m68000_device::movem_l_dais_list_dfm, - &m68000_device::movem_l_adr16_list_dfm, - &m68000_device::movem_l_adr32_list_dfm, - &m68000_device::movem_l_dpc_list_dfm, - &m68000_device::movem_l_dpci_list_dfm, - &m68000_device::trap_imm4_dfm, - &m68000_device::link_as_imm16_dfm, - &m68000_device::unlk_as_dfm, - &m68000_device::move_as_usp_dfm, - &m68000_device::move_usp_as_dfm, - &m68000_device::reset_dfm, - &m68000_device::nop_dfm, - &m68000_device::stop_i16u_dfm, - &m68000_device::rte_dfm, - &m68000_device::rts_dfm, - &m68000_device::trapv_dfm, - &m68000_device::rtr_dfm, - &m68000_device::jsr_ais_dfm, - &m68000_device::jsr_das_dfm, - &m68000_device::jsr_dais_dfm, - &m68000_device::jsr_adr16_dfm, - &m68000_device::jsr_adr32_dfm, - &m68000_device::jsr_dpc_dfm, - &m68000_device::jsr_dpci_dfm, - &m68000_device::jmp_ais_dfm, - &m68000_device::jmp_das_dfm, - &m68000_device::jmp_dais_dfm, - &m68000_device::jmp_adr16_dfm, - &m68000_device::jmp_adr32_dfm, - &m68000_device::jmp_dpc_dfm, - &m68000_device::jmp_dpci_dfm, - &m68000_device::addq_b_imm3_ds_dfm, - &m68000_device::addq_b_imm3_ais_dfm, - &m68000_device::addq_b_imm3_aips_dfm, - &m68000_device::addq_b_imm3_pais_dfm, - &m68000_device::addq_b_imm3_das_dfm, - &m68000_device::addq_b_imm3_dais_dfm, - &m68000_device::addq_b_imm3_adr16_dfm, - &m68000_device::addq_b_imm3_adr32_dfm, - &m68000_device::addq_w_imm3_ds_dfm, - &m68000_device::addq_w_imm3_as_dfm, - &m68000_device::addq_w_imm3_ais_dfm, - &m68000_device::addq_w_imm3_aips_dfm, - &m68000_device::addq_w_imm3_pais_dfm, - &m68000_device::addq_w_imm3_das_dfm, - &m68000_device::addq_w_imm3_dais_dfm, - &m68000_device::addq_w_imm3_adr16_dfm, - &m68000_device::addq_w_imm3_adr32_dfm, - &m68000_device::addq_l_imm3_ds_dfm, - &m68000_device::addq_l_imm3_as_dfm, - &m68000_device::addq_l_imm3_ais_dfm, - &m68000_device::addq_l_imm3_aips_dfm, - &m68000_device::addq_l_imm3_pais_dfm, - &m68000_device::addq_l_imm3_das_dfm, - &m68000_device::addq_l_imm3_dais_dfm, - &m68000_device::addq_l_imm3_adr16_dfm, - &m68000_device::addq_l_imm3_adr32_dfm, - &m68000_device::st_ds_dfm, - &m68000_device::dbt_ds_rel16_dfm, - &m68000_device::st_ais_dfm, - &m68000_device::st_aips_dfm, - &m68000_device::st_pais_dfm, - &m68000_device::st_das_dfm, - &m68000_device::st_dais_dfm, - &m68000_device::st_adr16_dfm, - &m68000_device::st_adr32_dfm, - &m68000_device::subq_b_imm3_ds_dfm, - &m68000_device::subq_b_imm3_ais_dfm, - &m68000_device::subq_b_imm3_aips_dfm, - &m68000_device::subq_b_imm3_pais_dfm, - &m68000_device::subq_b_imm3_das_dfm, - &m68000_device::subq_b_imm3_dais_dfm, - &m68000_device::subq_b_imm3_adr16_dfm, - &m68000_device::subq_b_imm3_adr32_dfm, - &m68000_device::subq_w_imm3_ds_dfm, - &m68000_device::subq_w_imm3_as_dfm, - &m68000_device::subq_w_imm3_ais_dfm, - &m68000_device::subq_w_imm3_aips_dfm, - &m68000_device::subq_w_imm3_pais_dfm, - &m68000_device::subq_w_imm3_das_dfm, - &m68000_device::subq_w_imm3_dais_dfm, - &m68000_device::subq_w_imm3_adr16_dfm, - &m68000_device::subq_w_imm3_adr32_dfm, - &m68000_device::subq_l_imm3_ds_dfm, - &m68000_device::subq_l_imm3_as_dfm, - &m68000_device::subq_l_imm3_ais_dfm, - &m68000_device::subq_l_imm3_aips_dfm, - &m68000_device::subq_l_imm3_pais_dfm, - &m68000_device::subq_l_imm3_das_dfm, - &m68000_device::subq_l_imm3_dais_dfm, - &m68000_device::subq_l_imm3_adr16_dfm, - &m68000_device::subq_l_imm3_adr32_dfm, - &m68000_device::sf_ds_dfm, - &m68000_device::dbra_ds_rel16_dfm, - &m68000_device::sf_ais_dfm, - &m68000_device::sf_aips_dfm, - &m68000_device::sf_pais_dfm, - &m68000_device::sf_das_dfm, - &m68000_device::sf_dais_dfm, - &m68000_device::sf_adr16_dfm, - &m68000_device::sf_adr32_dfm, - &m68000_device::shi_ds_dfm, - &m68000_device::dbhi_ds_rel16_dfm, - &m68000_device::shi_ais_dfm, - &m68000_device::shi_aips_dfm, - &m68000_device::shi_pais_dfm, - &m68000_device::shi_das_dfm, - &m68000_device::shi_dais_dfm, - &m68000_device::shi_adr16_dfm, - &m68000_device::shi_adr32_dfm, - &m68000_device::sls_ds_dfm, - &m68000_device::dbls_ds_rel16_dfm, - &m68000_device::sls_ais_dfm, - &m68000_device::sls_aips_dfm, - &m68000_device::sls_pais_dfm, - &m68000_device::sls_das_dfm, - &m68000_device::sls_dais_dfm, - &m68000_device::sls_adr16_dfm, - &m68000_device::sls_adr32_dfm, - &m68000_device::scc_ds_dfm, - &m68000_device::dbcc_ds_rel16_dfm, - &m68000_device::scc_ais_dfm, - &m68000_device::scc_aips_dfm, - &m68000_device::scc_pais_dfm, - &m68000_device::scc_das_dfm, - &m68000_device::scc_dais_dfm, - &m68000_device::scc_adr16_dfm, - &m68000_device::scc_adr32_dfm, - &m68000_device::scs_ds_dfm, - &m68000_device::dbcs_ds_rel16_dfm, - &m68000_device::scs_ais_dfm, - &m68000_device::scs_aips_dfm, - &m68000_device::scs_pais_dfm, - &m68000_device::scs_das_dfm, - &m68000_device::scs_dais_dfm, - &m68000_device::scs_adr16_dfm, - &m68000_device::scs_adr32_dfm, - &m68000_device::sne_ds_dfm, - &m68000_device::dbne_ds_rel16_dfm, - &m68000_device::sne_ais_dfm, - &m68000_device::sne_aips_dfm, - &m68000_device::sne_pais_dfm, - &m68000_device::sne_das_dfm, - &m68000_device::sne_dais_dfm, - &m68000_device::sne_adr16_dfm, - &m68000_device::sne_adr32_dfm, - &m68000_device::seq_ds_dfm, - &m68000_device::dbeq_ds_rel16_dfm, - &m68000_device::seq_ais_dfm, - &m68000_device::seq_aips_dfm, - &m68000_device::seq_pais_dfm, - &m68000_device::seq_das_dfm, - &m68000_device::seq_dais_dfm, - &m68000_device::seq_adr16_dfm, - &m68000_device::seq_adr32_dfm, - &m68000_device::svc_ds_dfm, - &m68000_device::dbvc_ds_rel16_dfm, - &m68000_device::svc_ais_dfm, - &m68000_device::svc_aips_dfm, - &m68000_device::svc_pais_dfm, - &m68000_device::svc_das_dfm, - &m68000_device::svc_dais_dfm, - &m68000_device::svc_adr16_dfm, - &m68000_device::svc_adr32_dfm, - &m68000_device::svs_ds_dfm, - &m68000_device::dbvs_ds_rel16_dfm, - &m68000_device::svs_ais_dfm, - &m68000_device::svs_aips_dfm, - &m68000_device::svs_pais_dfm, - &m68000_device::svs_das_dfm, - &m68000_device::svs_dais_dfm, - &m68000_device::svs_adr16_dfm, - &m68000_device::svs_adr32_dfm, - &m68000_device::spl_ds_dfm, - &m68000_device::dbpl_ds_rel16_dfm, - &m68000_device::spl_ais_dfm, - &m68000_device::spl_aips_dfm, - &m68000_device::spl_pais_dfm, - &m68000_device::spl_das_dfm, - &m68000_device::spl_dais_dfm, - &m68000_device::spl_adr16_dfm, - &m68000_device::spl_adr32_dfm, - &m68000_device::smi_ds_dfm, - &m68000_device::dbmi_ds_rel16_dfm, - &m68000_device::smi_ais_dfm, - &m68000_device::smi_aips_dfm, - &m68000_device::smi_pais_dfm, - &m68000_device::smi_das_dfm, - &m68000_device::smi_dais_dfm, - &m68000_device::smi_adr16_dfm, - &m68000_device::smi_adr32_dfm, - &m68000_device::sge_ds_dfm, - &m68000_device::dbge_ds_rel16_dfm, - &m68000_device::sge_ais_dfm, - &m68000_device::sge_aips_dfm, - &m68000_device::sge_pais_dfm, - &m68000_device::sge_das_dfm, - &m68000_device::sge_dais_dfm, - &m68000_device::sge_adr16_dfm, - &m68000_device::sge_adr32_dfm, - &m68000_device::slt_ds_dfm, - &m68000_device::dblt_ds_rel16_dfm, - &m68000_device::slt_ais_dfm, - &m68000_device::slt_aips_dfm, - &m68000_device::slt_pais_dfm, - &m68000_device::slt_das_dfm, - &m68000_device::slt_dais_dfm, - &m68000_device::slt_adr16_dfm, - &m68000_device::slt_adr32_dfm, - &m68000_device::sgt_ds_dfm, - &m68000_device::dbgt_ds_rel16_dfm, - &m68000_device::sgt_ais_dfm, - &m68000_device::sgt_aips_dfm, - &m68000_device::sgt_pais_dfm, - &m68000_device::sgt_das_dfm, - &m68000_device::sgt_dais_dfm, - &m68000_device::sgt_adr16_dfm, - &m68000_device::sgt_adr32_dfm, - &m68000_device::sle_ds_dfm, - &m68000_device::dble_ds_rel16_dfm, - &m68000_device::sle_ais_dfm, - &m68000_device::sle_aips_dfm, - &m68000_device::sle_pais_dfm, - &m68000_device::sle_das_dfm, - &m68000_device::sle_dais_dfm, - &m68000_device::sle_adr16_dfm, - &m68000_device::sle_adr32_dfm, - &m68000_device::bra_rel16_dfm, - &m68000_device::bra_rel8_dfm, - &m68000_device::bsr_rel16_dfm, - &m68000_device::bsr_rel8_dfm, - &m68000_device::bhi_rel16_dfm, - &m68000_device::bhi_rel8_dfm, - &m68000_device::bls_rel16_dfm, - &m68000_device::bls_rel8_dfm, - &m68000_device::bcc_rel16_dfm, - &m68000_device::bcc_rel8_dfm, - &m68000_device::bcs_rel16_dfm, - &m68000_device::bcs_rel8_dfm, - &m68000_device::bne_rel16_dfm, - &m68000_device::bne_rel8_dfm, - &m68000_device::beq_rel16_dfm, - &m68000_device::beq_rel8_dfm, - &m68000_device::bvc_rel16_dfm, - &m68000_device::bvc_rel8_dfm, - &m68000_device::bvs_rel16_dfm, - &m68000_device::bvs_rel8_dfm, - &m68000_device::bpl_rel16_dfm, - &m68000_device::bpl_rel8_dfm, - &m68000_device::bmi_rel16_dfm, - &m68000_device::bmi_rel8_dfm, - &m68000_device::bge_rel16_dfm, - &m68000_device::bge_rel8_dfm, - &m68000_device::blt_rel16_dfm, - &m68000_device::blt_rel8_dfm, - &m68000_device::bgt_rel16_dfm, - &m68000_device::bgt_rel8_dfm, - &m68000_device::ble_rel16_dfm, - &m68000_device::ble_rel8_dfm, - &m68000_device::moveq_imm8o_dd_dfm, - &m68000_device::or_b_ds_dd_dfm, - &m68000_device::or_b_ais_dd_dfm, - &m68000_device::or_b_aips_dd_dfm, - &m68000_device::or_b_pais_dd_dfm, - &m68000_device::or_b_das_dd_dfm, - &m68000_device::or_b_dais_dd_dfm, - &m68000_device::or_b_adr16_dd_dfm, - &m68000_device::or_b_adr32_dd_dfm, - &m68000_device::or_b_dpc_dd_dfm, - &m68000_device::or_b_dpci_dd_dfm, - &m68000_device::or_b_imm8_dd_dfm, - &m68000_device::or_w_ds_dd_dfm, - &m68000_device::or_w_ais_dd_dfm, - &m68000_device::or_w_aips_dd_dfm, - &m68000_device::or_w_pais_dd_dfm, - &m68000_device::or_w_das_dd_dfm, - &m68000_device::or_w_dais_dd_dfm, - &m68000_device::or_w_adr16_dd_dfm, - &m68000_device::or_w_adr32_dd_dfm, - &m68000_device::or_w_dpc_dd_dfm, - &m68000_device::or_w_dpci_dd_dfm, - &m68000_device::or_w_imm16_dd_dfm, - &m68000_device::or_l_ds_dd_dfm, - &m68000_device::or_l_ais_dd_dfm, - &m68000_device::or_l_aips_dd_dfm, - &m68000_device::or_l_pais_dd_dfm, - &m68000_device::or_l_das_dd_dfm, - &m68000_device::or_l_dais_dd_dfm, - &m68000_device::or_l_adr16_dd_dfm, - &m68000_device::or_l_adr32_dd_dfm, - &m68000_device::or_l_dpc_dd_dfm, - &m68000_device::or_l_dpci_dd_dfm, - &m68000_device::or_l_imm32_dd_dfm, - &m68000_device::divu_w_ds_dd_dfm, - &m68000_device::divu_w_ais_dd_dfm, - &m68000_device::divu_w_aips_dd_dfm, - &m68000_device::divu_w_pais_dd_dfm, - &m68000_device::divu_w_das_dd_dfm, - &m68000_device::divu_w_dais_dd_dfm, - &m68000_device::divu_w_adr16_dd_dfm, - &m68000_device::divu_w_adr32_dd_dfm, - &m68000_device::divu_w_dpc_dd_dfm, - &m68000_device::divu_w_dpci_dd_dfm, - &m68000_device::divu_w_imm16_dd_dfm, - &m68000_device::sbcd_ds_dd_dfm, - &m68000_device::sbcd_pais_paid_dfm, - &m68000_device::or_b_dd_ais_dfm, - &m68000_device::or_b_dd_aips_dfm, - &m68000_device::or_b_dd_pais_dfm, - &m68000_device::or_b_dd_das_dfm, - &m68000_device::or_b_dd_dais_dfm, - &m68000_device::or_b_dd_adr16_dfm, - &m68000_device::or_b_dd_adr32_dfm, - &m68000_device::or_w_dd_ais_dfm, - &m68000_device::or_w_dd_aips_dfm, - &m68000_device::or_w_dd_pais_dfm, - &m68000_device::or_w_dd_das_dfm, - &m68000_device::or_w_dd_dais_dfm, - &m68000_device::or_w_dd_adr16_dfm, - &m68000_device::or_w_dd_adr32_dfm, - &m68000_device::or_l_dd_ais_dfm, - &m68000_device::or_l_dd_aips_dfm, - &m68000_device::or_l_dd_pais_dfm, - &m68000_device::or_l_dd_das_dfm, - &m68000_device::or_l_dd_dais_dfm, - &m68000_device::or_l_dd_adr16_dfm, - &m68000_device::or_l_dd_adr32_dfm, - &m68000_device::divs_w_ds_dd_dfm, - &m68000_device::divs_w_ais_dd_dfm, - &m68000_device::divs_w_aips_dd_dfm, - &m68000_device::divs_w_pais_dd_dfm, - &m68000_device::divs_w_das_dd_dfm, - &m68000_device::divs_w_dais_dd_dfm, - &m68000_device::divs_w_adr16_dd_dfm, - &m68000_device::divs_w_adr32_dd_dfm, - &m68000_device::divs_w_dpc_dd_dfm, - &m68000_device::divs_w_dpci_dd_dfm, - &m68000_device::divs_w_imm16_dd_dfm, - &m68000_device::sub_b_ds_dd_dfm, - &m68000_device::sub_b_ais_dd_dfm, - &m68000_device::sub_b_aips_dd_dfm, - &m68000_device::sub_b_pais_dd_dfm, - &m68000_device::sub_b_das_dd_dfm, - &m68000_device::sub_b_dais_dd_dfm, - &m68000_device::sub_b_adr16_dd_dfm, - &m68000_device::sub_b_adr32_dd_dfm, - &m68000_device::sub_b_dpc_dd_dfm, - &m68000_device::sub_b_dpci_dd_dfm, - &m68000_device::sub_b_imm8_dd_dfm, - &m68000_device::sub_w_ds_dd_dfm, - &m68000_device::sub_w_as_dd_dfm, - &m68000_device::sub_w_ais_dd_dfm, - &m68000_device::sub_w_aips_dd_dfm, - &m68000_device::sub_w_pais_dd_dfm, - &m68000_device::sub_w_das_dd_dfm, - &m68000_device::sub_w_dais_dd_dfm, - &m68000_device::sub_w_adr16_dd_dfm, - &m68000_device::sub_w_adr32_dd_dfm, - &m68000_device::sub_w_dpc_dd_dfm, - &m68000_device::sub_w_dpci_dd_dfm, - &m68000_device::sub_w_imm16_dd_dfm, - &m68000_device::sub_l_ds_dd_dfm, - &m68000_device::sub_l_as_dd_dfm, - &m68000_device::sub_l_ais_dd_dfm, - &m68000_device::sub_l_aips_dd_dfm, - &m68000_device::sub_l_pais_dd_dfm, - &m68000_device::sub_l_das_dd_dfm, - &m68000_device::sub_l_dais_dd_dfm, - &m68000_device::sub_l_adr16_dd_dfm, - &m68000_device::sub_l_adr32_dd_dfm, - &m68000_device::sub_l_dpc_dd_dfm, - &m68000_device::sub_l_dpci_dd_dfm, - &m68000_device::sub_l_imm32_dd_dfm, - &m68000_device::suba_w_ds_ad_dfm, - &m68000_device::suba_w_as_ad_dfm, - &m68000_device::suba_w_ais_ad_dfm, - &m68000_device::suba_w_aips_ad_dfm, - &m68000_device::suba_w_pais_ad_dfm, - &m68000_device::suba_w_das_ad_dfm, - &m68000_device::suba_w_dais_ad_dfm, - &m68000_device::suba_w_adr16_ad_dfm, - &m68000_device::suba_w_adr32_ad_dfm, - &m68000_device::suba_w_dpc_ad_dfm, - &m68000_device::suba_w_dpci_ad_dfm, - &m68000_device::suba_w_imm16_ad_dfm, - &m68000_device::subx_b_ds_dd_dfm, - &m68000_device::subx_b_pais_paid_dfm, - &m68000_device::sub_b_dd_ais_dfm, - &m68000_device::sub_b_dd_aips_dfm, - &m68000_device::sub_b_dd_pais_dfm, - &m68000_device::sub_b_dd_das_dfm, - &m68000_device::sub_b_dd_dais_dfm, - &m68000_device::sub_b_dd_adr16_dfm, - &m68000_device::sub_b_dd_adr32_dfm, - &m68000_device::subx_w_ds_dd_dfm, - &m68000_device::subx_w_pais_paid_dfm, - &m68000_device::sub_w_dd_ais_dfm, - &m68000_device::sub_w_dd_aips_dfm, - &m68000_device::sub_w_dd_pais_dfm, - &m68000_device::sub_w_dd_das_dfm, - &m68000_device::sub_w_dd_dais_dfm, - &m68000_device::sub_w_dd_adr16_dfm, - &m68000_device::sub_w_dd_adr32_dfm, - &m68000_device::subx_l_ds_dd_dfm, - &m68000_device::subx_l_pais_paid_dfm, - &m68000_device::sub_l_dd_ais_dfm, - &m68000_device::sub_l_dd_aips_dfm, - &m68000_device::sub_l_dd_pais_dfm, - &m68000_device::sub_l_dd_das_dfm, - &m68000_device::sub_l_dd_dais_dfm, - &m68000_device::sub_l_dd_adr16_dfm, - &m68000_device::sub_l_dd_adr32_dfm, - &m68000_device::suba_l_ds_ad_dfm, - &m68000_device::suba_l_as_ad_dfm, - &m68000_device::suba_l_ais_ad_dfm, - &m68000_device::suba_l_aips_ad_dfm, - &m68000_device::suba_l_pais_ad_dfm, - &m68000_device::suba_l_das_ad_dfm, - &m68000_device::suba_l_dais_ad_dfm, - &m68000_device::suba_l_adr16_ad_dfm, - &m68000_device::suba_l_adr32_ad_dfm, - &m68000_device::suba_l_dpc_ad_dfm, - &m68000_device::suba_l_dpci_ad_dfm, - &m68000_device::suba_l_imm32_ad_dfm, - &m68000_device::cmp_b_ds_dd_dfm, - &m68000_device::cmp_b_ais_dd_dfm, - &m68000_device::cmp_b_aips_dd_dfm, - &m68000_device::cmp_b_pais_dd_dfm, - &m68000_device::cmp_b_das_dd_dfm, - &m68000_device::cmp_b_dais_dd_dfm, - &m68000_device::cmp_b_adr16_dd_dfm, - &m68000_device::cmp_b_adr32_dd_dfm, - &m68000_device::cmp_b_dpc_dd_dfm, - &m68000_device::cmp_b_dpci_dd_dfm, - &m68000_device::cmp_b_imm8_dd_dfm, - &m68000_device::cmp_w_ds_dd_dfm, - &m68000_device::cmp_w_as_dd_dfm, - &m68000_device::cmp_w_ais_dd_dfm, - &m68000_device::cmp_w_aips_dd_dfm, - &m68000_device::cmp_w_pais_dd_dfm, - &m68000_device::cmp_w_das_dd_dfm, - &m68000_device::cmp_w_dais_dd_dfm, - &m68000_device::cmp_w_adr16_dd_dfm, - &m68000_device::cmp_w_adr32_dd_dfm, - &m68000_device::cmp_w_dpc_dd_dfm, - &m68000_device::cmp_w_dpci_dd_dfm, - &m68000_device::cmp_w_imm16_dd_dfm, - &m68000_device::cmp_l_ds_dd_dfm, - &m68000_device::cmp_l_as_dd_dfm, - &m68000_device::cmp_l_ais_dd_dfm, - &m68000_device::cmp_l_aips_dd_dfm, - &m68000_device::cmp_l_pais_dd_dfm, - &m68000_device::cmp_l_das_dd_dfm, - &m68000_device::cmp_l_dais_dd_dfm, - &m68000_device::cmp_l_adr16_dd_dfm, - &m68000_device::cmp_l_adr32_dd_dfm, - &m68000_device::cmp_l_dpc_dd_dfm, - &m68000_device::cmp_l_dpci_dd_dfm, - &m68000_device::cmp_l_imm32_dd_dfm, - &m68000_device::cmpa_w_ds_ad_dfm, - &m68000_device::cmpa_w_as_ad_dfm, - &m68000_device::cmpa_w_ais_ad_dfm, - &m68000_device::cmpa_w_aips_ad_dfm, - &m68000_device::cmpa_w_pais_ad_dfm, - &m68000_device::cmpa_w_das_ad_dfm, - &m68000_device::cmpa_w_dais_ad_dfm, - &m68000_device::cmpa_w_adr16_ad_dfm, - &m68000_device::cmpa_w_adr32_ad_dfm, - &m68000_device::cmpa_w_dpc_ad_dfm, - &m68000_device::cmpa_w_dpci_ad_dfm, - &m68000_device::cmpa_w_imm16_ad_dfm, - &m68000_device::eor_b_dd_ds_dfm, - &m68000_device::cmpm_b_aips_aipd_dfm, - &m68000_device::eor_b_dd_ais_dfm, - &m68000_device::eor_b_dd_aips_dfm, - &m68000_device::eor_b_dd_pais_dfm, - &m68000_device::eor_b_dd_das_dfm, - &m68000_device::eor_b_dd_dais_dfm, - &m68000_device::eor_b_dd_adr16_dfm, - &m68000_device::eor_b_dd_adr32_dfm, - &m68000_device::eor_w_dd_ds_dfm, - &m68000_device::cmpm_w_aips_aipd_dfm, - &m68000_device::eor_w_dd_ais_dfm, - &m68000_device::eor_w_dd_aips_dfm, - &m68000_device::eor_w_dd_pais_dfm, - &m68000_device::eor_w_dd_das_dfm, - &m68000_device::eor_w_dd_dais_dfm, - &m68000_device::eor_w_dd_adr16_dfm, - &m68000_device::eor_w_dd_adr32_dfm, - &m68000_device::eor_l_dd_ds_dfm, - &m68000_device::cmpm_l_aips_aipd_dfm, - &m68000_device::eor_l_dd_ais_dfm, - &m68000_device::eor_l_dd_aips_dfm, - &m68000_device::eor_l_dd_pais_dfm, - &m68000_device::eor_l_dd_das_dfm, - &m68000_device::eor_l_dd_dais_dfm, - &m68000_device::eor_l_dd_adr16_dfm, - &m68000_device::eor_l_dd_adr32_dfm, - &m68000_device::cmpa_l_ds_ad_dfm, - &m68000_device::cmpa_l_as_ad_dfm, - &m68000_device::cmpa_l_ais_ad_dfm, - &m68000_device::cmpa_l_aips_ad_dfm, - &m68000_device::cmpa_l_pais_ad_dfm, - &m68000_device::cmpa_l_das_ad_dfm, - &m68000_device::cmpa_l_dais_ad_dfm, - &m68000_device::cmpa_l_adr16_ad_dfm, - &m68000_device::cmpa_l_adr32_ad_dfm, - &m68000_device::cmpa_l_dpc_ad_dfm, - &m68000_device::cmpa_l_dpci_ad_dfm, - &m68000_device::cmpa_l_imm32_ad_dfm, - &m68000_device::and_b_ds_dd_dfm, - &m68000_device::and_b_ais_dd_dfm, - &m68000_device::and_b_aips_dd_dfm, - &m68000_device::and_b_pais_dd_dfm, - &m68000_device::and_b_das_dd_dfm, - &m68000_device::and_b_dais_dd_dfm, - &m68000_device::and_b_adr16_dd_dfm, - &m68000_device::and_b_adr32_dd_dfm, - &m68000_device::and_b_dpc_dd_dfm, - &m68000_device::and_b_dpci_dd_dfm, - &m68000_device::and_b_imm8_dd_dfm, - &m68000_device::and_w_ds_dd_dfm, - &m68000_device::and_w_ais_dd_dfm, - &m68000_device::and_w_aips_dd_dfm, - &m68000_device::and_w_pais_dd_dfm, - &m68000_device::and_w_das_dd_dfm, - &m68000_device::and_w_dais_dd_dfm, - &m68000_device::and_w_adr16_dd_dfm, - &m68000_device::and_w_adr32_dd_dfm, - &m68000_device::and_w_dpc_dd_dfm, - &m68000_device::and_w_dpci_dd_dfm, - &m68000_device::and_w_imm16_dd_dfm, - &m68000_device::and_l_ds_dd_dfm, - &m68000_device::and_l_ais_dd_dfm, - &m68000_device::and_l_aips_dd_dfm, - &m68000_device::and_l_pais_dd_dfm, - &m68000_device::and_l_das_dd_dfm, - &m68000_device::and_l_dais_dd_dfm, - &m68000_device::and_l_adr16_dd_dfm, - &m68000_device::and_l_adr32_dd_dfm, - &m68000_device::and_l_dpc_dd_dfm, - &m68000_device::and_l_dpci_dd_dfm, - &m68000_device::and_l_imm32_dd_dfm, - &m68000_device::mulu_w_ds_dd_dfm, - &m68000_device::mulu_w_ais_dd_dfm, - &m68000_device::mulu_w_aips_dd_dfm, - &m68000_device::mulu_w_pais_dd_dfm, - &m68000_device::mulu_w_das_dd_dfm, - &m68000_device::mulu_w_dais_dd_dfm, - &m68000_device::mulu_w_adr16_dd_dfm, - &m68000_device::mulu_w_adr32_dd_dfm, - &m68000_device::mulu_w_dpc_dd_dfm, - &m68000_device::mulu_w_dpci_dd_dfm, - &m68000_device::mulu_w_imm16_dd_dfm, - &m68000_device::abcd_ds_dd_dfm, - &m68000_device::abcd_pais_paid_dfm, - &m68000_device::and_b_dd_ais_dfm, - &m68000_device::and_b_dd_aips_dfm, - &m68000_device::and_b_dd_pais_dfm, - &m68000_device::and_b_dd_das_dfm, - &m68000_device::and_b_dd_dais_dfm, - &m68000_device::and_b_dd_adr16_dfm, - &m68000_device::and_b_dd_adr32_dfm, - &m68000_device::exg_dd_ds_dfm, - &m68000_device::exg_ad_as_dfm, - &m68000_device::and_w_dd_ais_dfm, - &m68000_device::and_w_dd_aips_dfm, - &m68000_device::and_w_dd_pais_dfm, - &m68000_device::and_w_dd_das_dfm, - &m68000_device::and_w_dd_dais_dfm, - &m68000_device::and_w_dd_adr16_dfm, - &m68000_device::and_w_dd_adr32_dfm, - &m68000_device::exg_dd_as_dfm, - &m68000_device::and_l_dd_ais_dfm, - &m68000_device::and_l_dd_aips_dfm, - &m68000_device::and_l_dd_pais_dfm, - &m68000_device::and_l_dd_das_dfm, - &m68000_device::and_l_dd_dais_dfm, - &m68000_device::and_l_dd_adr16_dfm, - &m68000_device::and_l_dd_adr32_dfm, - &m68000_device::muls_w_ds_dd_dfm, - &m68000_device::muls_w_ais_dd_dfm, - &m68000_device::muls_w_aips_dd_dfm, - &m68000_device::muls_w_pais_dd_dfm, - &m68000_device::muls_w_das_dd_dfm, - &m68000_device::muls_w_dais_dd_dfm, - &m68000_device::muls_w_adr16_dd_dfm, - &m68000_device::muls_w_adr32_dd_dfm, - &m68000_device::muls_w_dpc_dd_dfm, - &m68000_device::muls_w_dpci_dd_dfm, - &m68000_device::muls_w_imm16_dd_dfm, - &m68000_device::add_b_ds_dd_dfm, - &m68000_device::add_b_ais_dd_dfm, - &m68000_device::add_b_aips_dd_dfm, - &m68000_device::add_b_pais_dd_dfm, - &m68000_device::add_b_das_dd_dfm, - &m68000_device::add_b_dais_dd_dfm, - &m68000_device::add_b_adr16_dd_dfm, - &m68000_device::add_b_adr32_dd_dfm, - &m68000_device::add_b_dpc_dd_dfm, - &m68000_device::add_b_dpci_dd_dfm, - &m68000_device::add_b_imm8_dd_dfm, - &m68000_device::add_w_ds_dd_dfm, - &m68000_device::add_w_as_dd_dfm, - &m68000_device::add_w_ais_dd_dfm, - &m68000_device::add_w_aips_dd_dfm, - &m68000_device::add_w_pais_dd_dfm, - &m68000_device::add_w_das_dd_dfm, - &m68000_device::add_w_dais_dd_dfm, - &m68000_device::add_w_adr16_dd_dfm, - &m68000_device::add_w_adr32_dd_dfm, - &m68000_device::add_w_dpc_dd_dfm, - &m68000_device::add_w_dpci_dd_dfm, - &m68000_device::add_w_imm16_dd_dfm, - &m68000_device::add_l_ds_dd_dfm, - &m68000_device::add_l_as_dd_dfm, - &m68000_device::add_l_ais_dd_dfm, - &m68000_device::add_l_aips_dd_dfm, - &m68000_device::add_l_pais_dd_dfm, - &m68000_device::add_l_das_dd_dfm, - &m68000_device::add_l_dais_dd_dfm, - &m68000_device::add_l_adr16_dd_dfm, - &m68000_device::add_l_adr32_dd_dfm, - &m68000_device::add_l_dpc_dd_dfm, - &m68000_device::add_l_dpci_dd_dfm, - &m68000_device::add_l_imm32_dd_dfm, - &m68000_device::adda_w_ds_ad_dfm, - &m68000_device::adda_w_as_ad_dfm, - &m68000_device::adda_w_ais_ad_dfm, - &m68000_device::adda_w_aips_ad_dfm, - &m68000_device::adda_w_pais_ad_dfm, - &m68000_device::adda_w_das_ad_dfm, - &m68000_device::adda_w_dais_ad_dfm, - &m68000_device::adda_w_adr16_ad_dfm, - &m68000_device::adda_w_adr32_ad_dfm, - &m68000_device::adda_w_dpc_ad_dfm, - &m68000_device::adda_w_dpci_ad_dfm, - &m68000_device::adda_w_imm16_ad_dfm, - &m68000_device::addx_b_ds_dd_dfm, - &m68000_device::addx_b_pais_paid_dfm, - &m68000_device::add_b_dd_ais_dfm, - &m68000_device::add_b_dd_aips_dfm, - &m68000_device::add_b_dd_pais_dfm, - &m68000_device::add_b_dd_das_dfm, - &m68000_device::add_b_dd_dais_dfm, - &m68000_device::add_b_dd_adr16_dfm, - &m68000_device::add_b_dd_adr32_dfm, - &m68000_device::addx_w_ds_dd_dfm, - &m68000_device::addx_w_pais_paid_dfm, - &m68000_device::add_w_dd_ais_dfm, - &m68000_device::add_w_dd_aips_dfm, - &m68000_device::add_w_dd_pais_dfm, - &m68000_device::add_w_dd_das_dfm, - &m68000_device::add_w_dd_dais_dfm, - &m68000_device::add_w_dd_adr16_dfm, - &m68000_device::add_w_dd_adr32_dfm, - &m68000_device::addx_l_ds_dd_dfm, - &m68000_device::addx_l_pais_paid_dfm, - &m68000_device::add_l_dd_ais_dfm, - &m68000_device::add_l_dd_aips_dfm, - &m68000_device::add_l_dd_pais_dfm, - &m68000_device::add_l_dd_das_dfm, - &m68000_device::add_l_dd_dais_dfm, - &m68000_device::add_l_dd_adr16_dfm, - &m68000_device::add_l_dd_adr32_dfm, - &m68000_device::adda_l_ds_ad_dfm, - &m68000_device::adda_l_as_ad_dfm, - &m68000_device::adda_l_ais_ad_dfm, - &m68000_device::adda_l_aips_ad_dfm, - &m68000_device::adda_l_pais_ad_dfm, - &m68000_device::adda_l_das_ad_dfm, - &m68000_device::adda_l_dais_ad_dfm, - &m68000_device::adda_l_adr16_ad_dfm, - &m68000_device::adda_l_adr32_ad_dfm, - &m68000_device::adda_l_dpc_ad_dfm, - &m68000_device::adda_l_dpci_ad_dfm, - &m68000_device::adda_l_imm32_ad_dfm, - &m68000_device::asr_b_imm3_ds_dfm, - &m68000_device::lsr_b_imm3_ds_dfm, - &m68000_device::roxr_b_imm3_ds_dfm, - &m68000_device::ror_b_imm3_ds_dfm, - &m68000_device::asr_b_dd_ds_dfm, - &m68000_device::lsr_b_dd_ds_dfm, - &m68000_device::roxr_b_dd_ds_dfm, - &m68000_device::ror_b_dd_ds_dfm, - &m68000_device::asr_w_imm3_ds_dfm, - &m68000_device::lsr_w_imm3_ds_dfm, - &m68000_device::roxr_w_imm3_ds_dfm, - &m68000_device::ror_w_imm3_ds_dfm, - &m68000_device::asr_w_dd_ds_dfm, - &m68000_device::lsr_w_dd_ds_dfm, - &m68000_device::roxr_w_dd_ds_dfm, - &m68000_device::ror_w_dd_ds_dfm, - &m68000_device::asr_l_imm3_ds_dfm, - &m68000_device::lsr_l_imm3_ds_dfm, - &m68000_device::roxr_l_imm3_ds_dfm, - &m68000_device::ror_l_imm3_ds_dfm, - &m68000_device::asr_l_dd_ds_dfm, - &m68000_device::lsr_l_dd_ds_dfm, - &m68000_device::roxr_l_dd_ds_dfm, - &m68000_device::ror_l_dd_ds_dfm, - &m68000_device::asr_ais_dfm, - &m68000_device::asr_aips_dfm, - &m68000_device::asr_pais_dfm, - &m68000_device::asr_das_dfm, - &m68000_device::asr_dais_dfm, - &m68000_device::asr_adr16_dfm, - &m68000_device::asr_adr32_dfm, - &m68000_device::asl_b_imm3_ds_dfm, - &m68000_device::lsl_b_imm3_ds_dfm, - &m68000_device::roxl_b_imm3_ds_dfm, - &m68000_device::rol_b_imm3_ds_dfm, - &m68000_device::asl_b_dd_ds_dfm, - &m68000_device::lsl_b_dd_ds_dfm, - &m68000_device::roxl_b_dd_ds_dfm, - &m68000_device::rol_b_dd_ds_dfm, - &m68000_device::asl_w_imm3_ds_dfm, - &m68000_device::lsl_w_imm3_ds_dfm, - &m68000_device::roxl_w_imm3_ds_dfm, - &m68000_device::rol_w_imm3_ds_dfm, - &m68000_device::asl_w_dd_ds_dfm, - &m68000_device::lsl_w_dd_ds_dfm, - &m68000_device::roxl_w_dd_ds_dfm, - &m68000_device::rol_w_dd_ds_dfm, - &m68000_device::asl_l_imm3_ds_dfm, - &m68000_device::lsl_l_imm3_ds_dfm, - &m68000_device::roxl_l_imm3_ds_dfm, - &m68000_device::rol_l_imm3_ds_dfm, - &m68000_device::asl_l_dd_ds_dfm, - &m68000_device::lsl_l_dd_ds_dfm, - &m68000_device::roxl_l_dd_ds_dfm, - &m68000_device::rol_l_dd_ds_dfm, - &m68000_device::asl_ais_dfm, - &m68000_device::asl_aips_dfm, - &m68000_device::asl_pais_dfm, - &m68000_device::asl_das_dfm, - &m68000_device::asl_dais_dfm, - &m68000_device::asl_adr16_dfm, - &m68000_device::asl_adr32_dfm, - &m68000_device::lsr_ais_dfm, - &m68000_device::lsr_aips_dfm, - &m68000_device::lsr_pais_dfm, - &m68000_device::lsr_das_dfm, - &m68000_device::lsr_dais_dfm, - &m68000_device::lsr_adr16_dfm, - &m68000_device::lsr_adr32_dfm, - &m68000_device::lsl_ais_dfm, - &m68000_device::lsl_aips_dfm, - &m68000_device::lsl_pais_dfm, - &m68000_device::lsl_das_dfm, - &m68000_device::lsl_dais_dfm, - &m68000_device::lsl_adr16_dfm, - &m68000_device::lsl_adr32_dfm, - &m68000_device::roxr_ais_dfm, - &m68000_device::roxr_aips_dfm, - &m68000_device::roxr_pais_dfm, - &m68000_device::roxr_das_dfm, - &m68000_device::roxr_dais_dfm, - &m68000_device::roxr_adr16_dfm, - &m68000_device::roxr_adr32_dfm, - &m68000_device::roxl_ais_dfm, - &m68000_device::roxl_aips_dfm, - &m68000_device::roxl_pais_dfm, - &m68000_device::roxl_das_dfm, - &m68000_device::roxl_dais_dfm, - &m68000_device::roxl_adr16_dfm, - &m68000_device::roxl_adr32_dfm, - &m68000_device::ror_ais_dfm, - &m68000_device::ror_aips_dfm, - &m68000_device::ror_pais_dfm, - &m68000_device::ror_das_dfm, - &m68000_device::ror_dais_dfm, - &m68000_device::ror_adr16_dfm, - &m68000_device::ror_adr32_dfm, - &m68000_device::rol_ais_dfm, - &m68000_device::rol_aips_dfm, - &m68000_device::rol_pais_dfm, - &m68000_device::rol_das_dfm, - &m68000_device::rol_dais_dfm, - &m68000_device::rol_adr16_dfm, - &m68000_device::rol_adr32_dfm, +const m68000_mcu_device::handlerm m68000_mcu_device::s_handlers_dfm[] = { + &m68000_mcu_device::state_reset_dfm, + &m68000_mcu_device::state_bus_error_dfm, + &m68000_mcu_device::state_address_error_dfm, + &m68000_mcu_device::state_double_fault_dfm, + &m68000_mcu_device::state_interrupt_dfm, + &m68000_mcu_device::state_trace_dfm, + &m68000_mcu_device::state_illegal_dfm, + &m68000_mcu_device::state_priviledge_dfm, + &m68000_mcu_device::state_linea_dfm, + &m68000_mcu_device::state_linef_dfm, + &m68000_mcu_device::ori_b_imm8_ds_dfm, + &m68000_mcu_device::ori_b_imm8_ais_dfm, + &m68000_mcu_device::ori_b_imm8_aips_dfm, + &m68000_mcu_device::ori_b_imm8_pais_dfm, + &m68000_mcu_device::ori_b_imm8_das_dfm, + &m68000_mcu_device::ori_b_imm8_dais_dfm, + &m68000_mcu_device::ori_b_imm8_adr16_dfm, + &m68000_mcu_device::ori_b_imm8_adr32_dfm, + &m68000_mcu_device::ori_imm8_ccr_dfm, + &m68000_mcu_device::ori_w_imm16_ds_dfm, + &m68000_mcu_device::ori_w_imm16_ais_dfm, + &m68000_mcu_device::ori_w_imm16_aips_dfm, + &m68000_mcu_device::ori_w_imm16_pais_dfm, + &m68000_mcu_device::ori_w_imm16_das_dfm, + &m68000_mcu_device::ori_w_imm16_dais_dfm, + &m68000_mcu_device::ori_w_imm16_adr16_dfm, + &m68000_mcu_device::ori_w_imm16_adr32_dfm, + &m68000_mcu_device::ori_i16u_sr_dfm, + &m68000_mcu_device::ori_l_imm32_ds_dfm, + &m68000_mcu_device::ori_l_imm32_ais_dfm, + &m68000_mcu_device::ori_l_imm32_aips_dfm, + &m68000_mcu_device::ori_l_imm32_pais_dfm, + &m68000_mcu_device::ori_l_imm32_das_dfm, + &m68000_mcu_device::ori_l_imm32_dais_dfm, + &m68000_mcu_device::ori_l_imm32_adr16_dfm, + &m68000_mcu_device::ori_l_imm32_adr32_dfm, + &m68000_mcu_device::btst_dd_ds_dfm, + &m68000_mcu_device::movep_w_das_dd_dfm, + &m68000_mcu_device::btst_dd_ais_dfm, + &m68000_mcu_device::btst_dd_aips_dfm, + &m68000_mcu_device::btst_dd_pais_dfm, + &m68000_mcu_device::btst_dd_das_dfm, + &m68000_mcu_device::btst_dd_dais_dfm, + &m68000_mcu_device::btst_dd_adr16_dfm, + &m68000_mcu_device::btst_dd_adr32_dfm, + &m68000_mcu_device::btst_dd_dpc_dfm, + &m68000_mcu_device::btst_dd_dpci_dfm, + &m68000_mcu_device::btst_dd_imm_dfm, + &m68000_mcu_device::bchg_dd_ds_dfm, + &m68000_mcu_device::movep_l_das_dd_dfm, + &m68000_mcu_device::bchg_dd_ais_dfm, + &m68000_mcu_device::bchg_dd_aips_dfm, + &m68000_mcu_device::bchg_dd_pais_dfm, + &m68000_mcu_device::bchg_dd_das_dfm, + &m68000_mcu_device::bchg_dd_dais_dfm, + &m68000_mcu_device::bchg_dd_adr16_dfm, + &m68000_mcu_device::bchg_dd_adr32_dfm, + &m68000_mcu_device::bclr_dd_ds_dfm, + &m68000_mcu_device::movep_w_dd_das_dfm, + &m68000_mcu_device::bclr_dd_ais_dfm, + &m68000_mcu_device::bclr_dd_aips_dfm, + &m68000_mcu_device::bclr_dd_pais_dfm, + &m68000_mcu_device::bclr_dd_das_dfm, + &m68000_mcu_device::bclr_dd_dais_dfm, + &m68000_mcu_device::bclr_dd_adr16_dfm, + &m68000_mcu_device::bclr_dd_adr32_dfm, + &m68000_mcu_device::bset_dd_ds_dfm, + &m68000_mcu_device::movep_l_dd_das_dfm, + &m68000_mcu_device::bset_dd_ais_dfm, + &m68000_mcu_device::bset_dd_aips_dfm, + &m68000_mcu_device::bset_dd_pais_dfm, + &m68000_mcu_device::bset_dd_das_dfm, + &m68000_mcu_device::bset_dd_dais_dfm, + &m68000_mcu_device::bset_dd_adr16_dfm, + &m68000_mcu_device::bset_dd_adr32_dfm, + &m68000_mcu_device::andi_b_imm8_ds_dfm, + &m68000_mcu_device::andi_b_imm8_ais_dfm, + &m68000_mcu_device::andi_b_imm8_aips_dfm, + &m68000_mcu_device::andi_b_imm8_pais_dfm, + &m68000_mcu_device::andi_b_imm8_das_dfm, + &m68000_mcu_device::andi_b_imm8_dais_dfm, + &m68000_mcu_device::andi_b_imm8_adr16_dfm, + &m68000_mcu_device::andi_b_imm8_adr32_dfm, + &m68000_mcu_device::andi_imm8_ccr_dfm, + &m68000_mcu_device::andi_w_imm16_ds_dfm, + &m68000_mcu_device::andi_w_imm16_ais_dfm, + &m68000_mcu_device::andi_w_imm16_aips_dfm, + &m68000_mcu_device::andi_w_imm16_pais_dfm, + &m68000_mcu_device::andi_w_imm16_das_dfm, + &m68000_mcu_device::andi_w_imm16_dais_dfm, + &m68000_mcu_device::andi_w_imm16_adr16_dfm, + &m68000_mcu_device::andi_w_imm16_adr32_dfm, + &m68000_mcu_device::andi_i16u_sr_dfm, + &m68000_mcu_device::andi_l_imm32_ds_dfm, + &m68000_mcu_device::andi_l_imm32_ais_dfm, + &m68000_mcu_device::andi_l_imm32_aips_dfm, + &m68000_mcu_device::andi_l_imm32_pais_dfm, + &m68000_mcu_device::andi_l_imm32_das_dfm, + &m68000_mcu_device::andi_l_imm32_dais_dfm, + &m68000_mcu_device::andi_l_imm32_adr16_dfm, + &m68000_mcu_device::andi_l_imm32_adr32_dfm, + &m68000_mcu_device::subi_b_imm8_ds_dfm, + &m68000_mcu_device::subi_b_imm8_ais_dfm, + &m68000_mcu_device::subi_b_imm8_aips_dfm, + &m68000_mcu_device::subi_b_imm8_pais_dfm, + &m68000_mcu_device::subi_b_imm8_das_dfm, + &m68000_mcu_device::subi_b_imm8_dais_dfm, + &m68000_mcu_device::subi_b_imm8_adr16_dfm, + &m68000_mcu_device::subi_b_imm8_adr32_dfm, + &m68000_mcu_device::subi_w_imm16_ds_dfm, + &m68000_mcu_device::subi_w_imm16_ais_dfm, + &m68000_mcu_device::subi_w_imm16_aips_dfm, + &m68000_mcu_device::subi_w_imm16_pais_dfm, + &m68000_mcu_device::subi_w_imm16_das_dfm, + &m68000_mcu_device::subi_w_imm16_dais_dfm, + &m68000_mcu_device::subi_w_imm16_adr16_dfm, + &m68000_mcu_device::subi_w_imm16_adr32_dfm, + &m68000_mcu_device::subi_l_imm32_ds_dfm, + &m68000_mcu_device::subi_l_imm32_ais_dfm, + &m68000_mcu_device::subi_l_imm32_aips_dfm, + &m68000_mcu_device::subi_l_imm32_pais_dfm, + &m68000_mcu_device::subi_l_imm32_das_dfm, + &m68000_mcu_device::subi_l_imm32_dais_dfm, + &m68000_mcu_device::subi_l_imm32_adr16_dfm, + &m68000_mcu_device::subi_l_imm32_adr32_dfm, + &m68000_mcu_device::addi_b_imm8_ds_dfm, + &m68000_mcu_device::addi_b_imm8_ais_dfm, + &m68000_mcu_device::addi_b_imm8_aips_dfm, + &m68000_mcu_device::addi_b_imm8_pais_dfm, + &m68000_mcu_device::addi_b_imm8_das_dfm, + &m68000_mcu_device::addi_b_imm8_dais_dfm, + &m68000_mcu_device::addi_b_imm8_adr16_dfm, + &m68000_mcu_device::addi_b_imm8_adr32_dfm, + &m68000_mcu_device::addi_w_imm16_ds_dfm, + &m68000_mcu_device::addi_w_imm16_ais_dfm, + &m68000_mcu_device::addi_w_imm16_aips_dfm, + &m68000_mcu_device::addi_w_imm16_pais_dfm, + &m68000_mcu_device::addi_w_imm16_das_dfm, + &m68000_mcu_device::addi_w_imm16_dais_dfm, + &m68000_mcu_device::addi_w_imm16_adr16_dfm, + &m68000_mcu_device::addi_w_imm16_adr32_dfm, + &m68000_mcu_device::addi_l_imm32_ds_dfm, + &m68000_mcu_device::addi_l_imm32_ais_dfm, + &m68000_mcu_device::addi_l_imm32_aips_dfm, + &m68000_mcu_device::addi_l_imm32_pais_dfm, + &m68000_mcu_device::addi_l_imm32_das_dfm, + &m68000_mcu_device::addi_l_imm32_dais_dfm, + &m68000_mcu_device::addi_l_imm32_adr16_dfm, + &m68000_mcu_device::addi_l_imm32_adr32_dfm, + &m68000_mcu_device::btst_imm8_ds_dfm, + &m68000_mcu_device::btst_imm8_ais_dfm, + &m68000_mcu_device::btst_imm8_aips_dfm, + &m68000_mcu_device::btst_imm8_pais_dfm, + &m68000_mcu_device::btst_imm8_das_dfm, + &m68000_mcu_device::btst_imm8_dais_dfm, + &m68000_mcu_device::btst_imm8_adr16_dfm, + &m68000_mcu_device::btst_imm8_adr32_dfm, + &m68000_mcu_device::btst_imm8_dpc_dfm, + &m68000_mcu_device::btst_imm8_dpci_dfm, + &m68000_mcu_device::bchg_imm8_ds_dfm, + &m68000_mcu_device::bchg_imm8_ais_dfm, + &m68000_mcu_device::bchg_imm8_aips_dfm, + &m68000_mcu_device::bchg_imm8_pais_dfm, + &m68000_mcu_device::bchg_imm8_das_dfm, + &m68000_mcu_device::bchg_imm8_dais_dfm, + &m68000_mcu_device::bchg_imm8_adr16_dfm, + &m68000_mcu_device::bchg_imm8_adr32_dfm, + &m68000_mcu_device::bclr_imm8_ds_dfm, + &m68000_mcu_device::bclr_imm8_ais_dfm, + &m68000_mcu_device::bclr_imm8_aips_dfm, + &m68000_mcu_device::bclr_imm8_pais_dfm, + &m68000_mcu_device::bclr_imm8_das_dfm, + &m68000_mcu_device::bclr_imm8_dais_dfm, + &m68000_mcu_device::bclr_imm8_adr16_dfm, + &m68000_mcu_device::bclr_imm8_adr32_dfm, + &m68000_mcu_device::bset_imm8_ds_dfm, + &m68000_mcu_device::bset_imm8_ais_dfm, + &m68000_mcu_device::bset_imm8_aips_dfm, + &m68000_mcu_device::bset_imm8_pais_dfm, + &m68000_mcu_device::bset_imm8_das_dfm, + &m68000_mcu_device::bset_imm8_dais_dfm, + &m68000_mcu_device::bset_imm8_adr16_dfm, + &m68000_mcu_device::bset_imm8_adr32_dfm, + &m68000_mcu_device::eori_b_imm8_ds_dfm, + &m68000_mcu_device::eori_b_imm8_ais_dfm, + &m68000_mcu_device::eori_b_imm8_aips_dfm, + &m68000_mcu_device::eori_b_imm8_pais_dfm, + &m68000_mcu_device::eori_b_imm8_das_dfm, + &m68000_mcu_device::eori_b_imm8_dais_dfm, + &m68000_mcu_device::eori_b_imm8_adr16_dfm, + &m68000_mcu_device::eori_b_imm8_adr32_dfm, + &m68000_mcu_device::eori_imm8_ccr_dfm, + &m68000_mcu_device::eori_w_imm16_ds_dfm, + &m68000_mcu_device::eori_w_imm16_ais_dfm, + &m68000_mcu_device::eori_w_imm16_aips_dfm, + &m68000_mcu_device::eori_w_imm16_pais_dfm, + &m68000_mcu_device::eori_w_imm16_das_dfm, + &m68000_mcu_device::eori_w_imm16_dais_dfm, + &m68000_mcu_device::eori_w_imm16_adr16_dfm, + &m68000_mcu_device::eori_w_imm16_adr32_dfm, + &m68000_mcu_device::eori_i16u_sr_dfm, + &m68000_mcu_device::eori_l_imm32_ds_dfm, + &m68000_mcu_device::eori_l_imm32_ais_dfm, + &m68000_mcu_device::eori_l_imm32_aips_dfm, + &m68000_mcu_device::eori_l_imm32_pais_dfm, + &m68000_mcu_device::eori_l_imm32_das_dfm, + &m68000_mcu_device::eori_l_imm32_dais_dfm, + &m68000_mcu_device::eori_l_imm32_adr16_dfm, + &m68000_mcu_device::eori_l_imm32_adr32_dfm, + &m68000_mcu_device::cmpi_b_imm8_ds_dfm, + &m68000_mcu_device::cmpi_b_imm8_ais_dfm, + &m68000_mcu_device::cmpi_b_imm8_aips_dfm, + &m68000_mcu_device::cmpi_b_imm8_pais_dfm, + &m68000_mcu_device::cmpi_b_imm8_das_dfm, + &m68000_mcu_device::cmpi_b_imm8_dais_dfm, + &m68000_mcu_device::cmpi_b_imm8_adr16_dfm, + &m68000_mcu_device::cmpi_b_imm8_adr32_dfm, + &m68000_mcu_device::cmpi_w_imm16_ds_dfm, + &m68000_mcu_device::cmpi_w_imm16_ais_dfm, + &m68000_mcu_device::cmpi_w_imm16_aips_dfm, + &m68000_mcu_device::cmpi_w_imm16_pais_dfm, + &m68000_mcu_device::cmpi_w_imm16_das_dfm, + &m68000_mcu_device::cmpi_w_imm16_dais_dfm, + &m68000_mcu_device::cmpi_w_imm16_adr16_dfm, + &m68000_mcu_device::cmpi_w_imm16_adr32_dfm, + &m68000_mcu_device::cmpi_l_imm32_ds_dfm, + &m68000_mcu_device::cmpi_l_imm32_ais_dfm, + &m68000_mcu_device::cmpi_l_imm32_aips_dfm, + &m68000_mcu_device::cmpi_l_imm32_pais_dfm, + &m68000_mcu_device::cmpi_l_imm32_das_dfm, + &m68000_mcu_device::cmpi_l_imm32_dais_dfm, + &m68000_mcu_device::cmpi_l_imm32_adr16_dfm, + &m68000_mcu_device::cmpi_l_imm32_adr32_dfm, + &m68000_mcu_device::move_b_ds_dd_dfm, + &m68000_mcu_device::move_b_ais_dd_dfm, + &m68000_mcu_device::move_b_aips_dd_dfm, + &m68000_mcu_device::move_b_pais_dd_dfm, + &m68000_mcu_device::move_b_das_dd_dfm, + &m68000_mcu_device::move_b_dais_dd_dfm, + &m68000_mcu_device::move_b_adr16_dd_dfm, + &m68000_mcu_device::move_b_adr32_dd_dfm, + &m68000_mcu_device::move_b_dpc_dd_dfm, + &m68000_mcu_device::move_b_dpci_dd_dfm, + &m68000_mcu_device::move_b_imm8_dd_dfm, + &m68000_mcu_device::move_b_ds_aid_dfm, + &m68000_mcu_device::move_b_ais_aid_dfm, + &m68000_mcu_device::move_b_aips_aid_dfm, + &m68000_mcu_device::move_b_pais_aid_dfm, + &m68000_mcu_device::move_b_das_aid_dfm, + &m68000_mcu_device::move_b_dais_aid_dfm, + &m68000_mcu_device::move_b_adr16_aid_dfm, + &m68000_mcu_device::move_b_adr32_aid_dfm, + &m68000_mcu_device::move_b_dpc_aid_dfm, + &m68000_mcu_device::move_b_dpci_aid_dfm, + &m68000_mcu_device::move_b_imm8_aid_dfm, + &m68000_mcu_device::move_b_ds_aipd_dfm, + &m68000_mcu_device::move_b_ais_aipd_dfm, + &m68000_mcu_device::move_b_aips_aipd_dfm, + &m68000_mcu_device::move_b_pais_aipd_dfm, + &m68000_mcu_device::move_b_das_aipd_dfm, + &m68000_mcu_device::move_b_dais_aipd_dfm, + &m68000_mcu_device::move_b_adr16_aipd_dfm, + &m68000_mcu_device::move_b_adr32_aipd_dfm, + &m68000_mcu_device::move_b_dpc_aipd_dfm, + &m68000_mcu_device::move_b_dpci_aipd_dfm, + &m68000_mcu_device::move_b_imm8_aipd_dfm, + &m68000_mcu_device::move_b_ds_paid_dfm, + &m68000_mcu_device::move_b_ais_paid_dfm, + &m68000_mcu_device::move_b_aips_paid_dfm, + &m68000_mcu_device::move_b_pais_paid_dfm, + &m68000_mcu_device::move_b_das_paid_dfm, + &m68000_mcu_device::move_b_dais_paid_dfm, + &m68000_mcu_device::move_b_adr16_paid_dfm, + &m68000_mcu_device::move_b_adr32_paid_dfm, + &m68000_mcu_device::move_b_dpc_paid_dfm, + &m68000_mcu_device::move_b_dpci_paid_dfm, + &m68000_mcu_device::move_b_imm8_paid_dfm, + &m68000_mcu_device::move_b_ds_dad_dfm, + &m68000_mcu_device::move_b_ais_dad_dfm, + &m68000_mcu_device::move_b_aips_dad_dfm, + &m68000_mcu_device::move_b_pais_dad_dfm, + &m68000_mcu_device::move_b_das_dad_dfm, + &m68000_mcu_device::move_b_dais_dad_dfm, + &m68000_mcu_device::move_b_adr16_dad_dfm, + &m68000_mcu_device::move_b_adr32_dad_dfm, + &m68000_mcu_device::move_b_dpc_dad_dfm, + &m68000_mcu_device::move_b_dpci_dad_dfm, + &m68000_mcu_device::move_b_imm8_dad_dfm, + &m68000_mcu_device::move_b_ds_daid_dfm, + &m68000_mcu_device::move_b_ais_daid_dfm, + &m68000_mcu_device::move_b_aips_daid_dfm, + &m68000_mcu_device::move_b_pais_daid_dfm, + &m68000_mcu_device::move_b_das_daid_dfm, + &m68000_mcu_device::move_b_dais_daid_dfm, + &m68000_mcu_device::move_b_adr16_daid_dfm, + &m68000_mcu_device::move_b_adr32_daid_dfm, + &m68000_mcu_device::move_b_dpc_daid_dfm, + &m68000_mcu_device::move_b_dpci_daid_dfm, + &m68000_mcu_device::move_b_imm8_daid_dfm, + &m68000_mcu_device::move_b_ds_adr16_dfm, + &m68000_mcu_device::move_b_ais_adr16_dfm, + &m68000_mcu_device::move_b_aips_adr16_dfm, + &m68000_mcu_device::move_b_pais_adr16_dfm, + &m68000_mcu_device::move_b_das_adr16_dfm, + &m68000_mcu_device::move_b_dais_adr16_dfm, + &m68000_mcu_device::move_b_adr16_adr16_dfm, + &m68000_mcu_device::move_b_adr32_adr16_dfm, + &m68000_mcu_device::move_b_dpc_adr16_dfm, + &m68000_mcu_device::move_b_dpci_adr16_dfm, + &m68000_mcu_device::move_b_imm8_adr16_dfm, + &m68000_mcu_device::move_b_ds_adr32_dfm, + &m68000_mcu_device::move_b_ais_adr32_dfm, + &m68000_mcu_device::move_b_aips_adr32_dfm, + &m68000_mcu_device::move_b_pais_adr32_dfm, + &m68000_mcu_device::move_b_das_adr32_dfm, + &m68000_mcu_device::move_b_dais_adr32_dfm, + &m68000_mcu_device::move_b_adr16_adr32_dfm, + &m68000_mcu_device::move_b_adr32_adr32_dfm, + &m68000_mcu_device::move_b_dpc_adr32_dfm, + &m68000_mcu_device::move_b_dpci_adr32_dfm, + &m68000_mcu_device::move_b_imm8_adr32_dfm, + &m68000_mcu_device::move_l_ds_dd_dfm, + &m68000_mcu_device::move_l_as_dd_dfm, + &m68000_mcu_device::move_l_ais_dd_dfm, + &m68000_mcu_device::move_l_aips_dd_dfm, + &m68000_mcu_device::move_l_pais_dd_dfm, + &m68000_mcu_device::move_l_das_dd_dfm, + &m68000_mcu_device::move_l_dais_dd_dfm, + &m68000_mcu_device::move_l_adr16_dd_dfm, + &m68000_mcu_device::move_l_adr32_dd_dfm, + &m68000_mcu_device::move_l_dpc_dd_dfm, + &m68000_mcu_device::move_l_dpci_dd_dfm, + &m68000_mcu_device::move_l_imm32_dd_dfm, + &m68000_mcu_device::movea_l_ds_ad_dfm, + &m68000_mcu_device::movea_l_as_ad_dfm, + &m68000_mcu_device::movea_l_ais_ad_dfm, + &m68000_mcu_device::movea_l_aips_ad_dfm, + &m68000_mcu_device::movea_l_pais_ad_dfm, + &m68000_mcu_device::movea_l_das_ad_dfm, + &m68000_mcu_device::movea_l_dais_ad_dfm, + &m68000_mcu_device::movea_l_adr16_ad_dfm, + &m68000_mcu_device::movea_l_adr32_ad_dfm, + &m68000_mcu_device::movea_l_dpc_ad_dfm, + &m68000_mcu_device::movea_l_dpci_ad_dfm, + &m68000_mcu_device::movea_l_imm32_ad_dfm, + &m68000_mcu_device::move_l_ds_aid_dfm, + &m68000_mcu_device::move_l_as_aid_dfm, + &m68000_mcu_device::move_l_ais_aid_dfm, + &m68000_mcu_device::move_l_aips_aid_dfm, + &m68000_mcu_device::move_l_pais_aid_dfm, + &m68000_mcu_device::move_l_das_aid_dfm, + &m68000_mcu_device::move_l_dais_aid_dfm, + &m68000_mcu_device::move_l_adr16_aid_dfm, + &m68000_mcu_device::move_l_adr32_aid_dfm, + &m68000_mcu_device::move_l_dpc_aid_dfm, + &m68000_mcu_device::move_l_dpci_aid_dfm, + &m68000_mcu_device::move_l_imm32_aid_dfm, + &m68000_mcu_device::move_l_ds_aipd_dfm, + &m68000_mcu_device::move_l_as_aipd_dfm, + &m68000_mcu_device::move_l_ais_aipd_dfm, + &m68000_mcu_device::move_l_aips_aipd_dfm, + &m68000_mcu_device::move_l_pais_aipd_dfm, + &m68000_mcu_device::move_l_das_aipd_dfm, + &m68000_mcu_device::move_l_dais_aipd_dfm, + &m68000_mcu_device::move_l_adr16_aipd_dfm, + &m68000_mcu_device::move_l_adr32_aipd_dfm, + &m68000_mcu_device::move_l_dpc_aipd_dfm, + &m68000_mcu_device::move_l_dpci_aipd_dfm, + &m68000_mcu_device::move_l_imm32_aipd_dfm, + &m68000_mcu_device::move_l_ds_paid_dfm, + &m68000_mcu_device::move_l_as_paid_dfm, + &m68000_mcu_device::move_l_ais_paid_dfm, + &m68000_mcu_device::move_l_aips_paid_dfm, + &m68000_mcu_device::move_l_pais_paid_dfm, + &m68000_mcu_device::move_l_das_paid_dfm, + &m68000_mcu_device::move_l_dais_paid_dfm, + &m68000_mcu_device::move_l_adr16_paid_dfm, + &m68000_mcu_device::move_l_adr32_paid_dfm, + &m68000_mcu_device::move_l_dpc_paid_dfm, + &m68000_mcu_device::move_l_dpci_paid_dfm, + &m68000_mcu_device::move_l_imm32_paid_dfm, + &m68000_mcu_device::move_l_ds_dad_dfm, + &m68000_mcu_device::move_l_as_dad_dfm, + &m68000_mcu_device::move_l_ais_dad_dfm, + &m68000_mcu_device::move_l_aips_dad_dfm, + &m68000_mcu_device::move_l_pais_dad_dfm, + &m68000_mcu_device::move_l_das_dad_dfm, + &m68000_mcu_device::move_l_dais_dad_dfm, + &m68000_mcu_device::move_l_adr16_dad_dfm, + &m68000_mcu_device::move_l_adr32_dad_dfm, + &m68000_mcu_device::move_l_dpc_dad_dfm, + &m68000_mcu_device::move_l_dpci_dad_dfm, + &m68000_mcu_device::move_l_imm32_dad_dfm, + &m68000_mcu_device::move_l_ds_daid_dfm, + &m68000_mcu_device::move_l_as_daid_dfm, + &m68000_mcu_device::move_l_ais_daid_dfm, + &m68000_mcu_device::move_l_aips_daid_dfm, + &m68000_mcu_device::move_l_pais_daid_dfm, + &m68000_mcu_device::move_l_das_daid_dfm, + &m68000_mcu_device::move_l_dais_daid_dfm, + &m68000_mcu_device::move_l_adr16_daid_dfm, + &m68000_mcu_device::move_l_adr32_daid_dfm, + &m68000_mcu_device::move_l_dpc_daid_dfm, + &m68000_mcu_device::move_l_dpci_daid_dfm, + &m68000_mcu_device::move_l_imm32_daid_dfm, + &m68000_mcu_device::move_l_ds_adr16_dfm, + &m68000_mcu_device::move_l_as_adr16_dfm, + &m68000_mcu_device::move_l_ais_adr16_dfm, + &m68000_mcu_device::move_l_aips_adr16_dfm, + &m68000_mcu_device::move_l_pais_adr16_dfm, + &m68000_mcu_device::move_l_das_adr16_dfm, + &m68000_mcu_device::move_l_dais_adr16_dfm, + &m68000_mcu_device::move_l_adr16_adr16_dfm, + &m68000_mcu_device::move_l_adr32_adr16_dfm, + &m68000_mcu_device::move_l_dpc_adr16_dfm, + &m68000_mcu_device::move_l_dpci_adr16_dfm, + &m68000_mcu_device::move_l_imm32_adr16_dfm, + &m68000_mcu_device::move_l_ds_adr32_dfm, + &m68000_mcu_device::move_l_as_adr32_dfm, + &m68000_mcu_device::move_l_ais_adr32_dfm, + &m68000_mcu_device::move_l_aips_adr32_dfm, + &m68000_mcu_device::move_l_pais_adr32_dfm, + &m68000_mcu_device::move_l_das_adr32_dfm, + &m68000_mcu_device::move_l_dais_adr32_dfm, + &m68000_mcu_device::move_l_adr16_adr32_dfm, + &m68000_mcu_device::move_l_adr32_adr32_dfm, + &m68000_mcu_device::move_l_dpc_adr32_dfm, + &m68000_mcu_device::move_l_dpci_adr32_dfm, + &m68000_mcu_device::move_l_imm32_adr32_dfm, + &m68000_mcu_device::move_w_ds_dd_dfm, + &m68000_mcu_device::move_w_as_dd_dfm, + &m68000_mcu_device::move_w_ais_dd_dfm, + &m68000_mcu_device::move_w_aips_dd_dfm, + &m68000_mcu_device::move_w_pais_dd_dfm, + &m68000_mcu_device::move_w_das_dd_dfm, + &m68000_mcu_device::move_w_dais_dd_dfm, + &m68000_mcu_device::move_w_adr16_dd_dfm, + &m68000_mcu_device::move_w_adr32_dd_dfm, + &m68000_mcu_device::move_w_dpc_dd_dfm, + &m68000_mcu_device::move_w_dpci_dd_dfm, + &m68000_mcu_device::move_w_imm16_dd_dfm, + &m68000_mcu_device::movea_w_ds_ad_dfm, + &m68000_mcu_device::movea_w_as_ad_dfm, + &m68000_mcu_device::movea_w_ais_ad_dfm, + &m68000_mcu_device::movea_w_aips_ad_dfm, + &m68000_mcu_device::movea_w_pais_ad_dfm, + &m68000_mcu_device::movea_w_das_ad_dfm, + &m68000_mcu_device::movea_w_dais_ad_dfm, + &m68000_mcu_device::movea_w_adr16_ad_dfm, + &m68000_mcu_device::movea_w_adr32_ad_dfm, + &m68000_mcu_device::movea_w_dpc_ad_dfm, + &m68000_mcu_device::movea_w_dpci_ad_dfm, + &m68000_mcu_device::movea_w_imm16_ad_dfm, + &m68000_mcu_device::move_w_ds_aid_dfm, + &m68000_mcu_device::move_w_as_aid_dfm, + &m68000_mcu_device::move_w_ais_aid_dfm, + &m68000_mcu_device::move_w_aips_aid_dfm, + &m68000_mcu_device::move_w_pais_aid_dfm, + &m68000_mcu_device::move_w_das_aid_dfm, + &m68000_mcu_device::move_w_dais_aid_dfm, + &m68000_mcu_device::move_w_adr16_aid_dfm, + &m68000_mcu_device::move_w_adr32_aid_dfm, + &m68000_mcu_device::move_w_dpc_aid_dfm, + &m68000_mcu_device::move_w_dpci_aid_dfm, + &m68000_mcu_device::move_w_imm16_aid_dfm, + &m68000_mcu_device::move_w_ds_aipd_dfm, + &m68000_mcu_device::move_w_as_aipd_dfm, + &m68000_mcu_device::move_w_ais_aipd_dfm, + &m68000_mcu_device::move_w_aips_aipd_dfm, + &m68000_mcu_device::move_w_pais_aipd_dfm, + &m68000_mcu_device::move_w_das_aipd_dfm, + &m68000_mcu_device::move_w_dais_aipd_dfm, + &m68000_mcu_device::move_w_adr16_aipd_dfm, + &m68000_mcu_device::move_w_adr32_aipd_dfm, + &m68000_mcu_device::move_w_dpc_aipd_dfm, + &m68000_mcu_device::move_w_dpci_aipd_dfm, + &m68000_mcu_device::move_w_imm16_aipd_dfm, + &m68000_mcu_device::move_w_ds_paid_dfm, + &m68000_mcu_device::move_w_as_paid_dfm, + &m68000_mcu_device::move_w_ais_paid_dfm, + &m68000_mcu_device::move_w_aips_paid_dfm, + &m68000_mcu_device::move_w_pais_paid_dfm, + &m68000_mcu_device::move_w_das_paid_dfm, + &m68000_mcu_device::move_w_dais_paid_dfm, + &m68000_mcu_device::move_w_adr16_paid_dfm, + &m68000_mcu_device::move_w_adr32_paid_dfm, + &m68000_mcu_device::move_w_dpc_paid_dfm, + &m68000_mcu_device::move_w_dpci_paid_dfm, + &m68000_mcu_device::move_w_imm16_paid_dfm, + &m68000_mcu_device::move_w_ds_dad_dfm, + &m68000_mcu_device::move_w_as_dad_dfm, + &m68000_mcu_device::move_w_ais_dad_dfm, + &m68000_mcu_device::move_w_aips_dad_dfm, + &m68000_mcu_device::move_w_pais_dad_dfm, + &m68000_mcu_device::move_w_das_dad_dfm, + &m68000_mcu_device::move_w_dais_dad_dfm, + &m68000_mcu_device::move_w_adr16_dad_dfm, + &m68000_mcu_device::move_w_adr32_dad_dfm, + &m68000_mcu_device::move_w_dpc_dad_dfm, + &m68000_mcu_device::move_w_dpci_dad_dfm, + &m68000_mcu_device::move_w_imm16_dad_dfm, + &m68000_mcu_device::move_w_ds_daid_dfm, + &m68000_mcu_device::move_w_as_daid_dfm, + &m68000_mcu_device::move_w_ais_daid_dfm, + &m68000_mcu_device::move_w_aips_daid_dfm, + &m68000_mcu_device::move_w_pais_daid_dfm, + &m68000_mcu_device::move_w_das_daid_dfm, + &m68000_mcu_device::move_w_dais_daid_dfm, + &m68000_mcu_device::move_w_adr16_daid_dfm, + &m68000_mcu_device::move_w_adr32_daid_dfm, + &m68000_mcu_device::move_w_dpc_daid_dfm, + &m68000_mcu_device::move_w_dpci_daid_dfm, + &m68000_mcu_device::move_w_imm16_daid_dfm, + &m68000_mcu_device::move_w_ds_adr16_dfm, + &m68000_mcu_device::move_w_as_adr16_dfm, + &m68000_mcu_device::move_w_ais_adr16_dfm, + &m68000_mcu_device::move_w_aips_adr16_dfm, + &m68000_mcu_device::move_w_pais_adr16_dfm, + &m68000_mcu_device::move_w_das_adr16_dfm, + &m68000_mcu_device::move_w_dais_adr16_dfm, + &m68000_mcu_device::move_w_adr16_adr16_dfm, + &m68000_mcu_device::move_w_adr32_adr16_dfm, + &m68000_mcu_device::move_w_dpc_adr16_dfm, + &m68000_mcu_device::move_w_dpci_adr16_dfm, + &m68000_mcu_device::move_w_imm16_adr16_dfm, + &m68000_mcu_device::move_w_ds_adr32_dfm, + &m68000_mcu_device::move_w_as_adr32_dfm, + &m68000_mcu_device::move_w_ais_adr32_dfm, + &m68000_mcu_device::move_w_aips_adr32_dfm, + &m68000_mcu_device::move_w_pais_adr32_dfm, + &m68000_mcu_device::move_w_das_adr32_dfm, + &m68000_mcu_device::move_w_dais_adr32_dfm, + &m68000_mcu_device::move_w_adr16_adr32_dfm, + &m68000_mcu_device::move_w_adr32_adr32_dfm, + &m68000_mcu_device::move_w_dpc_adr32_dfm, + &m68000_mcu_device::move_w_dpci_adr32_dfm, + &m68000_mcu_device::move_w_imm16_adr32_dfm, + &m68000_mcu_device::negx_b_ds_dfm, + &m68000_mcu_device::negx_b_ais_dfm, + &m68000_mcu_device::negx_b_aips_dfm, + &m68000_mcu_device::negx_b_pais_dfm, + &m68000_mcu_device::negx_b_das_dfm, + &m68000_mcu_device::negx_b_dais_dfm, + &m68000_mcu_device::negx_b_adr16_dfm, + &m68000_mcu_device::negx_b_adr32_dfm, + &m68000_mcu_device::negx_w_ds_dfm, + &m68000_mcu_device::negx_w_ais_dfm, + &m68000_mcu_device::negx_w_aips_dfm, + &m68000_mcu_device::negx_w_pais_dfm, + &m68000_mcu_device::negx_w_das_dfm, + &m68000_mcu_device::negx_w_dais_dfm, + &m68000_mcu_device::negx_w_adr16_dfm, + &m68000_mcu_device::negx_w_adr32_dfm, + &m68000_mcu_device::negx_l_ds_dfm, + &m68000_mcu_device::negx_l_ais_dfm, + &m68000_mcu_device::negx_l_aips_dfm, + &m68000_mcu_device::negx_l_pais_dfm, + &m68000_mcu_device::negx_l_das_dfm, + &m68000_mcu_device::negx_l_dais_dfm, + &m68000_mcu_device::negx_l_adr16_dfm, + &m68000_mcu_device::negx_l_adr32_dfm, + &m68000_mcu_device::move_sr_ds_dfm, + &m68000_mcu_device::move_sr_ais_dfm, + &m68000_mcu_device::move_sr_aips_dfm, + &m68000_mcu_device::move_sr_pais_dfm, + &m68000_mcu_device::move_sr_das_dfm, + &m68000_mcu_device::move_sr_dais_dfm, + &m68000_mcu_device::move_sr_adr16_dfm, + &m68000_mcu_device::move_sr_adr32_dfm, + &m68000_mcu_device::chk_w_ds_dd_dfm, + &m68000_mcu_device::chk_w_ais_dd_dfm, + &m68000_mcu_device::chk_w_aips_dd_dfm, + &m68000_mcu_device::chk_w_pais_dd_dfm, + &m68000_mcu_device::chk_w_das_dd_dfm, + &m68000_mcu_device::chk_w_dais_dd_dfm, + &m68000_mcu_device::chk_w_adr16_dd_dfm, + &m68000_mcu_device::chk_w_adr32_dd_dfm, + &m68000_mcu_device::chk_w_dpc_dd_dfm, + &m68000_mcu_device::chk_w_dpci_dd_dfm, + &m68000_mcu_device::chk_w_imm16_dd_dfm, + &m68000_mcu_device::lea_ais_ad_dfm, + &m68000_mcu_device::lea_das_ad_dfm, + &m68000_mcu_device::lea_dais_ad_dfm, + &m68000_mcu_device::lea_adr16_ad_dfm, + &m68000_mcu_device::lea_adr32_ad_dfm, + &m68000_mcu_device::lea_dpc_ad_dfm, + &m68000_mcu_device::lea_dpci_ad_dfm, + &m68000_mcu_device::clr_b_ds_dfm, + &m68000_mcu_device::clr_b_ais_dfm, + &m68000_mcu_device::clr_b_aips_dfm, + &m68000_mcu_device::clr_b_pais_dfm, + &m68000_mcu_device::clr_b_das_dfm, + &m68000_mcu_device::clr_b_dais_dfm, + &m68000_mcu_device::clr_b_adr16_dfm, + &m68000_mcu_device::clr_b_adr32_dfm, + &m68000_mcu_device::clr_w_ds_dfm, + &m68000_mcu_device::clr_w_ais_dfm, + &m68000_mcu_device::clr_w_aips_dfm, + &m68000_mcu_device::clr_w_pais_dfm, + &m68000_mcu_device::clr_w_das_dfm, + &m68000_mcu_device::clr_w_dais_dfm, + &m68000_mcu_device::clr_w_adr16_dfm, + &m68000_mcu_device::clr_w_adr32_dfm, + &m68000_mcu_device::clr_l_ds_dfm, + &m68000_mcu_device::clr_l_ais_dfm, + &m68000_mcu_device::clr_l_aips_dfm, + &m68000_mcu_device::clr_l_pais_dfm, + &m68000_mcu_device::clr_l_das_dfm, + &m68000_mcu_device::clr_l_dais_dfm, + &m68000_mcu_device::clr_l_adr16_dfm, + &m68000_mcu_device::clr_l_adr32_dfm, + &m68000_mcu_device::neg_b_ds_dfm, + &m68000_mcu_device::neg_b_ais_dfm, + &m68000_mcu_device::neg_b_aips_dfm, + &m68000_mcu_device::neg_b_pais_dfm, + &m68000_mcu_device::neg_b_das_dfm, + &m68000_mcu_device::neg_b_dais_dfm, + &m68000_mcu_device::neg_b_adr16_dfm, + &m68000_mcu_device::neg_b_adr32_dfm, + &m68000_mcu_device::neg_w_ds_dfm, + &m68000_mcu_device::neg_w_ais_dfm, + &m68000_mcu_device::neg_w_aips_dfm, + &m68000_mcu_device::neg_w_pais_dfm, + &m68000_mcu_device::neg_w_das_dfm, + &m68000_mcu_device::neg_w_dais_dfm, + &m68000_mcu_device::neg_w_adr16_dfm, + &m68000_mcu_device::neg_w_adr32_dfm, + &m68000_mcu_device::neg_l_ds_dfm, + &m68000_mcu_device::neg_l_ais_dfm, + &m68000_mcu_device::neg_l_aips_dfm, + &m68000_mcu_device::neg_l_pais_dfm, + &m68000_mcu_device::neg_l_das_dfm, + &m68000_mcu_device::neg_l_dais_dfm, + &m68000_mcu_device::neg_l_adr16_dfm, + &m68000_mcu_device::neg_l_adr32_dfm, + &m68000_mcu_device::move_ds_ccr_dfm, + &m68000_mcu_device::move_ais_ccr_dfm, + &m68000_mcu_device::move_aips_ccr_dfm, + &m68000_mcu_device::move_pais_ccr_dfm, + &m68000_mcu_device::move_das_ccr_dfm, + &m68000_mcu_device::move_dais_ccr_dfm, + &m68000_mcu_device::move_adr16_ccr_dfm, + &m68000_mcu_device::move_adr32_ccr_dfm, + &m68000_mcu_device::move_dpc_ccr_dfm, + &m68000_mcu_device::move_dpci_ccr_dfm, + &m68000_mcu_device::move_imm8_ccr_dfm, + &m68000_mcu_device::not_b_ds_dfm, + &m68000_mcu_device::not_b_ais_dfm, + &m68000_mcu_device::not_b_aips_dfm, + &m68000_mcu_device::not_b_pais_dfm, + &m68000_mcu_device::not_b_das_dfm, + &m68000_mcu_device::not_b_dais_dfm, + &m68000_mcu_device::not_b_adr16_dfm, + &m68000_mcu_device::not_b_adr32_dfm, + &m68000_mcu_device::not_w_ds_dfm, + &m68000_mcu_device::not_w_ais_dfm, + &m68000_mcu_device::not_w_aips_dfm, + &m68000_mcu_device::not_w_pais_dfm, + &m68000_mcu_device::not_w_das_dfm, + &m68000_mcu_device::not_w_dais_dfm, + &m68000_mcu_device::not_w_adr16_dfm, + &m68000_mcu_device::not_w_adr32_dfm, + &m68000_mcu_device::not_l_ds_dfm, + &m68000_mcu_device::not_l_ais_dfm, + &m68000_mcu_device::not_l_aips_dfm, + &m68000_mcu_device::not_l_pais_dfm, + &m68000_mcu_device::not_l_das_dfm, + &m68000_mcu_device::not_l_dais_dfm, + &m68000_mcu_device::not_l_adr16_dfm, + &m68000_mcu_device::not_l_adr32_dfm, + &m68000_mcu_device::move_ds_sr_dfm, + &m68000_mcu_device::move_ais_sr_dfm, + &m68000_mcu_device::move_aips_sr_dfm, + &m68000_mcu_device::move_pais_sr_dfm, + &m68000_mcu_device::move_das_sr_dfm, + &m68000_mcu_device::move_dais_sr_dfm, + &m68000_mcu_device::move_adr16_sr_dfm, + &m68000_mcu_device::move_adr32_sr_dfm, + &m68000_mcu_device::move_dpc_sr_dfm, + &m68000_mcu_device::move_dpci_sr_dfm, + &m68000_mcu_device::move_i16u_sr_dfm, + &m68000_mcu_device::nbcd_b_ds_dfm, + &m68000_mcu_device::nbcd_b_ais_dfm, + &m68000_mcu_device::nbcd_b_aips_dfm, + &m68000_mcu_device::nbcd_b_pais_dfm, + &m68000_mcu_device::nbcd_b_das_dfm, + &m68000_mcu_device::nbcd_b_dais_dfm, + &m68000_mcu_device::nbcd_b_adr16_dfm, + &m68000_mcu_device::nbcd_b_adr32_dfm, + &m68000_mcu_device::swap_ds_dfm, + &m68000_mcu_device::pea_ais_dfm, + &m68000_mcu_device::pea_das_dfm, + &m68000_mcu_device::pea_dais_dfm, + &m68000_mcu_device::pea_adr16_dfm, + &m68000_mcu_device::pea_adr32_dfm, + &m68000_mcu_device::pea_dpc_dfm, + &m68000_mcu_device::pea_dpci_dfm, + &m68000_mcu_device::ext_w_ds_dfm, + &m68000_mcu_device::movem_w_list_ais_dfm, + &m68000_mcu_device::movem_w_listp_pais_dfm, + &m68000_mcu_device::movem_w_list_das_dfm, + &m68000_mcu_device::movem_w_list_dais_dfm, + &m68000_mcu_device::movem_w_list_adr16_dfm, + &m68000_mcu_device::movem_w_list_adr32_dfm, + &m68000_mcu_device::ext_l_ds_dfm, + &m68000_mcu_device::movem_l_list_ais_dfm, + &m68000_mcu_device::movem_l_listp_pais_dfm, + &m68000_mcu_device::movem_l_list_das_dfm, + &m68000_mcu_device::movem_l_list_dais_dfm, + &m68000_mcu_device::movem_l_list_adr16_dfm, + &m68000_mcu_device::movem_l_list_adr32_dfm, + &m68000_mcu_device::tst_b_ds_dfm, + &m68000_mcu_device::tst_b_ais_dfm, + &m68000_mcu_device::tst_b_aips_dfm, + &m68000_mcu_device::tst_b_pais_dfm, + &m68000_mcu_device::tst_b_das_dfm, + &m68000_mcu_device::tst_b_dais_dfm, + &m68000_mcu_device::tst_b_adr16_dfm, + &m68000_mcu_device::tst_b_adr32_dfm, + &m68000_mcu_device::tst_w_ds_dfm, + &m68000_mcu_device::tst_w_ais_dfm, + &m68000_mcu_device::tst_w_aips_dfm, + &m68000_mcu_device::tst_w_pais_dfm, + &m68000_mcu_device::tst_w_das_dfm, + &m68000_mcu_device::tst_w_dais_dfm, + &m68000_mcu_device::tst_w_adr16_dfm, + &m68000_mcu_device::tst_w_adr32_dfm, + &m68000_mcu_device::tst_l_ds_dfm, + &m68000_mcu_device::tst_l_ais_dfm, + &m68000_mcu_device::tst_l_aips_dfm, + &m68000_mcu_device::tst_l_pais_dfm, + &m68000_mcu_device::tst_l_das_dfm, + &m68000_mcu_device::tst_l_dais_dfm, + &m68000_mcu_device::tst_l_adr16_dfm, + &m68000_mcu_device::tst_l_adr32_dfm, + &m68000_mcu_device::tas_ds_dfm, + &m68000_mcu_device::tas_ais_dfm, + &m68000_mcu_device::tas_aips_dfm, + &m68000_mcu_device::tas_pais_dfm, + &m68000_mcu_device::tas_das_dfm, + &m68000_mcu_device::tas_dais_dfm, + &m68000_mcu_device::tas_adr16_dfm, + &m68000_mcu_device::tas_adr32_dfm, + &m68000_mcu_device::movem_w_ais_list_dfm, + &m68000_mcu_device::movem_w_aips_list_dfm, + &m68000_mcu_device::movem_w_das_list_dfm, + &m68000_mcu_device::movem_w_dais_list_dfm, + &m68000_mcu_device::movem_w_adr16_list_dfm, + &m68000_mcu_device::movem_w_adr32_list_dfm, + &m68000_mcu_device::movem_w_dpc_list_dfm, + &m68000_mcu_device::movem_w_dpci_list_dfm, + &m68000_mcu_device::movem_l_ais_list_dfm, + &m68000_mcu_device::movem_l_aips_list_dfm, + &m68000_mcu_device::movem_l_das_list_dfm, + &m68000_mcu_device::movem_l_dais_list_dfm, + &m68000_mcu_device::movem_l_adr16_list_dfm, + &m68000_mcu_device::movem_l_adr32_list_dfm, + &m68000_mcu_device::movem_l_dpc_list_dfm, + &m68000_mcu_device::movem_l_dpci_list_dfm, + &m68000_mcu_device::trap_imm4_dfm, + &m68000_mcu_device::link_as_imm16_dfm, + &m68000_mcu_device::unlk_as_dfm, + &m68000_mcu_device::move_as_usp_dfm, + &m68000_mcu_device::move_usp_as_dfm, + &m68000_mcu_device::reset_dfm, + &m68000_mcu_device::nop_dfm, + &m68000_mcu_device::stop_i16u_dfm, + &m68000_mcu_device::rte_dfm, + &m68000_mcu_device::rts_dfm, + &m68000_mcu_device::trapv_dfm, + &m68000_mcu_device::rtr_dfm, + &m68000_mcu_device::jsr_ais_dfm, + &m68000_mcu_device::jsr_das_dfm, + &m68000_mcu_device::jsr_dais_dfm, + &m68000_mcu_device::jsr_adr16_dfm, + &m68000_mcu_device::jsr_adr32_dfm, + &m68000_mcu_device::jsr_dpc_dfm, + &m68000_mcu_device::jsr_dpci_dfm, + &m68000_mcu_device::jmp_ais_dfm, + &m68000_mcu_device::jmp_das_dfm, + &m68000_mcu_device::jmp_dais_dfm, + &m68000_mcu_device::jmp_adr16_dfm, + &m68000_mcu_device::jmp_adr32_dfm, + &m68000_mcu_device::jmp_dpc_dfm, + &m68000_mcu_device::jmp_dpci_dfm, + &m68000_mcu_device::addq_b_imm3_ds_dfm, + &m68000_mcu_device::addq_b_imm3_ais_dfm, + &m68000_mcu_device::addq_b_imm3_aips_dfm, + &m68000_mcu_device::addq_b_imm3_pais_dfm, + &m68000_mcu_device::addq_b_imm3_das_dfm, + &m68000_mcu_device::addq_b_imm3_dais_dfm, + &m68000_mcu_device::addq_b_imm3_adr16_dfm, + &m68000_mcu_device::addq_b_imm3_adr32_dfm, + &m68000_mcu_device::addq_w_imm3_ds_dfm, + &m68000_mcu_device::addq_w_imm3_as_dfm, + &m68000_mcu_device::addq_w_imm3_ais_dfm, + &m68000_mcu_device::addq_w_imm3_aips_dfm, + &m68000_mcu_device::addq_w_imm3_pais_dfm, + &m68000_mcu_device::addq_w_imm3_das_dfm, + &m68000_mcu_device::addq_w_imm3_dais_dfm, + &m68000_mcu_device::addq_w_imm3_adr16_dfm, + &m68000_mcu_device::addq_w_imm3_adr32_dfm, + &m68000_mcu_device::addq_l_imm3_ds_dfm, + &m68000_mcu_device::addq_l_imm3_as_dfm, + &m68000_mcu_device::addq_l_imm3_ais_dfm, + &m68000_mcu_device::addq_l_imm3_aips_dfm, + &m68000_mcu_device::addq_l_imm3_pais_dfm, + &m68000_mcu_device::addq_l_imm3_das_dfm, + &m68000_mcu_device::addq_l_imm3_dais_dfm, + &m68000_mcu_device::addq_l_imm3_adr16_dfm, + &m68000_mcu_device::addq_l_imm3_adr32_dfm, + &m68000_mcu_device::st_ds_dfm, + &m68000_mcu_device::dbt_ds_rel16_dfm, + &m68000_mcu_device::st_ais_dfm, + &m68000_mcu_device::st_aips_dfm, + &m68000_mcu_device::st_pais_dfm, + &m68000_mcu_device::st_das_dfm, + &m68000_mcu_device::st_dais_dfm, + &m68000_mcu_device::st_adr16_dfm, + &m68000_mcu_device::st_adr32_dfm, + &m68000_mcu_device::subq_b_imm3_ds_dfm, + &m68000_mcu_device::subq_b_imm3_ais_dfm, + &m68000_mcu_device::subq_b_imm3_aips_dfm, + &m68000_mcu_device::subq_b_imm3_pais_dfm, + &m68000_mcu_device::subq_b_imm3_das_dfm, + &m68000_mcu_device::subq_b_imm3_dais_dfm, + &m68000_mcu_device::subq_b_imm3_adr16_dfm, + &m68000_mcu_device::subq_b_imm3_adr32_dfm, + &m68000_mcu_device::subq_w_imm3_ds_dfm, + &m68000_mcu_device::subq_w_imm3_as_dfm, + &m68000_mcu_device::subq_w_imm3_ais_dfm, + &m68000_mcu_device::subq_w_imm3_aips_dfm, + &m68000_mcu_device::subq_w_imm3_pais_dfm, + &m68000_mcu_device::subq_w_imm3_das_dfm, + &m68000_mcu_device::subq_w_imm3_dais_dfm, + &m68000_mcu_device::subq_w_imm3_adr16_dfm, + &m68000_mcu_device::subq_w_imm3_adr32_dfm, + &m68000_mcu_device::subq_l_imm3_ds_dfm, + &m68000_mcu_device::subq_l_imm3_as_dfm, + &m68000_mcu_device::subq_l_imm3_ais_dfm, + &m68000_mcu_device::subq_l_imm3_aips_dfm, + &m68000_mcu_device::subq_l_imm3_pais_dfm, + &m68000_mcu_device::subq_l_imm3_das_dfm, + &m68000_mcu_device::subq_l_imm3_dais_dfm, + &m68000_mcu_device::subq_l_imm3_adr16_dfm, + &m68000_mcu_device::subq_l_imm3_adr32_dfm, + &m68000_mcu_device::sf_ds_dfm, + &m68000_mcu_device::dbra_ds_rel16_dfm, + &m68000_mcu_device::sf_ais_dfm, + &m68000_mcu_device::sf_aips_dfm, + &m68000_mcu_device::sf_pais_dfm, + &m68000_mcu_device::sf_das_dfm, + &m68000_mcu_device::sf_dais_dfm, + &m68000_mcu_device::sf_adr16_dfm, + &m68000_mcu_device::sf_adr32_dfm, + &m68000_mcu_device::shi_ds_dfm, + &m68000_mcu_device::dbhi_ds_rel16_dfm, + &m68000_mcu_device::shi_ais_dfm, + &m68000_mcu_device::shi_aips_dfm, + &m68000_mcu_device::shi_pais_dfm, + &m68000_mcu_device::shi_das_dfm, + &m68000_mcu_device::shi_dais_dfm, + &m68000_mcu_device::shi_adr16_dfm, + &m68000_mcu_device::shi_adr32_dfm, + &m68000_mcu_device::sls_ds_dfm, + &m68000_mcu_device::dbls_ds_rel16_dfm, + &m68000_mcu_device::sls_ais_dfm, + &m68000_mcu_device::sls_aips_dfm, + &m68000_mcu_device::sls_pais_dfm, + &m68000_mcu_device::sls_das_dfm, + &m68000_mcu_device::sls_dais_dfm, + &m68000_mcu_device::sls_adr16_dfm, + &m68000_mcu_device::sls_adr32_dfm, + &m68000_mcu_device::scc_ds_dfm, + &m68000_mcu_device::dbcc_ds_rel16_dfm, + &m68000_mcu_device::scc_ais_dfm, + &m68000_mcu_device::scc_aips_dfm, + &m68000_mcu_device::scc_pais_dfm, + &m68000_mcu_device::scc_das_dfm, + &m68000_mcu_device::scc_dais_dfm, + &m68000_mcu_device::scc_adr16_dfm, + &m68000_mcu_device::scc_adr32_dfm, + &m68000_mcu_device::scs_ds_dfm, + &m68000_mcu_device::dbcs_ds_rel16_dfm, + &m68000_mcu_device::scs_ais_dfm, + &m68000_mcu_device::scs_aips_dfm, + &m68000_mcu_device::scs_pais_dfm, + &m68000_mcu_device::scs_das_dfm, + &m68000_mcu_device::scs_dais_dfm, + &m68000_mcu_device::scs_adr16_dfm, + &m68000_mcu_device::scs_adr32_dfm, + &m68000_mcu_device::sne_ds_dfm, + &m68000_mcu_device::dbne_ds_rel16_dfm, + &m68000_mcu_device::sne_ais_dfm, + &m68000_mcu_device::sne_aips_dfm, + &m68000_mcu_device::sne_pais_dfm, + &m68000_mcu_device::sne_das_dfm, + &m68000_mcu_device::sne_dais_dfm, + &m68000_mcu_device::sne_adr16_dfm, + &m68000_mcu_device::sne_adr32_dfm, + &m68000_mcu_device::seq_ds_dfm, + &m68000_mcu_device::dbeq_ds_rel16_dfm, + &m68000_mcu_device::seq_ais_dfm, + &m68000_mcu_device::seq_aips_dfm, + &m68000_mcu_device::seq_pais_dfm, + &m68000_mcu_device::seq_das_dfm, + &m68000_mcu_device::seq_dais_dfm, + &m68000_mcu_device::seq_adr16_dfm, + &m68000_mcu_device::seq_adr32_dfm, + &m68000_mcu_device::svc_ds_dfm, + &m68000_mcu_device::dbvc_ds_rel16_dfm, + &m68000_mcu_device::svc_ais_dfm, + &m68000_mcu_device::svc_aips_dfm, + &m68000_mcu_device::svc_pais_dfm, + &m68000_mcu_device::svc_das_dfm, + &m68000_mcu_device::svc_dais_dfm, + &m68000_mcu_device::svc_adr16_dfm, + &m68000_mcu_device::svc_adr32_dfm, + &m68000_mcu_device::svs_ds_dfm, + &m68000_mcu_device::dbvs_ds_rel16_dfm, + &m68000_mcu_device::svs_ais_dfm, + &m68000_mcu_device::svs_aips_dfm, + &m68000_mcu_device::svs_pais_dfm, + &m68000_mcu_device::svs_das_dfm, + &m68000_mcu_device::svs_dais_dfm, + &m68000_mcu_device::svs_adr16_dfm, + &m68000_mcu_device::svs_adr32_dfm, + &m68000_mcu_device::spl_ds_dfm, + &m68000_mcu_device::dbpl_ds_rel16_dfm, + &m68000_mcu_device::spl_ais_dfm, + &m68000_mcu_device::spl_aips_dfm, + &m68000_mcu_device::spl_pais_dfm, + &m68000_mcu_device::spl_das_dfm, + &m68000_mcu_device::spl_dais_dfm, + &m68000_mcu_device::spl_adr16_dfm, + &m68000_mcu_device::spl_adr32_dfm, + &m68000_mcu_device::smi_ds_dfm, + &m68000_mcu_device::dbmi_ds_rel16_dfm, + &m68000_mcu_device::smi_ais_dfm, + &m68000_mcu_device::smi_aips_dfm, + &m68000_mcu_device::smi_pais_dfm, + &m68000_mcu_device::smi_das_dfm, + &m68000_mcu_device::smi_dais_dfm, + &m68000_mcu_device::smi_adr16_dfm, + &m68000_mcu_device::smi_adr32_dfm, + &m68000_mcu_device::sge_ds_dfm, + &m68000_mcu_device::dbge_ds_rel16_dfm, + &m68000_mcu_device::sge_ais_dfm, + &m68000_mcu_device::sge_aips_dfm, + &m68000_mcu_device::sge_pais_dfm, + &m68000_mcu_device::sge_das_dfm, + &m68000_mcu_device::sge_dais_dfm, + &m68000_mcu_device::sge_adr16_dfm, + &m68000_mcu_device::sge_adr32_dfm, + &m68000_mcu_device::slt_ds_dfm, + &m68000_mcu_device::dblt_ds_rel16_dfm, + &m68000_mcu_device::slt_ais_dfm, + &m68000_mcu_device::slt_aips_dfm, + &m68000_mcu_device::slt_pais_dfm, + &m68000_mcu_device::slt_das_dfm, + &m68000_mcu_device::slt_dais_dfm, + &m68000_mcu_device::slt_adr16_dfm, + &m68000_mcu_device::slt_adr32_dfm, + &m68000_mcu_device::sgt_ds_dfm, + &m68000_mcu_device::dbgt_ds_rel16_dfm, + &m68000_mcu_device::sgt_ais_dfm, + &m68000_mcu_device::sgt_aips_dfm, + &m68000_mcu_device::sgt_pais_dfm, + &m68000_mcu_device::sgt_das_dfm, + &m68000_mcu_device::sgt_dais_dfm, + &m68000_mcu_device::sgt_adr16_dfm, + &m68000_mcu_device::sgt_adr32_dfm, + &m68000_mcu_device::sle_ds_dfm, + &m68000_mcu_device::dble_ds_rel16_dfm, + &m68000_mcu_device::sle_ais_dfm, + &m68000_mcu_device::sle_aips_dfm, + &m68000_mcu_device::sle_pais_dfm, + &m68000_mcu_device::sle_das_dfm, + &m68000_mcu_device::sle_dais_dfm, + &m68000_mcu_device::sle_adr16_dfm, + &m68000_mcu_device::sle_adr32_dfm, + &m68000_mcu_device::bra_rel16_dfm, + &m68000_mcu_device::bra_rel8_dfm, + &m68000_mcu_device::bsr_rel16_dfm, + &m68000_mcu_device::bsr_rel8_dfm, + &m68000_mcu_device::bhi_rel16_dfm, + &m68000_mcu_device::bhi_rel8_dfm, + &m68000_mcu_device::bls_rel16_dfm, + &m68000_mcu_device::bls_rel8_dfm, + &m68000_mcu_device::bcc_rel16_dfm, + &m68000_mcu_device::bcc_rel8_dfm, + &m68000_mcu_device::bcs_rel16_dfm, + &m68000_mcu_device::bcs_rel8_dfm, + &m68000_mcu_device::bne_rel16_dfm, + &m68000_mcu_device::bne_rel8_dfm, + &m68000_mcu_device::beq_rel16_dfm, + &m68000_mcu_device::beq_rel8_dfm, + &m68000_mcu_device::bvc_rel16_dfm, + &m68000_mcu_device::bvc_rel8_dfm, + &m68000_mcu_device::bvs_rel16_dfm, + &m68000_mcu_device::bvs_rel8_dfm, + &m68000_mcu_device::bpl_rel16_dfm, + &m68000_mcu_device::bpl_rel8_dfm, + &m68000_mcu_device::bmi_rel16_dfm, + &m68000_mcu_device::bmi_rel8_dfm, + &m68000_mcu_device::bge_rel16_dfm, + &m68000_mcu_device::bge_rel8_dfm, + &m68000_mcu_device::blt_rel16_dfm, + &m68000_mcu_device::blt_rel8_dfm, + &m68000_mcu_device::bgt_rel16_dfm, + &m68000_mcu_device::bgt_rel8_dfm, + &m68000_mcu_device::ble_rel16_dfm, + &m68000_mcu_device::ble_rel8_dfm, + &m68000_mcu_device::moveq_imm8o_dd_dfm, + &m68000_mcu_device::or_b_ds_dd_dfm, + &m68000_mcu_device::or_b_ais_dd_dfm, + &m68000_mcu_device::or_b_aips_dd_dfm, + &m68000_mcu_device::or_b_pais_dd_dfm, + &m68000_mcu_device::or_b_das_dd_dfm, + &m68000_mcu_device::or_b_dais_dd_dfm, + &m68000_mcu_device::or_b_adr16_dd_dfm, + &m68000_mcu_device::or_b_adr32_dd_dfm, + &m68000_mcu_device::or_b_dpc_dd_dfm, + &m68000_mcu_device::or_b_dpci_dd_dfm, + &m68000_mcu_device::or_b_imm8_dd_dfm, + &m68000_mcu_device::or_w_ds_dd_dfm, + &m68000_mcu_device::or_w_ais_dd_dfm, + &m68000_mcu_device::or_w_aips_dd_dfm, + &m68000_mcu_device::or_w_pais_dd_dfm, + &m68000_mcu_device::or_w_das_dd_dfm, + &m68000_mcu_device::or_w_dais_dd_dfm, + &m68000_mcu_device::or_w_adr16_dd_dfm, + &m68000_mcu_device::or_w_adr32_dd_dfm, + &m68000_mcu_device::or_w_dpc_dd_dfm, + &m68000_mcu_device::or_w_dpci_dd_dfm, + &m68000_mcu_device::or_w_imm16_dd_dfm, + &m68000_mcu_device::or_l_ds_dd_dfm, + &m68000_mcu_device::or_l_ais_dd_dfm, + &m68000_mcu_device::or_l_aips_dd_dfm, + &m68000_mcu_device::or_l_pais_dd_dfm, + &m68000_mcu_device::or_l_das_dd_dfm, + &m68000_mcu_device::or_l_dais_dd_dfm, + &m68000_mcu_device::or_l_adr16_dd_dfm, + &m68000_mcu_device::or_l_adr32_dd_dfm, + &m68000_mcu_device::or_l_dpc_dd_dfm, + &m68000_mcu_device::or_l_dpci_dd_dfm, + &m68000_mcu_device::or_l_imm32_dd_dfm, + &m68000_mcu_device::divu_w_ds_dd_dfm, + &m68000_mcu_device::divu_w_ais_dd_dfm, + &m68000_mcu_device::divu_w_aips_dd_dfm, + &m68000_mcu_device::divu_w_pais_dd_dfm, + &m68000_mcu_device::divu_w_das_dd_dfm, + &m68000_mcu_device::divu_w_dais_dd_dfm, + &m68000_mcu_device::divu_w_adr16_dd_dfm, + &m68000_mcu_device::divu_w_adr32_dd_dfm, + &m68000_mcu_device::divu_w_dpc_dd_dfm, + &m68000_mcu_device::divu_w_dpci_dd_dfm, + &m68000_mcu_device::divu_w_imm16_dd_dfm, + &m68000_mcu_device::sbcd_ds_dd_dfm, + &m68000_mcu_device::sbcd_pais_paid_dfm, + &m68000_mcu_device::or_b_dd_ais_dfm, + &m68000_mcu_device::or_b_dd_aips_dfm, + &m68000_mcu_device::or_b_dd_pais_dfm, + &m68000_mcu_device::or_b_dd_das_dfm, + &m68000_mcu_device::or_b_dd_dais_dfm, + &m68000_mcu_device::or_b_dd_adr16_dfm, + &m68000_mcu_device::or_b_dd_adr32_dfm, + &m68000_mcu_device::or_w_dd_ais_dfm, + &m68000_mcu_device::or_w_dd_aips_dfm, + &m68000_mcu_device::or_w_dd_pais_dfm, + &m68000_mcu_device::or_w_dd_das_dfm, + &m68000_mcu_device::or_w_dd_dais_dfm, + &m68000_mcu_device::or_w_dd_adr16_dfm, + &m68000_mcu_device::or_w_dd_adr32_dfm, + &m68000_mcu_device::or_l_dd_ais_dfm, + &m68000_mcu_device::or_l_dd_aips_dfm, + &m68000_mcu_device::or_l_dd_pais_dfm, + &m68000_mcu_device::or_l_dd_das_dfm, + &m68000_mcu_device::or_l_dd_dais_dfm, + &m68000_mcu_device::or_l_dd_adr16_dfm, + &m68000_mcu_device::or_l_dd_adr32_dfm, + &m68000_mcu_device::divs_w_ds_dd_dfm, + &m68000_mcu_device::divs_w_ais_dd_dfm, + &m68000_mcu_device::divs_w_aips_dd_dfm, + &m68000_mcu_device::divs_w_pais_dd_dfm, + &m68000_mcu_device::divs_w_das_dd_dfm, + &m68000_mcu_device::divs_w_dais_dd_dfm, + &m68000_mcu_device::divs_w_adr16_dd_dfm, + &m68000_mcu_device::divs_w_adr32_dd_dfm, + &m68000_mcu_device::divs_w_dpc_dd_dfm, + &m68000_mcu_device::divs_w_dpci_dd_dfm, + &m68000_mcu_device::divs_w_imm16_dd_dfm, + &m68000_mcu_device::sub_b_ds_dd_dfm, + &m68000_mcu_device::sub_b_ais_dd_dfm, + &m68000_mcu_device::sub_b_aips_dd_dfm, + &m68000_mcu_device::sub_b_pais_dd_dfm, + &m68000_mcu_device::sub_b_das_dd_dfm, + &m68000_mcu_device::sub_b_dais_dd_dfm, + &m68000_mcu_device::sub_b_adr16_dd_dfm, + &m68000_mcu_device::sub_b_adr32_dd_dfm, + &m68000_mcu_device::sub_b_dpc_dd_dfm, + &m68000_mcu_device::sub_b_dpci_dd_dfm, + &m68000_mcu_device::sub_b_imm8_dd_dfm, + &m68000_mcu_device::sub_w_ds_dd_dfm, + &m68000_mcu_device::sub_w_as_dd_dfm, + &m68000_mcu_device::sub_w_ais_dd_dfm, + &m68000_mcu_device::sub_w_aips_dd_dfm, + &m68000_mcu_device::sub_w_pais_dd_dfm, + &m68000_mcu_device::sub_w_das_dd_dfm, + &m68000_mcu_device::sub_w_dais_dd_dfm, + &m68000_mcu_device::sub_w_adr16_dd_dfm, + &m68000_mcu_device::sub_w_adr32_dd_dfm, + &m68000_mcu_device::sub_w_dpc_dd_dfm, + &m68000_mcu_device::sub_w_dpci_dd_dfm, + &m68000_mcu_device::sub_w_imm16_dd_dfm, + &m68000_mcu_device::sub_l_ds_dd_dfm, + &m68000_mcu_device::sub_l_as_dd_dfm, + &m68000_mcu_device::sub_l_ais_dd_dfm, + &m68000_mcu_device::sub_l_aips_dd_dfm, + &m68000_mcu_device::sub_l_pais_dd_dfm, + &m68000_mcu_device::sub_l_das_dd_dfm, + &m68000_mcu_device::sub_l_dais_dd_dfm, + &m68000_mcu_device::sub_l_adr16_dd_dfm, + &m68000_mcu_device::sub_l_adr32_dd_dfm, + &m68000_mcu_device::sub_l_dpc_dd_dfm, + &m68000_mcu_device::sub_l_dpci_dd_dfm, + &m68000_mcu_device::sub_l_imm32_dd_dfm, + &m68000_mcu_device::suba_w_ds_ad_dfm, + &m68000_mcu_device::suba_w_as_ad_dfm, + &m68000_mcu_device::suba_w_ais_ad_dfm, + &m68000_mcu_device::suba_w_aips_ad_dfm, + &m68000_mcu_device::suba_w_pais_ad_dfm, + &m68000_mcu_device::suba_w_das_ad_dfm, + &m68000_mcu_device::suba_w_dais_ad_dfm, + &m68000_mcu_device::suba_w_adr16_ad_dfm, + &m68000_mcu_device::suba_w_adr32_ad_dfm, + &m68000_mcu_device::suba_w_dpc_ad_dfm, + &m68000_mcu_device::suba_w_dpci_ad_dfm, + &m68000_mcu_device::suba_w_imm16_ad_dfm, + &m68000_mcu_device::subx_b_ds_dd_dfm, + &m68000_mcu_device::subx_b_pais_paid_dfm, + &m68000_mcu_device::sub_b_dd_ais_dfm, + &m68000_mcu_device::sub_b_dd_aips_dfm, + &m68000_mcu_device::sub_b_dd_pais_dfm, + &m68000_mcu_device::sub_b_dd_das_dfm, + &m68000_mcu_device::sub_b_dd_dais_dfm, + &m68000_mcu_device::sub_b_dd_adr16_dfm, + &m68000_mcu_device::sub_b_dd_adr32_dfm, + &m68000_mcu_device::subx_w_ds_dd_dfm, + &m68000_mcu_device::subx_w_pais_paid_dfm, + &m68000_mcu_device::sub_w_dd_ais_dfm, + &m68000_mcu_device::sub_w_dd_aips_dfm, + &m68000_mcu_device::sub_w_dd_pais_dfm, + &m68000_mcu_device::sub_w_dd_das_dfm, + &m68000_mcu_device::sub_w_dd_dais_dfm, + &m68000_mcu_device::sub_w_dd_adr16_dfm, + &m68000_mcu_device::sub_w_dd_adr32_dfm, + &m68000_mcu_device::subx_l_ds_dd_dfm, + &m68000_mcu_device::subx_l_pais_paid_dfm, + &m68000_mcu_device::sub_l_dd_ais_dfm, + &m68000_mcu_device::sub_l_dd_aips_dfm, + &m68000_mcu_device::sub_l_dd_pais_dfm, + &m68000_mcu_device::sub_l_dd_das_dfm, + &m68000_mcu_device::sub_l_dd_dais_dfm, + &m68000_mcu_device::sub_l_dd_adr16_dfm, + &m68000_mcu_device::sub_l_dd_adr32_dfm, + &m68000_mcu_device::suba_l_ds_ad_dfm, + &m68000_mcu_device::suba_l_as_ad_dfm, + &m68000_mcu_device::suba_l_ais_ad_dfm, + &m68000_mcu_device::suba_l_aips_ad_dfm, + &m68000_mcu_device::suba_l_pais_ad_dfm, + &m68000_mcu_device::suba_l_das_ad_dfm, + &m68000_mcu_device::suba_l_dais_ad_dfm, + &m68000_mcu_device::suba_l_adr16_ad_dfm, + &m68000_mcu_device::suba_l_adr32_ad_dfm, + &m68000_mcu_device::suba_l_dpc_ad_dfm, + &m68000_mcu_device::suba_l_dpci_ad_dfm, + &m68000_mcu_device::suba_l_imm32_ad_dfm, + &m68000_mcu_device::cmp_b_ds_dd_dfm, + &m68000_mcu_device::cmp_b_ais_dd_dfm, + &m68000_mcu_device::cmp_b_aips_dd_dfm, + &m68000_mcu_device::cmp_b_pais_dd_dfm, + &m68000_mcu_device::cmp_b_das_dd_dfm, + &m68000_mcu_device::cmp_b_dais_dd_dfm, + &m68000_mcu_device::cmp_b_adr16_dd_dfm, + &m68000_mcu_device::cmp_b_adr32_dd_dfm, + &m68000_mcu_device::cmp_b_dpc_dd_dfm, + &m68000_mcu_device::cmp_b_dpci_dd_dfm, + &m68000_mcu_device::cmp_b_imm8_dd_dfm, + &m68000_mcu_device::cmp_w_ds_dd_dfm, + &m68000_mcu_device::cmp_w_as_dd_dfm, + &m68000_mcu_device::cmp_w_ais_dd_dfm, + &m68000_mcu_device::cmp_w_aips_dd_dfm, + &m68000_mcu_device::cmp_w_pais_dd_dfm, + &m68000_mcu_device::cmp_w_das_dd_dfm, + &m68000_mcu_device::cmp_w_dais_dd_dfm, + &m68000_mcu_device::cmp_w_adr16_dd_dfm, + &m68000_mcu_device::cmp_w_adr32_dd_dfm, + &m68000_mcu_device::cmp_w_dpc_dd_dfm, + &m68000_mcu_device::cmp_w_dpci_dd_dfm, + &m68000_mcu_device::cmp_w_imm16_dd_dfm, + &m68000_mcu_device::cmp_l_ds_dd_dfm, + &m68000_mcu_device::cmp_l_as_dd_dfm, + &m68000_mcu_device::cmp_l_ais_dd_dfm, + &m68000_mcu_device::cmp_l_aips_dd_dfm, + &m68000_mcu_device::cmp_l_pais_dd_dfm, + &m68000_mcu_device::cmp_l_das_dd_dfm, + &m68000_mcu_device::cmp_l_dais_dd_dfm, + &m68000_mcu_device::cmp_l_adr16_dd_dfm, + &m68000_mcu_device::cmp_l_adr32_dd_dfm, + &m68000_mcu_device::cmp_l_dpc_dd_dfm, + &m68000_mcu_device::cmp_l_dpci_dd_dfm, + &m68000_mcu_device::cmp_l_imm32_dd_dfm, + &m68000_mcu_device::cmpa_w_ds_ad_dfm, + &m68000_mcu_device::cmpa_w_as_ad_dfm, + &m68000_mcu_device::cmpa_w_ais_ad_dfm, + &m68000_mcu_device::cmpa_w_aips_ad_dfm, + &m68000_mcu_device::cmpa_w_pais_ad_dfm, + &m68000_mcu_device::cmpa_w_das_ad_dfm, + &m68000_mcu_device::cmpa_w_dais_ad_dfm, + &m68000_mcu_device::cmpa_w_adr16_ad_dfm, + &m68000_mcu_device::cmpa_w_adr32_ad_dfm, + &m68000_mcu_device::cmpa_w_dpc_ad_dfm, + &m68000_mcu_device::cmpa_w_dpci_ad_dfm, + &m68000_mcu_device::cmpa_w_imm16_ad_dfm, + &m68000_mcu_device::eor_b_dd_ds_dfm, + &m68000_mcu_device::cmpm_b_aips_aipd_dfm, + &m68000_mcu_device::eor_b_dd_ais_dfm, + &m68000_mcu_device::eor_b_dd_aips_dfm, + &m68000_mcu_device::eor_b_dd_pais_dfm, + &m68000_mcu_device::eor_b_dd_das_dfm, + &m68000_mcu_device::eor_b_dd_dais_dfm, + &m68000_mcu_device::eor_b_dd_adr16_dfm, + &m68000_mcu_device::eor_b_dd_adr32_dfm, + &m68000_mcu_device::eor_w_dd_ds_dfm, + &m68000_mcu_device::cmpm_w_aips_aipd_dfm, + &m68000_mcu_device::eor_w_dd_ais_dfm, + &m68000_mcu_device::eor_w_dd_aips_dfm, + &m68000_mcu_device::eor_w_dd_pais_dfm, + &m68000_mcu_device::eor_w_dd_das_dfm, + &m68000_mcu_device::eor_w_dd_dais_dfm, + &m68000_mcu_device::eor_w_dd_adr16_dfm, + &m68000_mcu_device::eor_w_dd_adr32_dfm, + &m68000_mcu_device::eor_l_dd_ds_dfm, + &m68000_mcu_device::cmpm_l_aips_aipd_dfm, + &m68000_mcu_device::eor_l_dd_ais_dfm, + &m68000_mcu_device::eor_l_dd_aips_dfm, + &m68000_mcu_device::eor_l_dd_pais_dfm, + &m68000_mcu_device::eor_l_dd_das_dfm, + &m68000_mcu_device::eor_l_dd_dais_dfm, + &m68000_mcu_device::eor_l_dd_adr16_dfm, + &m68000_mcu_device::eor_l_dd_adr32_dfm, + &m68000_mcu_device::cmpa_l_ds_ad_dfm, + &m68000_mcu_device::cmpa_l_as_ad_dfm, + &m68000_mcu_device::cmpa_l_ais_ad_dfm, + &m68000_mcu_device::cmpa_l_aips_ad_dfm, + &m68000_mcu_device::cmpa_l_pais_ad_dfm, + &m68000_mcu_device::cmpa_l_das_ad_dfm, + &m68000_mcu_device::cmpa_l_dais_ad_dfm, + &m68000_mcu_device::cmpa_l_adr16_ad_dfm, + &m68000_mcu_device::cmpa_l_adr32_ad_dfm, + &m68000_mcu_device::cmpa_l_dpc_ad_dfm, + &m68000_mcu_device::cmpa_l_dpci_ad_dfm, + &m68000_mcu_device::cmpa_l_imm32_ad_dfm, + &m68000_mcu_device::and_b_ds_dd_dfm, + &m68000_mcu_device::and_b_ais_dd_dfm, + &m68000_mcu_device::and_b_aips_dd_dfm, + &m68000_mcu_device::and_b_pais_dd_dfm, + &m68000_mcu_device::and_b_das_dd_dfm, + &m68000_mcu_device::and_b_dais_dd_dfm, + &m68000_mcu_device::and_b_adr16_dd_dfm, + &m68000_mcu_device::and_b_adr32_dd_dfm, + &m68000_mcu_device::and_b_dpc_dd_dfm, + &m68000_mcu_device::and_b_dpci_dd_dfm, + &m68000_mcu_device::and_b_imm8_dd_dfm, + &m68000_mcu_device::and_w_ds_dd_dfm, + &m68000_mcu_device::and_w_ais_dd_dfm, + &m68000_mcu_device::and_w_aips_dd_dfm, + &m68000_mcu_device::and_w_pais_dd_dfm, + &m68000_mcu_device::and_w_das_dd_dfm, + &m68000_mcu_device::and_w_dais_dd_dfm, + &m68000_mcu_device::and_w_adr16_dd_dfm, + &m68000_mcu_device::and_w_adr32_dd_dfm, + &m68000_mcu_device::and_w_dpc_dd_dfm, + &m68000_mcu_device::and_w_dpci_dd_dfm, + &m68000_mcu_device::and_w_imm16_dd_dfm, + &m68000_mcu_device::and_l_ds_dd_dfm, + &m68000_mcu_device::and_l_ais_dd_dfm, + &m68000_mcu_device::and_l_aips_dd_dfm, + &m68000_mcu_device::and_l_pais_dd_dfm, + &m68000_mcu_device::and_l_das_dd_dfm, + &m68000_mcu_device::and_l_dais_dd_dfm, + &m68000_mcu_device::and_l_adr16_dd_dfm, + &m68000_mcu_device::and_l_adr32_dd_dfm, + &m68000_mcu_device::and_l_dpc_dd_dfm, + &m68000_mcu_device::and_l_dpci_dd_dfm, + &m68000_mcu_device::and_l_imm32_dd_dfm, + &m68000_mcu_device::mulu_w_ds_dd_dfm, + &m68000_mcu_device::mulu_w_ais_dd_dfm, + &m68000_mcu_device::mulu_w_aips_dd_dfm, + &m68000_mcu_device::mulu_w_pais_dd_dfm, + &m68000_mcu_device::mulu_w_das_dd_dfm, + &m68000_mcu_device::mulu_w_dais_dd_dfm, + &m68000_mcu_device::mulu_w_adr16_dd_dfm, + &m68000_mcu_device::mulu_w_adr32_dd_dfm, + &m68000_mcu_device::mulu_w_dpc_dd_dfm, + &m68000_mcu_device::mulu_w_dpci_dd_dfm, + &m68000_mcu_device::mulu_w_imm16_dd_dfm, + &m68000_mcu_device::abcd_ds_dd_dfm, + &m68000_mcu_device::abcd_pais_paid_dfm, + &m68000_mcu_device::and_b_dd_ais_dfm, + &m68000_mcu_device::and_b_dd_aips_dfm, + &m68000_mcu_device::and_b_dd_pais_dfm, + &m68000_mcu_device::and_b_dd_das_dfm, + &m68000_mcu_device::and_b_dd_dais_dfm, + &m68000_mcu_device::and_b_dd_adr16_dfm, + &m68000_mcu_device::and_b_dd_adr32_dfm, + &m68000_mcu_device::exg_dd_ds_dfm, + &m68000_mcu_device::exg_ad_as_dfm, + &m68000_mcu_device::and_w_dd_ais_dfm, + &m68000_mcu_device::and_w_dd_aips_dfm, + &m68000_mcu_device::and_w_dd_pais_dfm, + &m68000_mcu_device::and_w_dd_das_dfm, + &m68000_mcu_device::and_w_dd_dais_dfm, + &m68000_mcu_device::and_w_dd_adr16_dfm, + &m68000_mcu_device::and_w_dd_adr32_dfm, + &m68000_mcu_device::exg_dd_as_dfm, + &m68000_mcu_device::and_l_dd_ais_dfm, + &m68000_mcu_device::and_l_dd_aips_dfm, + &m68000_mcu_device::and_l_dd_pais_dfm, + &m68000_mcu_device::and_l_dd_das_dfm, + &m68000_mcu_device::and_l_dd_dais_dfm, + &m68000_mcu_device::and_l_dd_adr16_dfm, + &m68000_mcu_device::and_l_dd_adr32_dfm, + &m68000_mcu_device::muls_w_ds_dd_dfm, + &m68000_mcu_device::muls_w_ais_dd_dfm, + &m68000_mcu_device::muls_w_aips_dd_dfm, + &m68000_mcu_device::muls_w_pais_dd_dfm, + &m68000_mcu_device::muls_w_das_dd_dfm, + &m68000_mcu_device::muls_w_dais_dd_dfm, + &m68000_mcu_device::muls_w_adr16_dd_dfm, + &m68000_mcu_device::muls_w_adr32_dd_dfm, + &m68000_mcu_device::muls_w_dpc_dd_dfm, + &m68000_mcu_device::muls_w_dpci_dd_dfm, + &m68000_mcu_device::muls_w_imm16_dd_dfm, + &m68000_mcu_device::add_b_ds_dd_dfm, + &m68000_mcu_device::add_b_ais_dd_dfm, + &m68000_mcu_device::add_b_aips_dd_dfm, + &m68000_mcu_device::add_b_pais_dd_dfm, + &m68000_mcu_device::add_b_das_dd_dfm, + &m68000_mcu_device::add_b_dais_dd_dfm, + &m68000_mcu_device::add_b_adr16_dd_dfm, + &m68000_mcu_device::add_b_adr32_dd_dfm, + &m68000_mcu_device::add_b_dpc_dd_dfm, + &m68000_mcu_device::add_b_dpci_dd_dfm, + &m68000_mcu_device::add_b_imm8_dd_dfm, + &m68000_mcu_device::add_w_ds_dd_dfm, + &m68000_mcu_device::add_w_as_dd_dfm, + &m68000_mcu_device::add_w_ais_dd_dfm, + &m68000_mcu_device::add_w_aips_dd_dfm, + &m68000_mcu_device::add_w_pais_dd_dfm, + &m68000_mcu_device::add_w_das_dd_dfm, + &m68000_mcu_device::add_w_dais_dd_dfm, + &m68000_mcu_device::add_w_adr16_dd_dfm, + &m68000_mcu_device::add_w_adr32_dd_dfm, + &m68000_mcu_device::add_w_dpc_dd_dfm, + &m68000_mcu_device::add_w_dpci_dd_dfm, + &m68000_mcu_device::add_w_imm16_dd_dfm, + &m68000_mcu_device::add_l_ds_dd_dfm, + &m68000_mcu_device::add_l_as_dd_dfm, + &m68000_mcu_device::add_l_ais_dd_dfm, + &m68000_mcu_device::add_l_aips_dd_dfm, + &m68000_mcu_device::add_l_pais_dd_dfm, + &m68000_mcu_device::add_l_das_dd_dfm, + &m68000_mcu_device::add_l_dais_dd_dfm, + &m68000_mcu_device::add_l_adr16_dd_dfm, + &m68000_mcu_device::add_l_adr32_dd_dfm, + &m68000_mcu_device::add_l_dpc_dd_dfm, + &m68000_mcu_device::add_l_dpci_dd_dfm, + &m68000_mcu_device::add_l_imm32_dd_dfm, + &m68000_mcu_device::adda_w_ds_ad_dfm, + &m68000_mcu_device::adda_w_as_ad_dfm, + &m68000_mcu_device::adda_w_ais_ad_dfm, + &m68000_mcu_device::adda_w_aips_ad_dfm, + &m68000_mcu_device::adda_w_pais_ad_dfm, + &m68000_mcu_device::adda_w_das_ad_dfm, + &m68000_mcu_device::adda_w_dais_ad_dfm, + &m68000_mcu_device::adda_w_adr16_ad_dfm, + &m68000_mcu_device::adda_w_adr32_ad_dfm, + &m68000_mcu_device::adda_w_dpc_ad_dfm, + &m68000_mcu_device::adda_w_dpci_ad_dfm, + &m68000_mcu_device::adda_w_imm16_ad_dfm, + &m68000_mcu_device::addx_b_ds_dd_dfm, + &m68000_mcu_device::addx_b_pais_paid_dfm, + &m68000_mcu_device::add_b_dd_ais_dfm, + &m68000_mcu_device::add_b_dd_aips_dfm, + &m68000_mcu_device::add_b_dd_pais_dfm, + &m68000_mcu_device::add_b_dd_das_dfm, + &m68000_mcu_device::add_b_dd_dais_dfm, + &m68000_mcu_device::add_b_dd_adr16_dfm, + &m68000_mcu_device::add_b_dd_adr32_dfm, + &m68000_mcu_device::addx_w_ds_dd_dfm, + &m68000_mcu_device::addx_w_pais_paid_dfm, + &m68000_mcu_device::add_w_dd_ais_dfm, + &m68000_mcu_device::add_w_dd_aips_dfm, + &m68000_mcu_device::add_w_dd_pais_dfm, + &m68000_mcu_device::add_w_dd_das_dfm, + &m68000_mcu_device::add_w_dd_dais_dfm, + &m68000_mcu_device::add_w_dd_adr16_dfm, + &m68000_mcu_device::add_w_dd_adr32_dfm, + &m68000_mcu_device::addx_l_ds_dd_dfm, + &m68000_mcu_device::addx_l_pais_paid_dfm, + &m68000_mcu_device::add_l_dd_ais_dfm, + &m68000_mcu_device::add_l_dd_aips_dfm, + &m68000_mcu_device::add_l_dd_pais_dfm, + &m68000_mcu_device::add_l_dd_das_dfm, + &m68000_mcu_device::add_l_dd_dais_dfm, + &m68000_mcu_device::add_l_dd_adr16_dfm, + &m68000_mcu_device::add_l_dd_adr32_dfm, + &m68000_mcu_device::adda_l_ds_ad_dfm, + &m68000_mcu_device::adda_l_as_ad_dfm, + &m68000_mcu_device::adda_l_ais_ad_dfm, + &m68000_mcu_device::adda_l_aips_ad_dfm, + &m68000_mcu_device::adda_l_pais_ad_dfm, + &m68000_mcu_device::adda_l_das_ad_dfm, + &m68000_mcu_device::adda_l_dais_ad_dfm, + &m68000_mcu_device::adda_l_adr16_ad_dfm, + &m68000_mcu_device::adda_l_adr32_ad_dfm, + &m68000_mcu_device::adda_l_dpc_ad_dfm, + &m68000_mcu_device::adda_l_dpci_ad_dfm, + &m68000_mcu_device::adda_l_imm32_ad_dfm, + &m68000_mcu_device::asr_b_imm3_ds_dfm, + &m68000_mcu_device::lsr_b_imm3_ds_dfm, + &m68000_mcu_device::roxr_b_imm3_ds_dfm, + &m68000_mcu_device::ror_b_imm3_ds_dfm, + &m68000_mcu_device::asr_b_dd_ds_dfm, + &m68000_mcu_device::lsr_b_dd_ds_dfm, + &m68000_mcu_device::roxr_b_dd_ds_dfm, + &m68000_mcu_device::ror_b_dd_ds_dfm, + &m68000_mcu_device::asr_w_imm3_ds_dfm, + &m68000_mcu_device::lsr_w_imm3_ds_dfm, + &m68000_mcu_device::roxr_w_imm3_ds_dfm, + &m68000_mcu_device::ror_w_imm3_ds_dfm, + &m68000_mcu_device::asr_w_dd_ds_dfm, + &m68000_mcu_device::lsr_w_dd_ds_dfm, + &m68000_mcu_device::roxr_w_dd_ds_dfm, + &m68000_mcu_device::ror_w_dd_ds_dfm, + &m68000_mcu_device::asr_l_imm3_ds_dfm, + &m68000_mcu_device::lsr_l_imm3_ds_dfm, + &m68000_mcu_device::roxr_l_imm3_ds_dfm, + &m68000_mcu_device::ror_l_imm3_ds_dfm, + &m68000_mcu_device::asr_l_dd_ds_dfm, + &m68000_mcu_device::lsr_l_dd_ds_dfm, + &m68000_mcu_device::roxr_l_dd_ds_dfm, + &m68000_mcu_device::ror_l_dd_ds_dfm, + &m68000_mcu_device::asr_ais_dfm, + &m68000_mcu_device::asr_aips_dfm, + &m68000_mcu_device::asr_pais_dfm, + &m68000_mcu_device::asr_das_dfm, + &m68000_mcu_device::asr_dais_dfm, + &m68000_mcu_device::asr_adr16_dfm, + &m68000_mcu_device::asr_adr32_dfm, + &m68000_mcu_device::asl_b_imm3_ds_dfm, + &m68000_mcu_device::lsl_b_imm3_ds_dfm, + &m68000_mcu_device::roxl_b_imm3_ds_dfm, + &m68000_mcu_device::rol_b_imm3_ds_dfm, + &m68000_mcu_device::asl_b_dd_ds_dfm, + &m68000_mcu_device::lsl_b_dd_ds_dfm, + &m68000_mcu_device::roxl_b_dd_ds_dfm, + &m68000_mcu_device::rol_b_dd_ds_dfm, + &m68000_mcu_device::asl_w_imm3_ds_dfm, + &m68000_mcu_device::lsl_w_imm3_ds_dfm, + &m68000_mcu_device::roxl_w_imm3_ds_dfm, + &m68000_mcu_device::rol_w_imm3_ds_dfm, + &m68000_mcu_device::asl_w_dd_ds_dfm, + &m68000_mcu_device::lsl_w_dd_ds_dfm, + &m68000_mcu_device::roxl_w_dd_ds_dfm, + &m68000_mcu_device::rol_w_dd_ds_dfm, + &m68000_mcu_device::asl_l_imm3_ds_dfm, + &m68000_mcu_device::lsl_l_imm3_ds_dfm, + &m68000_mcu_device::roxl_l_imm3_ds_dfm, + &m68000_mcu_device::rol_l_imm3_ds_dfm, + &m68000_mcu_device::asl_l_dd_ds_dfm, + &m68000_mcu_device::lsl_l_dd_ds_dfm, + &m68000_mcu_device::roxl_l_dd_ds_dfm, + &m68000_mcu_device::rol_l_dd_ds_dfm, + &m68000_mcu_device::asl_ais_dfm, + &m68000_mcu_device::asl_aips_dfm, + &m68000_mcu_device::asl_pais_dfm, + &m68000_mcu_device::asl_das_dfm, + &m68000_mcu_device::asl_dais_dfm, + &m68000_mcu_device::asl_adr16_dfm, + &m68000_mcu_device::asl_adr32_dfm, + &m68000_mcu_device::lsr_ais_dfm, + &m68000_mcu_device::lsr_aips_dfm, + &m68000_mcu_device::lsr_pais_dfm, + &m68000_mcu_device::lsr_das_dfm, + &m68000_mcu_device::lsr_dais_dfm, + &m68000_mcu_device::lsr_adr16_dfm, + &m68000_mcu_device::lsr_adr32_dfm, + &m68000_mcu_device::lsl_ais_dfm, + &m68000_mcu_device::lsl_aips_dfm, + &m68000_mcu_device::lsl_pais_dfm, + &m68000_mcu_device::lsl_das_dfm, + &m68000_mcu_device::lsl_dais_dfm, + &m68000_mcu_device::lsl_adr16_dfm, + &m68000_mcu_device::lsl_adr32_dfm, + &m68000_mcu_device::roxr_ais_dfm, + &m68000_mcu_device::roxr_aips_dfm, + &m68000_mcu_device::roxr_pais_dfm, + &m68000_mcu_device::roxr_das_dfm, + &m68000_mcu_device::roxr_dais_dfm, + &m68000_mcu_device::roxr_adr16_dfm, + &m68000_mcu_device::roxr_adr32_dfm, + &m68000_mcu_device::roxl_ais_dfm, + &m68000_mcu_device::roxl_aips_dfm, + &m68000_mcu_device::roxl_pais_dfm, + &m68000_mcu_device::roxl_das_dfm, + &m68000_mcu_device::roxl_dais_dfm, + &m68000_mcu_device::roxl_adr16_dfm, + &m68000_mcu_device::roxl_adr32_dfm, + &m68000_mcu_device::ror_ais_dfm, + &m68000_mcu_device::ror_aips_dfm, + &m68000_mcu_device::ror_pais_dfm, + &m68000_mcu_device::ror_das_dfm, + &m68000_mcu_device::ror_dais_dfm, + &m68000_mcu_device::ror_adr16_dfm, + &m68000_mcu_device::ror_adr32_dfm, + &m68000_mcu_device::rol_ais_dfm, + &m68000_mcu_device::rol_aips_dfm, + &m68000_mcu_device::rol_pais_dfm, + &m68000_mcu_device::rol_das_dfm, + &m68000_mcu_device::rol_dais_dfm, + &m68000_mcu_device::rol_adr16_dfm, + &m68000_mcu_device::rol_adr32_dfm, }; diff --git a/src/devices/cpu/m68000/m68000-sdpm.cpp b/src/devices/cpu/m68000/m68000mcu-sdpm.cpp similarity index 96% rename from src/devices/cpu/m68000/m68000-sdpm.cpp rename to src/devices/cpu/m68000/m68000mcu-sdpm.cpp index b33860591d7..0d15f18ed9a 100644 --- a/src/devices/cpu/m68000/m68000-sdpm.cpp +++ b/src/devices/cpu/m68000/m68000mcu-sdpm.cpp @@ -1,11 +1,11 @@ // Instruction handlers for the m68000 (direct, partial, mcu) // -// Generated by m68000gen.py sdpm m68000.lst m68000-sdpm.cpp +// Generated by m68000gen.py sdpm m68000.lst m68000mcu-sdpm.cpp #include "emu.h" -#include "m68000.h" +#include "m68000mcu.h" -void m68000_device::state_reset_dpm() +void m68000_mcu_device::state_reset_dpm() { switch(m_inst_substate) { case 0: @@ -194,7 +194,7 @@ void m68000_device::state_reset_dpm() } } -void m68000_device::state_bus_error_dpm() +void m68000_mcu_device::state_bus_error_dpm() { switch(m_inst_substate) { case 0: @@ -510,7 +510,7 @@ void m68000_device::state_bus_error_dpm() } } -void m68000_device::state_address_error_dpm() +void m68000_mcu_device::state_address_error_dpm() { switch(m_inst_substate) { case 0: @@ -826,7 +826,7 @@ void m68000_device::state_address_error_dpm() } } -void m68000_device::state_double_fault_dpm() +void m68000_mcu_device::state_double_fault_dpm() { switch(m_inst_substate) { case 0: @@ -835,7 +835,7 @@ void m68000_device::state_double_fault_dpm() } } -void m68000_device::state_interrupt_dpm() +void m68000_mcu_device::state_interrupt_dpm() { switch(m_inst_substate) { case 0: @@ -1083,7 +1083,7 @@ void m68000_device::state_interrupt_dpm() } } -void m68000_device::state_trace_dpm() +void m68000_mcu_device::state_trace_dpm() { switch(m_inst_substate) { case 0: @@ -1292,7 +1292,7 @@ void m68000_device::state_trace_dpm() } } -void m68000_device::state_illegal_dpm() +void m68000_mcu_device::state_illegal_dpm() { switch(m_inst_substate) { case 0: @@ -1501,7 +1501,7 @@ void m68000_device::state_illegal_dpm() } } -void m68000_device::state_priviledge_dpm() +void m68000_mcu_device::state_priviledge_dpm() { switch(m_inst_substate) { case 0: @@ -1710,7 +1710,7 @@ void m68000_device::state_priviledge_dpm() } } -void m68000_device::state_linea_dpm() +void m68000_mcu_device::state_linea_dpm() { switch(m_inst_substate) { case 0: @@ -1919,7 +1919,7 @@ void m68000_device::state_linea_dpm() } } -void m68000_device::state_linef_dpm() +void m68000_mcu_device::state_linef_dpm() { switch(m_inst_substate) { case 0: @@ -2128,7 +2128,7 @@ void m68000_device::state_linef_dpm() } } -void m68000_device::ori_b_imm8_ds_dpm() // 0000 fff8 +void m68000_mcu_device::ori_b_imm8_ds_dpm() // 0000 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -2203,7 +2203,7 @@ void m68000_device::ori_b_imm8_ds_dpm() // 0000 fff8 } } -void m68000_device::ori_b_imm8_ais_dpm() // 0010 fff8 +void m68000_mcu_device::ori_b_imm8_ais_dpm() // 0010 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -2317,7 +2317,7 @@ void m68000_device::ori_b_imm8_ais_dpm() // 0010 fff8 } } -void m68000_device::ori_b_imm8_aips_dpm() // 0018 fff8 +void m68000_mcu_device::ori_b_imm8_aips_dpm() // 0018 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -2436,7 +2436,7 @@ void m68000_device::ori_b_imm8_aips_dpm() // 0018 fff8 } } -void m68000_device::ori_b_imm8_pais_dpm() // 0020 fff8 +void m68000_mcu_device::ori_b_imm8_pais_dpm() // 0020 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -2557,7 +2557,7 @@ void m68000_device::ori_b_imm8_pais_dpm() // 0020 fff8 } } -void m68000_device::ori_b_imm8_das_dpm() // 0028 fff8 +void m68000_mcu_device::ori_b_imm8_das_dpm() // 0028 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -2697,7 +2697,7 @@ void m68000_device::ori_b_imm8_das_dpm() // 0028 fff8 } } -void m68000_device::ori_b_imm8_dais_dpm() // 0030 fff8 +void m68000_mcu_device::ori_b_imm8_dais_dpm() // 0030 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -2880,7 +2880,7 @@ adsw2: } } -void m68000_device::ori_b_imm8_adr16_dpm() // 0038 ffff +void m68000_mcu_device::ori_b_imm8_adr16_dpm() // 0038 ffff { switch(m_inst_substate) { case 0: @@ -3019,7 +3019,7 @@ void m68000_device::ori_b_imm8_adr16_dpm() // 0038 ffff } } -void m68000_device::ori_b_imm8_adr32_dpm() // 0039 ffff +void m68000_mcu_device::ori_b_imm8_adr32_dpm() // 0039 ffff { switch(m_inst_substate) { case 0: @@ -3183,7 +3183,7 @@ void m68000_device::ori_b_imm8_adr32_dpm() // 0039 ffff } } -void m68000_device::ori_imm8_ccr_dpm() // 003c ffff +void m68000_mcu_device::ori_imm8_ccr_dpm() // 003c ffff { switch(m_inst_substate) { case 0: @@ -3301,7 +3301,7 @@ void m68000_device::ori_imm8_ccr_dpm() // 003c ffff } } -void m68000_device::ori_w_imm16_ds_dpm() // 0040 fff8 +void m68000_mcu_device::ori_w_imm16_ds_dpm() // 0040 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -3376,7 +3376,7 @@ void m68000_device::ori_w_imm16_ds_dpm() // 0040 fff8 } } -void m68000_device::ori_w_imm16_ais_dpm() // 0050 fff8 +void m68000_mcu_device::ori_w_imm16_ais_dpm() // 0050 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -3500,7 +3500,7 @@ void m68000_device::ori_w_imm16_ais_dpm() // 0050 fff8 } } -void m68000_device::ori_w_imm16_aips_dpm() // 0058 fff8 +void m68000_mcu_device::ori_w_imm16_aips_dpm() // 0058 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -3629,7 +3629,7 @@ void m68000_device::ori_w_imm16_aips_dpm() // 0058 fff8 } } -void m68000_device::ori_w_imm16_pais_dpm() // 0060 fff8 +void m68000_mcu_device::ori_w_imm16_pais_dpm() // 0060 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -3760,7 +3760,7 @@ void m68000_device::ori_w_imm16_pais_dpm() // 0060 fff8 } } -void m68000_device::ori_w_imm16_das_dpm() // 0068 fff8 +void m68000_mcu_device::ori_w_imm16_das_dpm() // 0068 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -3910,7 +3910,7 @@ void m68000_device::ori_w_imm16_das_dpm() // 0068 fff8 } } -void m68000_device::ori_w_imm16_dais_dpm() // 0070 fff8 +void m68000_mcu_device::ori_w_imm16_dais_dpm() // 0070 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -4103,7 +4103,7 @@ adsw2: } } -void m68000_device::ori_w_imm16_adr16_dpm() // 0078 ffff +void m68000_mcu_device::ori_w_imm16_adr16_dpm() // 0078 ffff { switch(m_inst_substate) { case 0: @@ -4252,7 +4252,7 @@ void m68000_device::ori_w_imm16_adr16_dpm() // 0078 ffff } } -void m68000_device::ori_w_imm16_adr32_dpm() // 0079 ffff +void m68000_mcu_device::ori_w_imm16_adr32_dpm() // 0079 ffff { switch(m_inst_substate) { case 0: @@ -4426,7 +4426,7 @@ void m68000_device::ori_w_imm16_adr32_dpm() // 0079 ffff } } -void m68000_device::ori_i16u_sr_dpm() // 007c ffff +void m68000_mcu_device::ori_i16u_sr_dpm() // 007c ffff { switch(m_inst_substate) { case 0: @@ -4550,7 +4550,7 @@ void m68000_device::ori_i16u_sr_dpm() // 007c ffff } } -void m68000_device::ori_l_imm32_ds_dpm() // 0080 fff8 +void m68000_mcu_device::ori_l_imm32_ds_dpm() // 0080 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -4659,7 +4659,7 @@ void m68000_device::ori_l_imm32_ds_dpm() // 0080 fff8 } } -void m68000_device::ori_l_imm32_ais_dpm() // 0090 fff8 +void m68000_mcu_device::ori_l_imm32_ais_dpm() // 0090 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -4858,7 +4858,7 @@ void m68000_device::ori_l_imm32_ais_dpm() // 0090 fff8 } } -void m68000_device::ori_l_imm32_aips_dpm() // 0098 fff8 +void m68000_mcu_device::ori_l_imm32_aips_dpm() // 0098 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -5061,7 +5061,7 @@ void m68000_device::ori_l_imm32_aips_dpm() // 0098 fff8 } } -void m68000_device::ori_l_imm32_pais_dpm() // 00a0 fff8 +void m68000_mcu_device::ori_l_imm32_pais_dpm() // 00a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -5265,7 +5265,7 @@ void m68000_device::ori_l_imm32_pais_dpm() // 00a0 fff8 } } -void m68000_device::ori_l_imm32_das_dpm() // 00a8 fff8 +void m68000_mcu_device::ori_l_imm32_das_dpm() // 00a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -5489,7 +5489,7 @@ void m68000_device::ori_l_imm32_das_dpm() // 00a8 fff8 } } -void m68000_device::ori_l_imm32_dais_dpm() // 00b0 fff8 +void m68000_mcu_device::ori_l_imm32_dais_dpm() // 00b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -5756,7 +5756,7 @@ adsl2: } } -void m68000_device::ori_l_imm32_adr16_dpm() // 00b8 ffff +void m68000_mcu_device::ori_l_imm32_adr16_dpm() // 00b8 ffff { switch(m_inst_substate) { case 0: @@ -5983,7 +5983,7 @@ void m68000_device::ori_l_imm32_adr16_dpm() // 00b8 ffff } } -void m68000_device::ori_l_imm32_adr32_dpm() // 00b9 ffff +void m68000_mcu_device::ori_l_imm32_adr32_dpm() // 00b9 ffff { switch(m_inst_substate) { case 0: @@ -6235,7 +6235,7 @@ void m68000_device::ori_l_imm32_adr32_dpm() // 00b9 ffff } } -void m68000_device::btst_dd_ds_dpm() // 0100 f1f8 +void m68000_mcu_device::btst_dd_ds_dpm() // 0100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -6313,7 +6313,7 @@ btsr3: } } -void m68000_device::movep_w_das_dd_dpm() // 0108 f1f8 +void m68000_mcu_device::movep_w_das_dd_dpm() // 0108 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6423,7 +6423,7 @@ void m68000_device::movep_w_das_dd_dpm() // 0108 f1f8 } } -void m68000_device::btst_dd_ais_dpm() // 0110 f1f8 +void m68000_mcu_device::btst_dd_ais_dpm() // 0110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6495,7 +6495,7 @@ void m68000_device::btst_dd_ais_dpm() // 0110 f1f8 } } -void m68000_device::btst_dd_aips_dpm() // 0118 f1f8 +void m68000_mcu_device::btst_dd_aips_dpm() // 0118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6572,7 +6572,7 @@ void m68000_device::btst_dd_aips_dpm() // 0118 f1f8 } } -void m68000_device::btst_dd_pais_dpm() // 0120 f1f8 +void m68000_mcu_device::btst_dd_pais_dpm() // 0120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6651,7 +6651,7 @@ void m68000_device::btst_dd_pais_dpm() // 0120 f1f8 } } -void m68000_device::btst_dd_das_dpm() // 0128 f1f8 +void m68000_mcu_device::btst_dd_das_dpm() // 0128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6749,7 +6749,7 @@ void m68000_device::btst_dd_das_dpm() // 0128 f1f8 } } -void m68000_device::btst_dd_dais_dpm() // 0130 f1f8 +void m68000_mcu_device::btst_dd_dais_dpm() // 0130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6890,7 +6890,7 @@ adsw2: } } -void m68000_device::btst_dd_adr16_dpm() // 0138 f1ff +void m68000_mcu_device::btst_dd_adr16_dpm() // 0138 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -6987,7 +6987,7 @@ void m68000_device::btst_dd_adr16_dpm() // 0138 f1ff } } -void m68000_device::btst_dd_adr32_dpm() // 0139 f1ff +void m68000_mcu_device::btst_dd_adr32_dpm() // 0139 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -7109,7 +7109,7 @@ void m68000_device::btst_dd_adr32_dpm() // 0139 f1ff } } -void m68000_device::btst_dd_dpc_dpm() // 013a f1ff +void m68000_mcu_device::btst_dd_dpc_dpm() // 013a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -7206,7 +7206,7 @@ void m68000_device::btst_dd_dpc_dpm() // 013a f1ff } } -void m68000_device::btst_dd_dpci_dpm() // 013b f1ff +void m68000_mcu_device::btst_dd_dpci_dpm() // 013b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -7346,7 +7346,7 @@ adsw2: } } -void m68000_device::btst_dd_imm_dpm() // 013c f1ff +void m68000_mcu_device::btst_dd_imm_dpm() // 013c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -7449,7 +7449,7 @@ btsr3: } } -void m68000_device::bchg_dd_ds_dpm() // 0140 f1f8 +void m68000_mcu_device::bchg_dd_ds_dpm() // 0140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -7533,7 +7533,7 @@ bcsr3: } } -void m68000_device::movep_l_das_dd_dpm() // 0148 f1f8 +void m68000_mcu_device::movep_l_das_dd_dpm() // 0148 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7684,7 +7684,7 @@ void m68000_device::movep_l_das_dd_dpm() // 0148 f1f8 } } -void m68000_device::bchg_dd_ais_dpm() // 0150 f1f8 +void m68000_mcu_device::bchg_dd_ais_dpm() // 0150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7773,7 +7773,7 @@ void m68000_device::bchg_dd_ais_dpm() // 0150 f1f8 } } -void m68000_device::bchg_dd_aips_dpm() // 0158 f1f8 +void m68000_mcu_device::bchg_dd_aips_dpm() // 0158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7867,7 +7867,7 @@ void m68000_device::bchg_dd_aips_dpm() // 0158 f1f8 } } -void m68000_device::bchg_dd_pais_dpm() // 0160 f1f8 +void m68000_mcu_device::bchg_dd_pais_dpm() // 0160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7963,7 +7963,7 @@ void m68000_device::bchg_dd_pais_dpm() // 0160 f1f8 } } -void m68000_device::bchg_dd_das_dpm() // 0168 f1f8 +void m68000_mcu_device::bchg_dd_das_dpm() // 0168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8078,7 +8078,7 @@ void m68000_device::bchg_dd_das_dpm() // 0168 f1f8 } } -void m68000_device::bchg_dd_dais_dpm() // 0170 f1f8 +void m68000_mcu_device::bchg_dd_dais_dpm() // 0170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8236,7 +8236,7 @@ adsw2: } } -void m68000_device::bchg_dd_adr16_dpm() // 0178 f1ff +void m68000_mcu_device::bchg_dd_adr16_dpm() // 0178 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -8350,7 +8350,7 @@ void m68000_device::bchg_dd_adr16_dpm() // 0178 f1ff } } -void m68000_device::bchg_dd_adr32_dpm() // 0179 f1ff +void m68000_mcu_device::bchg_dd_adr32_dpm() // 0179 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -8489,7 +8489,7 @@ void m68000_device::bchg_dd_adr32_dpm() // 0179 f1ff } } -void m68000_device::bclr_dd_ds_dpm() // 0180 f1f8 +void m68000_mcu_device::bclr_dd_ds_dpm() // 0180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -8581,7 +8581,7 @@ bclr3: } } -void m68000_device::movep_w_dd_das_dpm() // 0188 f1f8 +void m68000_mcu_device::movep_w_dd_das_dpm() // 0188 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8689,7 +8689,7 @@ void m68000_device::movep_w_dd_das_dpm() // 0188 f1f8 } } -void m68000_device::bclr_dd_ais_dpm() // 0190 f1f8 +void m68000_mcu_device::bclr_dd_ais_dpm() // 0190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8782,7 +8782,7 @@ void m68000_device::bclr_dd_ais_dpm() // 0190 f1f8 } } -void m68000_device::bclr_dd_aips_dpm() // 0198 f1f8 +void m68000_mcu_device::bclr_dd_aips_dpm() // 0198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8880,7 +8880,7 @@ void m68000_device::bclr_dd_aips_dpm() // 0198 f1f8 } } -void m68000_device::bclr_dd_pais_dpm() // 01a0 f1f8 +void m68000_mcu_device::bclr_dd_pais_dpm() // 01a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8980,7 +8980,7 @@ void m68000_device::bclr_dd_pais_dpm() // 01a0 f1f8 } } -void m68000_device::bclr_dd_das_dpm() // 01a8 f1f8 +void m68000_mcu_device::bclr_dd_das_dpm() // 01a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -9099,7 +9099,7 @@ void m68000_device::bclr_dd_das_dpm() // 01a8 f1f8 } } -void m68000_device::bclr_dd_dais_dpm() // 01b0 f1f8 +void m68000_mcu_device::bclr_dd_dais_dpm() // 01b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -9261,7 +9261,7 @@ adsw2: } } -void m68000_device::bclr_dd_adr16_dpm() // 01b8 f1ff +void m68000_mcu_device::bclr_dd_adr16_dpm() // 01b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -9379,7 +9379,7 @@ void m68000_device::bclr_dd_adr16_dpm() // 01b8 f1ff } } -void m68000_device::bclr_dd_adr32_dpm() // 01b9 f1ff +void m68000_mcu_device::bclr_dd_adr32_dpm() // 01b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -9522,7 +9522,7 @@ void m68000_device::bclr_dd_adr32_dpm() // 01b9 f1ff } } -void m68000_device::bset_dd_ds_dpm() // 01c0 f1f8 +void m68000_mcu_device::bset_dd_ds_dpm() // 01c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -9606,7 +9606,7 @@ bcsr3: } } -void m68000_device::movep_l_dd_das_dpm() // 01c8 f1f8 +void m68000_mcu_device::movep_l_dd_das_dpm() // 01c8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -9750,7 +9750,7 @@ void m68000_device::movep_l_dd_das_dpm() // 01c8 f1f8 } } -void m68000_device::bset_dd_ais_dpm() // 01d0 f1f8 +void m68000_mcu_device::bset_dd_ais_dpm() // 01d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -9839,7 +9839,7 @@ void m68000_device::bset_dd_ais_dpm() // 01d0 f1f8 } } -void m68000_device::bset_dd_aips_dpm() // 01d8 f1f8 +void m68000_mcu_device::bset_dd_aips_dpm() // 01d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -9933,7 +9933,7 @@ void m68000_device::bset_dd_aips_dpm() // 01d8 f1f8 } } -void m68000_device::bset_dd_pais_dpm() // 01e0 f1f8 +void m68000_mcu_device::bset_dd_pais_dpm() // 01e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -10029,7 +10029,7 @@ void m68000_device::bset_dd_pais_dpm() // 01e0 f1f8 } } -void m68000_device::bset_dd_das_dpm() // 01e8 f1f8 +void m68000_mcu_device::bset_dd_das_dpm() // 01e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -10144,7 +10144,7 @@ void m68000_device::bset_dd_das_dpm() // 01e8 f1f8 } } -void m68000_device::bset_dd_dais_dpm() // 01f0 f1f8 +void m68000_mcu_device::bset_dd_dais_dpm() // 01f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -10302,7 +10302,7 @@ adsw2: } } -void m68000_device::bset_dd_adr16_dpm() // 01f8 f1ff +void m68000_mcu_device::bset_dd_adr16_dpm() // 01f8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -10416,7 +10416,7 @@ void m68000_device::bset_dd_adr16_dpm() // 01f8 f1ff } } -void m68000_device::bset_dd_adr32_dpm() // 01f9 f1ff +void m68000_mcu_device::bset_dd_adr32_dpm() // 01f9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -10555,7 +10555,7 @@ void m68000_device::bset_dd_adr32_dpm() // 01f9 f1ff } } -void m68000_device::andi_b_imm8_ds_dpm() // 0200 fff8 +void m68000_mcu_device::andi_b_imm8_ds_dpm() // 0200 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -10630,7 +10630,7 @@ void m68000_device::andi_b_imm8_ds_dpm() // 0200 fff8 } } -void m68000_device::andi_b_imm8_ais_dpm() // 0210 fff8 +void m68000_mcu_device::andi_b_imm8_ais_dpm() // 0210 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -10744,7 +10744,7 @@ void m68000_device::andi_b_imm8_ais_dpm() // 0210 fff8 } } -void m68000_device::andi_b_imm8_aips_dpm() // 0218 fff8 +void m68000_mcu_device::andi_b_imm8_aips_dpm() // 0218 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -10863,7 +10863,7 @@ void m68000_device::andi_b_imm8_aips_dpm() // 0218 fff8 } } -void m68000_device::andi_b_imm8_pais_dpm() // 0220 fff8 +void m68000_mcu_device::andi_b_imm8_pais_dpm() // 0220 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -10984,7 +10984,7 @@ void m68000_device::andi_b_imm8_pais_dpm() // 0220 fff8 } } -void m68000_device::andi_b_imm8_das_dpm() // 0228 fff8 +void m68000_mcu_device::andi_b_imm8_das_dpm() // 0228 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -11124,7 +11124,7 @@ void m68000_device::andi_b_imm8_das_dpm() // 0228 fff8 } } -void m68000_device::andi_b_imm8_dais_dpm() // 0230 fff8 +void m68000_mcu_device::andi_b_imm8_dais_dpm() // 0230 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -11307,7 +11307,7 @@ adsw2: } } -void m68000_device::andi_b_imm8_adr16_dpm() // 0238 ffff +void m68000_mcu_device::andi_b_imm8_adr16_dpm() // 0238 ffff { switch(m_inst_substate) { case 0: @@ -11446,7 +11446,7 @@ void m68000_device::andi_b_imm8_adr16_dpm() // 0238 ffff } } -void m68000_device::andi_b_imm8_adr32_dpm() // 0239 ffff +void m68000_mcu_device::andi_b_imm8_adr32_dpm() // 0239 ffff { switch(m_inst_substate) { case 0: @@ -11610,7 +11610,7 @@ void m68000_device::andi_b_imm8_adr32_dpm() // 0239 ffff } } -void m68000_device::andi_imm8_ccr_dpm() // 023c ffff +void m68000_mcu_device::andi_imm8_ccr_dpm() // 023c ffff { switch(m_inst_substate) { case 0: @@ -11728,7 +11728,7 @@ void m68000_device::andi_imm8_ccr_dpm() // 023c ffff } } -void m68000_device::andi_w_imm16_ds_dpm() // 0240 fff8 +void m68000_mcu_device::andi_w_imm16_ds_dpm() // 0240 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -11803,7 +11803,7 @@ void m68000_device::andi_w_imm16_ds_dpm() // 0240 fff8 } } -void m68000_device::andi_w_imm16_ais_dpm() // 0250 fff8 +void m68000_mcu_device::andi_w_imm16_ais_dpm() // 0250 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -11927,7 +11927,7 @@ void m68000_device::andi_w_imm16_ais_dpm() // 0250 fff8 } } -void m68000_device::andi_w_imm16_aips_dpm() // 0258 fff8 +void m68000_mcu_device::andi_w_imm16_aips_dpm() // 0258 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -12056,7 +12056,7 @@ void m68000_device::andi_w_imm16_aips_dpm() // 0258 fff8 } } -void m68000_device::andi_w_imm16_pais_dpm() // 0260 fff8 +void m68000_mcu_device::andi_w_imm16_pais_dpm() // 0260 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -12187,7 +12187,7 @@ void m68000_device::andi_w_imm16_pais_dpm() // 0260 fff8 } } -void m68000_device::andi_w_imm16_das_dpm() // 0268 fff8 +void m68000_mcu_device::andi_w_imm16_das_dpm() // 0268 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -12337,7 +12337,7 @@ void m68000_device::andi_w_imm16_das_dpm() // 0268 fff8 } } -void m68000_device::andi_w_imm16_dais_dpm() // 0270 fff8 +void m68000_mcu_device::andi_w_imm16_dais_dpm() // 0270 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -12530,7 +12530,7 @@ adsw2: } } -void m68000_device::andi_w_imm16_adr16_dpm() // 0278 ffff +void m68000_mcu_device::andi_w_imm16_adr16_dpm() // 0278 ffff { switch(m_inst_substate) { case 0: @@ -12679,7 +12679,7 @@ void m68000_device::andi_w_imm16_adr16_dpm() // 0278 ffff } } -void m68000_device::andi_w_imm16_adr32_dpm() // 0279 ffff +void m68000_mcu_device::andi_w_imm16_adr32_dpm() // 0279 ffff { switch(m_inst_substate) { case 0: @@ -12853,7 +12853,7 @@ void m68000_device::andi_w_imm16_adr32_dpm() // 0279 ffff } } -void m68000_device::andi_i16u_sr_dpm() // 027c ffff +void m68000_mcu_device::andi_i16u_sr_dpm() // 027c ffff { switch(m_inst_substate) { case 0: @@ -12977,7 +12977,7 @@ void m68000_device::andi_i16u_sr_dpm() // 027c ffff } } -void m68000_device::andi_l_imm32_ds_dpm() // 0280 fff8 +void m68000_mcu_device::andi_l_imm32_ds_dpm() // 0280 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -13086,7 +13086,7 @@ void m68000_device::andi_l_imm32_ds_dpm() // 0280 fff8 } } -void m68000_device::andi_l_imm32_ais_dpm() // 0290 fff8 +void m68000_mcu_device::andi_l_imm32_ais_dpm() // 0290 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -13285,7 +13285,7 @@ void m68000_device::andi_l_imm32_ais_dpm() // 0290 fff8 } } -void m68000_device::andi_l_imm32_aips_dpm() // 0298 fff8 +void m68000_mcu_device::andi_l_imm32_aips_dpm() // 0298 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -13488,7 +13488,7 @@ void m68000_device::andi_l_imm32_aips_dpm() // 0298 fff8 } } -void m68000_device::andi_l_imm32_pais_dpm() // 02a0 fff8 +void m68000_mcu_device::andi_l_imm32_pais_dpm() // 02a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -13692,7 +13692,7 @@ void m68000_device::andi_l_imm32_pais_dpm() // 02a0 fff8 } } -void m68000_device::andi_l_imm32_das_dpm() // 02a8 fff8 +void m68000_mcu_device::andi_l_imm32_das_dpm() // 02a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -13916,7 +13916,7 @@ void m68000_device::andi_l_imm32_das_dpm() // 02a8 fff8 } } -void m68000_device::andi_l_imm32_dais_dpm() // 02b0 fff8 +void m68000_mcu_device::andi_l_imm32_dais_dpm() // 02b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -14183,7 +14183,7 @@ adsl2: } } -void m68000_device::andi_l_imm32_adr16_dpm() // 02b8 ffff +void m68000_mcu_device::andi_l_imm32_adr16_dpm() // 02b8 ffff { switch(m_inst_substate) { case 0: @@ -14410,7 +14410,7 @@ void m68000_device::andi_l_imm32_adr16_dpm() // 02b8 ffff } } -void m68000_device::andi_l_imm32_adr32_dpm() // 02b9 ffff +void m68000_mcu_device::andi_l_imm32_adr32_dpm() // 02b9 ffff { switch(m_inst_substate) { case 0: @@ -14662,7 +14662,7 @@ void m68000_device::andi_l_imm32_adr32_dpm() // 02b9 ffff } } -void m68000_device::subi_b_imm8_ds_dpm() // 0400 fff8 +void m68000_mcu_device::subi_b_imm8_ds_dpm() // 0400 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -14735,7 +14735,7 @@ void m68000_device::subi_b_imm8_ds_dpm() // 0400 fff8 } } -void m68000_device::subi_b_imm8_ais_dpm() // 0410 fff8 +void m68000_mcu_device::subi_b_imm8_ais_dpm() // 0410 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -14846,7 +14846,7 @@ void m68000_device::subi_b_imm8_ais_dpm() // 0410 fff8 } } -void m68000_device::subi_b_imm8_aips_dpm() // 0418 fff8 +void m68000_mcu_device::subi_b_imm8_aips_dpm() // 0418 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -14961,7 +14961,7 @@ void m68000_device::subi_b_imm8_aips_dpm() // 0418 fff8 } } -void m68000_device::subi_b_imm8_pais_dpm() // 0420 fff8 +void m68000_mcu_device::subi_b_imm8_pais_dpm() // 0420 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -15078,7 +15078,7 @@ void m68000_device::subi_b_imm8_pais_dpm() // 0420 fff8 } } -void m68000_device::subi_b_imm8_das_dpm() // 0428 fff8 +void m68000_mcu_device::subi_b_imm8_das_dpm() // 0428 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -15214,7 +15214,7 @@ void m68000_device::subi_b_imm8_das_dpm() // 0428 fff8 } } -void m68000_device::subi_b_imm8_dais_dpm() // 0430 fff8 +void m68000_mcu_device::subi_b_imm8_dais_dpm() // 0430 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -15391,7 +15391,7 @@ adsw2: } } -void m68000_device::subi_b_imm8_adr16_dpm() // 0438 ffff +void m68000_mcu_device::subi_b_imm8_adr16_dpm() // 0438 ffff { switch(m_inst_substate) { case 0: @@ -15526,7 +15526,7 @@ void m68000_device::subi_b_imm8_adr16_dpm() // 0438 ffff } } -void m68000_device::subi_b_imm8_adr32_dpm() // 0439 ffff +void m68000_mcu_device::subi_b_imm8_adr32_dpm() // 0439 ffff { switch(m_inst_substate) { case 0: @@ -15685,7 +15685,7 @@ void m68000_device::subi_b_imm8_adr32_dpm() // 0439 ffff } } -void m68000_device::subi_w_imm16_ds_dpm() // 0440 fff8 +void m68000_mcu_device::subi_w_imm16_ds_dpm() // 0440 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -15758,7 +15758,7 @@ void m68000_device::subi_w_imm16_ds_dpm() // 0440 fff8 } } -void m68000_device::subi_w_imm16_ais_dpm() // 0450 fff8 +void m68000_mcu_device::subi_w_imm16_ais_dpm() // 0450 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -15879,7 +15879,7 @@ void m68000_device::subi_w_imm16_ais_dpm() // 0450 fff8 } } -void m68000_device::subi_w_imm16_aips_dpm() // 0458 fff8 +void m68000_mcu_device::subi_w_imm16_aips_dpm() // 0458 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -16004,7 +16004,7 @@ void m68000_device::subi_w_imm16_aips_dpm() // 0458 fff8 } } -void m68000_device::subi_w_imm16_pais_dpm() // 0460 fff8 +void m68000_mcu_device::subi_w_imm16_pais_dpm() // 0460 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -16131,7 +16131,7 @@ void m68000_device::subi_w_imm16_pais_dpm() // 0460 fff8 } } -void m68000_device::subi_w_imm16_das_dpm() // 0468 fff8 +void m68000_mcu_device::subi_w_imm16_das_dpm() // 0468 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -16277,7 +16277,7 @@ void m68000_device::subi_w_imm16_das_dpm() // 0468 fff8 } } -void m68000_device::subi_w_imm16_dais_dpm() // 0470 fff8 +void m68000_mcu_device::subi_w_imm16_dais_dpm() // 0470 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -16464,7 +16464,7 @@ adsw2: } } -void m68000_device::subi_w_imm16_adr16_dpm() // 0478 ffff +void m68000_mcu_device::subi_w_imm16_adr16_dpm() // 0478 ffff { switch(m_inst_substate) { case 0: @@ -16609,7 +16609,7 @@ void m68000_device::subi_w_imm16_adr16_dpm() // 0478 ffff } } -void m68000_device::subi_w_imm16_adr32_dpm() // 0479 ffff +void m68000_mcu_device::subi_w_imm16_adr32_dpm() // 0479 ffff { switch(m_inst_substate) { case 0: @@ -16778,7 +16778,7 @@ void m68000_device::subi_w_imm16_adr32_dpm() // 0479 ffff } } -void m68000_device::subi_l_imm32_ds_dpm() // 0480 fff8 +void m68000_mcu_device::subi_l_imm32_ds_dpm() // 0480 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -16883,7 +16883,7 @@ void m68000_device::subi_l_imm32_ds_dpm() // 0480 fff8 } } -void m68000_device::subi_l_imm32_ais_dpm() // 0490 fff8 +void m68000_mcu_device::subi_l_imm32_ais_dpm() // 0490 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -17078,7 +17078,7 @@ void m68000_device::subi_l_imm32_ais_dpm() // 0490 fff8 } } -void m68000_device::subi_l_imm32_aips_dpm() // 0498 fff8 +void m68000_mcu_device::subi_l_imm32_aips_dpm() // 0498 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -17276,7 +17276,7 @@ void m68000_device::subi_l_imm32_aips_dpm() // 0498 fff8 } } -void m68000_device::subi_l_imm32_pais_dpm() // 04a0 fff8 +void m68000_mcu_device::subi_l_imm32_pais_dpm() // 04a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -17475,7 +17475,7 @@ void m68000_device::subi_l_imm32_pais_dpm() // 04a0 fff8 } } -void m68000_device::subi_l_imm32_das_dpm() // 04a8 fff8 +void m68000_mcu_device::subi_l_imm32_das_dpm() // 04a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -17694,7 +17694,7 @@ void m68000_device::subi_l_imm32_das_dpm() // 04a8 fff8 } } -void m68000_device::subi_l_imm32_dais_dpm() // 04b0 fff8 +void m68000_mcu_device::subi_l_imm32_dais_dpm() // 04b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -17954,7 +17954,7 @@ adsl2: } } -void m68000_device::subi_l_imm32_adr16_dpm() // 04b8 ffff +void m68000_mcu_device::subi_l_imm32_adr16_dpm() // 04b8 ffff { switch(m_inst_substate) { case 0: @@ -18175,7 +18175,7 @@ void m68000_device::subi_l_imm32_adr16_dpm() // 04b8 ffff } } -void m68000_device::subi_l_imm32_adr32_dpm() // 04b9 ffff +void m68000_mcu_device::subi_l_imm32_adr32_dpm() // 04b9 ffff { switch(m_inst_substate) { case 0: @@ -18420,7 +18420,7 @@ void m68000_device::subi_l_imm32_adr32_dpm() // 04b9 ffff } } -void m68000_device::addi_b_imm8_ds_dpm() // 0600 fff8 +void m68000_mcu_device::addi_b_imm8_ds_dpm() // 0600 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -18493,7 +18493,7 @@ void m68000_device::addi_b_imm8_ds_dpm() // 0600 fff8 } } -void m68000_device::addi_b_imm8_ais_dpm() // 0610 fff8 +void m68000_mcu_device::addi_b_imm8_ais_dpm() // 0610 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -18604,7 +18604,7 @@ void m68000_device::addi_b_imm8_ais_dpm() // 0610 fff8 } } -void m68000_device::addi_b_imm8_aips_dpm() // 0618 fff8 +void m68000_mcu_device::addi_b_imm8_aips_dpm() // 0618 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -18719,7 +18719,7 @@ void m68000_device::addi_b_imm8_aips_dpm() // 0618 fff8 } } -void m68000_device::addi_b_imm8_pais_dpm() // 0620 fff8 +void m68000_mcu_device::addi_b_imm8_pais_dpm() // 0620 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -18836,7 +18836,7 @@ void m68000_device::addi_b_imm8_pais_dpm() // 0620 fff8 } } -void m68000_device::addi_b_imm8_das_dpm() // 0628 fff8 +void m68000_mcu_device::addi_b_imm8_das_dpm() // 0628 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -18972,7 +18972,7 @@ void m68000_device::addi_b_imm8_das_dpm() // 0628 fff8 } } -void m68000_device::addi_b_imm8_dais_dpm() // 0630 fff8 +void m68000_mcu_device::addi_b_imm8_dais_dpm() // 0630 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -19149,7 +19149,7 @@ adsw2: } } -void m68000_device::addi_b_imm8_adr16_dpm() // 0638 ffff +void m68000_mcu_device::addi_b_imm8_adr16_dpm() // 0638 ffff { switch(m_inst_substate) { case 0: @@ -19284,7 +19284,7 @@ void m68000_device::addi_b_imm8_adr16_dpm() // 0638 ffff } } -void m68000_device::addi_b_imm8_adr32_dpm() // 0639 ffff +void m68000_mcu_device::addi_b_imm8_adr32_dpm() // 0639 ffff { switch(m_inst_substate) { case 0: @@ -19443,7 +19443,7 @@ void m68000_device::addi_b_imm8_adr32_dpm() // 0639 ffff } } -void m68000_device::addi_w_imm16_ds_dpm() // 0640 fff8 +void m68000_mcu_device::addi_w_imm16_ds_dpm() // 0640 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -19516,7 +19516,7 @@ void m68000_device::addi_w_imm16_ds_dpm() // 0640 fff8 } } -void m68000_device::addi_w_imm16_ais_dpm() // 0650 fff8 +void m68000_mcu_device::addi_w_imm16_ais_dpm() // 0650 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -19637,7 +19637,7 @@ void m68000_device::addi_w_imm16_ais_dpm() // 0650 fff8 } } -void m68000_device::addi_w_imm16_aips_dpm() // 0658 fff8 +void m68000_mcu_device::addi_w_imm16_aips_dpm() // 0658 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -19762,7 +19762,7 @@ void m68000_device::addi_w_imm16_aips_dpm() // 0658 fff8 } } -void m68000_device::addi_w_imm16_pais_dpm() // 0660 fff8 +void m68000_mcu_device::addi_w_imm16_pais_dpm() // 0660 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -19889,7 +19889,7 @@ void m68000_device::addi_w_imm16_pais_dpm() // 0660 fff8 } } -void m68000_device::addi_w_imm16_das_dpm() // 0668 fff8 +void m68000_mcu_device::addi_w_imm16_das_dpm() // 0668 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -20035,7 +20035,7 @@ void m68000_device::addi_w_imm16_das_dpm() // 0668 fff8 } } -void m68000_device::addi_w_imm16_dais_dpm() // 0670 fff8 +void m68000_mcu_device::addi_w_imm16_dais_dpm() // 0670 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -20222,7 +20222,7 @@ adsw2: } } -void m68000_device::addi_w_imm16_adr16_dpm() // 0678 ffff +void m68000_mcu_device::addi_w_imm16_adr16_dpm() // 0678 ffff { switch(m_inst_substate) { case 0: @@ -20367,7 +20367,7 @@ void m68000_device::addi_w_imm16_adr16_dpm() // 0678 ffff } } -void m68000_device::addi_w_imm16_adr32_dpm() // 0679 ffff +void m68000_mcu_device::addi_w_imm16_adr32_dpm() // 0679 ffff { switch(m_inst_substate) { case 0: @@ -20536,7 +20536,7 @@ void m68000_device::addi_w_imm16_adr32_dpm() // 0679 ffff } } -void m68000_device::addi_l_imm32_ds_dpm() // 0680 fff8 +void m68000_mcu_device::addi_l_imm32_ds_dpm() // 0680 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -20641,7 +20641,7 @@ void m68000_device::addi_l_imm32_ds_dpm() // 0680 fff8 } } -void m68000_device::addi_l_imm32_ais_dpm() // 0690 fff8 +void m68000_mcu_device::addi_l_imm32_ais_dpm() // 0690 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -20836,7 +20836,7 @@ void m68000_device::addi_l_imm32_ais_dpm() // 0690 fff8 } } -void m68000_device::addi_l_imm32_aips_dpm() // 0698 fff8 +void m68000_mcu_device::addi_l_imm32_aips_dpm() // 0698 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -21034,7 +21034,7 @@ void m68000_device::addi_l_imm32_aips_dpm() // 0698 fff8 } } -void m68000_device::addi_l_imm32_pais_dpm() // 06a0 fff8 +void m68000_mcu_device::addi_l_imm32_pais_dpm() // 06a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -21233,7 +21233,7 @@ void m68000_device::addi_l_imm32_pais_dpm() // 06a0 fff8 } } -void m68000_device::addi_l_imm32_das_dpm() // 06a8 fff8 +void m68000_mcu_device::addi_l_imm32_das_dpm() // 06a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -21452,7 +21452,7 @@ void m68000_device::addi_l_imm32_das_dpm() // 06a8 fff8 } } -void m68000_device::addi_l_imm32_dais_dpm() // 06b0 fff8 +void m68000_mcu_device::addi_l_imm32_dais_dpm() // 06b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -21712,7 +21712,7 @@ adsl2: } } -void m68000_device::addi_l_imm32_adr16_dpm() // 06b8 ffff +void m68000_mcu_device::addi_l_imm32_adr16_dpm() // 06b8 ffff { switch(m_inst_substate) { case 0: @@ -21933,7 +21933,7 @@ void m68000_device::addi_l_imm32_adr16_dpm() // 06b8 ffff } } -void m68000_device::addi_l_imm32_adr32_dpm() // 06b9 ffff +void m68000_mcu_device::addi_l_imm32_adr32_dpm() // 06b9 ffff { switch(m_inst_substate) { case 0: @@ -22178,7 +22178,7 @@ void m68000_device::addi_l_imm32_adr32_dpm() // 06b9 ffff } } -void m68000_device::btst_imm8_ds_dpm() // 0800 fff8 +void m68000_mcu_device::btst_imm8_ds_dpm() // 0800 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -22282,7 +22282,7 @@ btsr3: } } -void m68000_device::btst_imm8_ais_dpm() // 0810 fff8 +void m68000_mcu_device::btst_imm8_ais_dpm() // 0810 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -22380,7 +22380,7 @@ void m68000_device::btst_imm8_ais_dpm() // 0810 fff8 } } -void m68000_device::btst_imm8_aips_dpm() // 0818 fff8 +void m68000_mcu_device::btst_imm8_aips_dpm() // 0818 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -22483,7 +22483,7 @@ void m68000_device::btst_imm8_aips_dpm() // 0818 fff8 } } -void m68000_device::btst_imm8_pais_dpm() // 0820 fff8 +void m68000_mcu_device::btst_imm8_pais_dpm() // 0820 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -22588,7 +22588,7 @@ void m68000_device::btst_imm8_pais_dpm() // 0820 fff8 } } -void m68000_device::btst_imm8_das_dpm() // 0828 fff8 +void m68000_mcu_device::btst_imm8_das_dpm() // 0828 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -22712,7 +22712,7 @@ void m68000_device::btst_imm8_das_dpm() // 0828 fff8 } } -void m68000_device::btst_imm8_dais_dpm() // 0830 fff8 +void m68000_mcu_device::btst_imm8_dais_dpm() // 0830 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -22879,7 +22879,7 @@ adsw2: } } -void m68000_device::btst_imm8_adr16_dpm() // 0838 ffff +void m68000_mcu_device::btst_imm8_adr16_dpm() // 0838 ffff { switch(m_inst_substate) { case 0: @@ -23002,7 +23002,7 @@ void m68000_device::btst_imm8_adr16_dpm() // 0838 ffff } } -void m68000_device::btst_imm8_adr32_dpm() // 0839 ffff +void m68000_mcu_device::btst_imm8_adr32_dpm() // 0839 ffff { switch(m_inst_substate) { case 0: @@ -23150,7 +23150,7 @@ void m68000_device::btst_imm8_adr32_dpm() // 0839 ffff } } -void m68000_device::btst_imm8_dpc_dpm() // 083a ffff +void m68000_mcu_device::btst_imm8_dpc_dpm() // 083a ffff { switch(m_inst_substate) { case 0: @@ -23273,7 +23273,7 @@ void m68000_device::btst_imm8_dpc_dpm() // 083a ffff } } -void m68000_device::btst_imm8_dpci_dpm() // 083b ffff +void m68000_mcu_device::btst_imm8_dpci_dpm() // 083b ffff { switch(m_inst_substate) { case 0: @@ -23439,7 +23439,7 @@ adsw2: } } -void m68000_device::bchg_imm8_ds_dpm() // 0840 fff8 +void m68000_mcu_device::bchg_imm8_ds_dpm() // 0840 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -23549,7 +23549,7 @@ bcsr3: } } -void m68000_device::bchg_imm8_ais_dpm() // 0850 fff8 +void m68000_mcu_device::bchg_imm8_ais_dpm() // 0850 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -23664,7 +23664,7 @@ void m68000_device::bchg_imm8_ais_dpm() // 0850 fff8 } } -void m68000_device::bchg_imm8_aips_dpm() // 0858 fff8 +void m68000_mcu_device::bchg_imm8_aips_dpm() // 0858 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -23784,7 +23784,7 @@ void m68000_device::bchg_imm8_aips_dpm() // 0858 fff8 } } -void m68000_device::bchg_imm8_pais_dpm() // 0860 fff8 +void m68000_mcu_device::bchg_imm8_pais_dpm() // 0860 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -23906,7 +23906,7 @@ void m68000_device::bchg_imm8_pais_dpm() // 0860 fff8 } } -void m68000_device::bchg_imm8_das_dpm() // 0868 fff8 +void m68000_mcu_device::bchg_imm8_das_dpm() // 0868 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -24047,7 +24047,7 @@ void m68000_device::bchg_imm8_das_dpm() // 0868 fff8 } } -void m68000_device::bchg_imm8_dais_dpm() // 0870 fff8 +void m68000_mcu_device::bchg_imm8_dais_dpm() // 0870 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -24231,7 +24231,7 @@ adsw2: } } -void m68000_device::bchg_imm8_adr16_dpm() // 0878 ffff +void m68000_mcu_device::bchg_imm8_adr16_dpm() // 0878 ffff { switch(m_inst_substate) { case 0: @@ -24371,7 +24371,7 @@ void m68000_device::bchg_imm8_adr16_dpm() // 0878 ffff } } -void m68000_device::bchg_imm8_adr32_dpm() // 0879 ffff +void m68000_mcu_device::bchg_imm8_adr32_dpm() // 0879 ffff { switch(m_inst_substate) { case 0: @@ -24536,7 +24536,7 @@ void m68000_device::bchg_imm8_adr32_dpm() // 0879 ffff } } -void m68000_device::bclr_imm8_ds_dpm() // 0880 fff8 +void m68000_mcu_device::bclr_imm8_ds_dpm() // 0880 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -24654,7 +24654,7 @@ bclr3: } } -void m68000_device::bclr_imm8_ais_dpm() // 0890 fff8 +void m68000_mcu_device::bclr_imm8_ais_dpm() // 0890 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -24773,7 +24773,7 @@ void m68000_device::bclr_imm8_ais_dpm() // 0890 fff8 } } -void m68000_device::bclr_imm8_aips_dpm() // 0898 fff8 +void m68000_mcu_device::bclr_imm8_aips_dpm() // 0898 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -24897,7 +24897,7 @@ void m68000_device::bclr_imm8_aips_dpm() // 0898 fff8 } } -void m68000_device::bclr_imm8_pais_dpm() // 08a0 fff8 +void m68000_mcu_device::bclr_imm8_pais_dpm() // 08a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -25023,7 +25023,7 @@ void m68000_device::bclr_imm8_pais_dpm() // 08a0 fff8 } } -void m68000_device::bclr_imm8_das_dpm() // 08a8 fff8 +void m68000_mcu_device::bclr_imm8_das_dpm() // 08a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -25168,7 +25168,7 @@ void m68000_device::bclr_imm8_das_dpm() // 08a8 fff8 } } -void m68000_device::bclr_imm8_dais_dpm() // 08b0 fff8 +void m68000_mcu_device::bclr_imm8_dais_dpm() // 08b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -25356,7 +25356,7 @@ adsw2: } } -void m68000_device::bclr_imm8_adr16_dpm() // 08b8 ffff +void m68000_mcu_device::bclr_imm8_adr16_dpm() // 08b8 ffff { switch(m_inst_substate) { case 0: @@ -25500,7 +25500,7 @@ void m68000_device::bclr_imm8_adr16_dpm() // 08b8 ffff } } -void m68000_device::bclr_imm8_adr32_dpm() // 08b9 ffff +void m68000_mcu_device::bclr_imm8_adr32_dpm() // 08b9 ffff { switch(m_inst_substate) { case 0: @@ -25669,7 +25669,7 @@ void m68000_device::bclr_imm8_adr32_dpm() // 08b9 ffff } } -void m68000_device::bset_imm8_ds_dpm() // 08c0 fff8 +void m68000_mcu_device::bset_imm8_ds_dpm() // 08c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -25779,7 +25779,7 @@ bcsr3: } } -void m68000_device::bset_imm8_ais_dpm() // 08d0 fff8 +void m68000_mcu_device::bset_imm8_ais_dpm() // 08d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -25894,7 +25894,7 @@ void m68000_device::bset_imm8_ais_dpm() // 08d0 fff8 } } -void m68000_device::bset_imm8_aips_dpm() // 08d8 fff8 +void m68000_mcu_device::bset_imm8_aips_dpm() // 08d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -26014,7 +26014,7 @@ void m68000_device::bset_imm8_aips_dpm() // 08d8 fff8 } } -void m68000_device::bset_imm8_pais_dpm() // 08e0 fff8 +void m68000_mcu_device::bset_imm8_pais_dpm() // 08e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -26136,7 +26136,7 @@ void m68000_device::bset_imm8_pais_dpm() // 08e0 fff8 } } -void m68000_device::bset_imm8_das_dpm() // 08e8 fff8 +void m68000_mcu_device::bset_imm8_das_dpm() // 08e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -26277,7 +26277,7 @@ void m68000_device::bset_imm8_das_dpm() // 08e8 fff8 } } -void m68000_device::bset_imm8_dais_dpm() // 08f0 fff8 +void m68000_mcu_device::bset_imm8_dais_dpm() // 08f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -26461,7 +26461,7 @@ adsw2: } } -void m68000_device::bset_imm8_adr16_dpm() // 08f8 ffff +void m68000_mcu_device::bset_imm8_adr16_dpm() // 08f8 ffff { switch(m_inst_substate) { case 0: @@ -26601,7 +26601,7 @@ void m68000_device::bset_imm8_adr16_dpm() // 08f8 ffff } } -void m68000_device::bset_imm8_adr32_dpm() // 08f9 ffff +void m68000_mcu_device::bset_imm8_adr32_dpm() // 08f9 ffff { switch(m_inst_substate) { case 0: @@ -26766,7 +26766,7 @@ void m68000_device::bset_imm8_adr32_dpm() // 08f9 ffff } } -void m68000_device::eori_b_imm8_ds_dpm() // 0a00 fff8 +void m68000_mcu_device::eori_b_imm8_ds_dpm() // 0a00 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -26841,7 +26841,7 @@ void m68000_device::eori_b_imm8_ds_dpm() // 0a00 fff8 } } -void m68000_device::eori_b_imm8_ais_dpm() // 0a10 fff8 +void m68000_mcu_device::eori_b_imm8_ais_dpm() // 0a10 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -26955,7 +26955,7 @@ void m68000_device::eori_b_imm8_ais_dpm() // 0a10 fff8 } } -void m68000_device::eori_b_imm8_aips_dpm() // 0a18 fff8 +void m68000_mcu_device::eori_b_imm8_aips_dpm() // 0a18 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -27074,7 +27074,7 @@ void m68000_device::eori_b_imm8_aips_dpm() // 0a18 fff8 } } -void m68000_device::eori_b_imm8_pais_dpm() // 0a20 fff8 +void m68000_mcu_device::eori_b_imm8_pais_dpm() // 0a20 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -27195,7 +27195,7 @@ void m68000_device::eori_b_imm8_pais_dpm() // 0a20 fff8 } } -void m68000_device::eori_b_imm8_das_dpm() // 0a28 fff8 +void m68000_mcu_device::eori_b_imm8_das_dpm() // 0a28 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -27335,7 +27335,7 @@ void m68000_device::eori_b_imm8_das_dpm() // 0a28 fff8 } } -void m68000_device::eori_b_imm8_dais_dpm() // 0a30 fff8 +void m68000_mcu_device::eori_b_imm8_dais_dpm() // 0a30 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -27518,7 +27518,7 @@ adsw2: } } -void m68000_device::eori_b_imm8_adr16_dpm() // 0a38 ffff +void m68000_mcu_device::eori_b_imm8_adr16_dpm() // 0a38 ffff { switch(m_inst_substate) { case 0: @@ -27657,7 +27657,7 @@ void m68000_device::eori_b_imm8_adr16_dpm() // 0a38 ffff } } -void m68000_device::eori_b_imm8_adr32_dpm() // 0a39 ffff +void m68000_mcu_device::eori_b_imm8_adr32_dpm() // 0a39 ffff { switch(m_inst_substate) { case 0: @@ -27821,7 +27821,7 @@ void m68000_device::eori_b_imm8_adr32_dpm() // 0a39 ffff } } -void m68000_device::eori_imm8_ccr_dpm() // 0a3c ffff +void m68000_mcu_device::eori_imm8_ccr_dpm() // 0a3c ffff { switch(m_inst_substate) { case 0: @@ -27939,7 +27939,7 @@ void m68000_device::eori_imm8_ccr_dpm() // 0a3c ffff } } -void m68000_device::eori_w_imm16_ds_dpm() // 0a40 fff8 +void m68000_mcu_device::eori_w_imm16_ds_dpm() // 0a40 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -28014,7 +28014,7 @@ void m68000_device::eori_w_imm16_ds_dpm() // 0a40 fff8 } } -void m68000_device::eori_w_imm16_ais_dpm() // 0a50 fff8 +void m68000_mcu_device::eori_w_imm16_ais_dpm() // 0a50 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -28138,7 +28138,7 @@ void m68000_device::eori_w_imm16_ais_dpm() // 0a50 fff8 } } -void m68000_device::eori_w_imm16_aips_dpm() // 0a58 fff8 +void m68000_mcu_device::eori_w_imm16_aips_dpm() // 0a58 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -28267,7 +28267,7 @@ void m68000_device::eori_w_imm16_aips_dpm() // 0a58 fff8 } } -void m68000_device::eori_w_imm16_pais_dpm() // 0a60 fff8 +void m68000_mcu_device::eori_w_imm16_pais_dpm() // 0a60 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -28398,7 +28398,7 @@ void m68000_device::eori_w_imm16_pais_dpm() // 0a60 fff8 } } -void m68000_device::eori_w_imm16_das_dpm() // 0a68 fff8 +void m68000_mcu_device::eori_w_imm16_das_dpm() // 0a68 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -28548,7 +28548,7 @@ void m68000_device::eori_w_imm16_das_dpm() // 0a68 fff8 } } -void m68000_device::eori_w_imm16_dais_dpm() // 0a70 fff8 +void m68000_mcu_device::eori_w_imm16_dais_dpm() // 0a70 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -28741,7 +28741,7 @@ adsw2: } } -void m68000_device::eori_w_imm16_adr16_dpm() // 0a78 ffff +void m68000_mcu_device::eori_w_imm16_adr16_dpm() // 0a78 ffff { switch(m_inst_substate) { case 0: @@ -28890,7 +28890,7 @@ void m68000_device::eori_w_imm16_adr16_dpm() // 0a78 ffff } } -void m68000_device::eori_w_imm16_adr32_dpm() // 0a79 ffff +void m68000_mcu_device::eori_w_imm16_adr32_dpm() // 0a79 ffff { switch(m_inst_substate) { case 0: @@ -29064,7 +29064,7 @@ void m68000_device::eori_w_imm16_adr32_dpm() // 0a79 ffff } } -void m68000_device::eori_i16u_sr_dpm() // 0a7c ffff +void m68000_mcu_device::eori_i16u_sr_dpm() // 0a7c ffff { switch(m_inst_substate) { case 0: @@ -29188,7 +29188,7 @@ void m68000_device::eori_i16u_sr_dpm() // 0a7c ffff } } -void m68000_device::eori_l_imm32_ds_dpm() // 0a80 fff8 +void m68000_mcu_device::eori_l_imm32_ds_dpm() // 0a80 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -29297,7 +29297,7 @@ void m68000_device::eori_l_imm32_ds_dpm() // 0a80 fff8 } } -void m68000_device::eori_l_imm32_ais_dpm() // 0a90 fff8 +void m68000_mcu_device::eori_l_imm32_ais_dpm() // 0a90 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -29496,7 +29496,7 @@ void m68000_device::eori_l_imm32_ais_dpm() // 0a90 fff8 } } -void m68000_device::eori_l_imm32_aips_dpm() // 0a98 fff8 +void m68000_mcu_device::eori_l_imm32_aips_dpm() // 0a98 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -29699,7 +29699,7 @@ void m68000_device::eori_l_imm32_aips_dpm() // 0a98 fff8 } } -void m68000_device::eori_l_imm32_pais_dpm() // 0aa0 fff8 +void m68000_mcu_device::eori_l_imm32_pais_dpm() // 0aa0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -29903,7 +29903,7 @@ void m68000_device::eori_l_imm32_pais_dpm() // 0aa0 fff8 } } -void m68000_device::eori_l_imm32_das_dpm() // 0aa8 fff8 +void m68000_mcu_device::eori_l_imm32_das_dpm() // 0aa8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -30127,7 +30127,7 @@ void m68000_device::eori_l_imm32_das_dpm() // 0aa8 fff8 } } -void m68000_device::eori_l_imm32_dais_dpm() // 0ab0 fff8 +void m68000_mcu_device::eori_l_imm32_dais_dpm() // 0ab0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -30394,7 +30394,7 @@ adsl2: } } -void m68000_device::eori_l_imm32_adr16_dpm() // 0ab8 ffff +void m68000_mcu_device::eori_l_imm32_adr16_dpm() // 0ab8 ffff { switch(m_inst_substate) { case 0: @@ -30621,7 +30621,7 @@ void m68000_device::eori_l_imm32_adr16_dpm() // 0ab8 ffff } } -void m68000_device::eori_l_imm32_adr32_dpm() // 0ab9 ffff +void m68000_mcu_device::eori_l_imm32_adr32_dpm() // 0ab9 ffff { switch(m_inst_substate) { case 0: @@ -30873,7 +30873,7 @@ void m68000_device::eori_l_imm32_adr32_dpm() // 0ab9 ffff } } -void m68000_device::cmpi_b_imm8_ds_dpm() // 0c00 fff8 +void m68000_mcu_device::cmpi_b_imm8_ds_dpm() // 0c00 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -30945,7 +30945,7 @@ void m68000_device::cmpi_b_imm8_ds_dpm() // 0c00 fff8 } } -void m68000_device::cmpi_b_imm8_ais_dpm() // 0c10 fff8 +void m68000_mcu_device::cmpi_b_imm8_ais_dpm() // 0c10 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -31040,7 +31040,7 @@ void m68000_device::cmpi_b_imm8_ais_dpm() // 0c10 fff8 } } -void m68000_device::cmpi_b_imm8_aips_dpm() // 0c18 fff8 +void m68000_mcu_device::cmpi_b_imm8_aips_dpm() // 0c18 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -31139,7 +31139,7 @@ void m68000_device::cmpi_b_imm8_aips_dpm() // 0c18 fff8 } } -void m68000_device::cmpi_b_imm8_pais_dpm() // 0c20 fff8 +void m68000_mcu_device::cmpi_b_imm8_pais_dpm() // 0c20 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -31240,7 +31240,7 @@ void m68000_device::cmpi_b_imm8_pais_dpm() // 0c20 fff8 } } -void m68000_device::cmpi_b_imm8_das_dpm() // 0c28 fff8 +void m68000_mcu_device::cmpi_b_imm8_das_dpm() // 0c28 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -31360,7 +31360,7 @@ void m68000_device::cmpi_b_imm8_das_dpm() // 0c28 fff8 } } -void m68000_device::cmpi_b_imm8_dais_dpm() // 0c30 fff8 +void m68000_mcu_device::cmpi_b_imm8_dais_dpm() // 0c30 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -31521,7 +31521,7 @@ adsw2: } } -void m68000_device::cmpi_b_imm8_adr16_dpm() // 0c38 ffff +void m68000_mcu_device::cmpi_b_imm8_adr16_dpm() // 0c38 ffff { switch(m_inst_substate) { case 0: @@ -31640,7 +31640,7 @@ void m68000_device::cmpi_b_imm8_adr16_dpm() // 0c38 ffff } } -void m68000_device::cmpi_b_imm8_adr32_dpm() // 0c39 ffff +void m68000_mcu_device::cmpi_b_imm8_adr32_dpm() // 0c39 ffff { switch(m_inst_substate) { case 0: @@ -31783,7 +31783,7 @@ void m68000_device::cmpi_b_imm8_adr32_dpm() // 0c39 ffff } } -void m68000_device::cmpi_w_imm16_ds_dpm() // 0c40 fff8 +void m68000_mcu_device::cmpi_w_imm16_ds_dpm() // 0c40 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -31855,7 +31855,7 @@ void m68000_device::cmpi_w_imm16_ds_dpm() // 0c40 fff8 } } -void m68000_device::cmpi_w_imm16_ais_dpm() // 0c50 fff8 +void m68000_mcu_device::cmpi_w_imm16_ais_dpm() // 0c50 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -31954,7 +31954,7 @@ void m68000_device::cmpi_w_imm16_ais_dpm() // 0c50 fff8 } } -void m68000_device::cmpi_w_imm16_aips_dpm() // 0c58 fff8 +void m68000_mcu_device::cmpi_w_imm16_aips_dpm() // 0c58 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -32057,7 +32057,7 @@ void m68000_device::cmpi_w_imm16_aips_dpm() // 0c58 fff8 } } -void m68000_device::cmpi_w_imm16_pais_dpm() // 0c60 fff8 +void m68000_mcu_device::cmpi_w_imm16_pais_dpm() // 0c60 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -32162,7 +32162,7 @@ void m68000_device::cmpi_w_imm16_pais_dpm() // 0c60 fff8 } } -void m68000_device::cmpi_w_imm16_das_dpm() // 0c68 fff8 +void m68000_mcu_device::cmpi_w_imm16_das_dpm() // 0c68 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -32286,7 +32286,7 @@ void m68000_device::cmpi_w_imm16_das_dpm() // 0c68 fff8 } } -void m68000_device::cmpi_w_imm16_dais_dpm() // 0c70 fff8 +void m68000_mcu_device::cmpi_w_imm16_dais_dpm() // 0c70 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -32451,7 +32451,7 @@ adsw2: } } -void m68000_device::cmpi_w_imm16_adr16_dpm() // 0c78 ffff +void m68000_mcu_device::cmpi_w_imm16_adr16_dpm() // 0c78 ffff { switch(m_inst_substate) { case 0: @@ -32574,7 +32574,7 @@ void m68000_device::cmpi_w_imm16_adr16_dpm() // 0c78 ffff } } -void m68000_device::cmpi_w_imm16_adr32_dpm() // 0c79 ffff +void m68000_mcu_device::cmpi_w_imm16_adr32_dpm() // 0c79 ffff { switch(m_inst_substate) { case 0: @@ -32721,7 +32721,7 @@ void m68000_device::cmpi_w_imm16_adr32_dpm() // 0c79 ffff } } -void m68000_device::cmpi_l_imm32_ds_dpm() // 0c80 fff8 +void m68000_mcu_device::cmpi_l_imm32_ds_dpm() // 0c80 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -32823,7 +32823,7 @@ void m68000_device::cmpi_l_imm32_ds_dpm() // 0c80 fff8 } } -void m68000_device::cmpi_l_imm32_ais_dpm() // 0c90 fff8 +void m68000_mcu_device::cmpi_l_imm32_ais_dpm() // 0c90 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -32973,7 +32973,7 @@ void m68000_device::cmpi_l_imm32_ais_dpm() // 0c90 fff8 } } -void m68000_device::cmpi_l_imm32_aips_dpm() // 0c98 fff8 +void m68000_mcu_device::cmpi_l_imm32_aips_dpm() // 0c98 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -33126,7 +33126,7 @@ void m68000_device::cmpi_l_imm32_aips_dpm() // 0c98 fff8 } } -void m68000_device::cmpi_l_imm32_pais_dpm() // 0ca0 fff8 +void m68000_mcu_device::cmpi_l_imm32_pais_dpm() // 0ca0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -33280,7 +33280,7 @@ void m68000_device::cmpi_l_imm32_pais_dpm() // 0ca0 fff8 } } -void m68000_device::cmpi_l_imm32_das_dpm() // 0ca8 fff8 +void m68000_mcu_device::cmpi_l_imm32_das_dpm() // 0ca8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -33454,7 +33454,7 @@ void m68000_device::cmpi_l_imm32_das_dpm() // 0ca8 fff8 } } -void m68000_device::cmpi_l_imm32_dais_dpm() // 0cb0 fff8 +void m68000_mcu_device::cmpi_l_imm32_dais_dpm() // 0cb0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -33669,7 +33669,7 @@ adsl2: } } -void m68000_device::cmpi_l_imm32_adr16_dpm() // 0cb8 ffff +void m68000_mcu_device::cmpi_l_imm32_adr16_dpm() // 0cb8 ffff { switch(m_inst_substate) { case 0: @@ -33845,7 +33845,7 @@ void m68000_device::cmpi_l_imm32_adr16_dpm() // 0cb8 ffff } } -void m68000_device::cmpi_l_imm32_adr32_dpm() // 0cb9 ffff +void m68000_mcu_device::cmpi_l_imm32_adr32_dpm() // 0cb9 ffff { switch(m_inst_substate) { case 0: @@ -34045,7 +34045,7 @@ void m68000_device::cmpi_l_imm32_adr32_dpm() // 0cb9 ffff } } -void m68000_device::move_b_ds_dd_dpm() // 1000 f1f8 +void m68000_mcu_device::move_b_ds_dd_dpm() // 1000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -34095,7 +34095,7 @@ void m68000_device::move_b_ds_dd_dpm() // 1000 f1f8 } } -void m68000_device::move_b_ais_dd_dpm() // 1010 f1f8 +void m68000_mcu_device::move_b_ais_dd_dpm() // 1010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -34166,7 +34166,7 @@ void m68000_device::move_b_ais_dd_dpm() // 1010 f1f8 } } -void m68000_device::move_b_aips_dd_dpm() // 1018 f1f8 +void m68000_mcu_device::move_b_aips_dd_dpm() // 1018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -34241,7 +34241,7 @@ void m68000_device::move_b_aips_dd_dpm() // 1018 f1f8 } } -void m68000_device::move_b_pais_dd_dpm() // 1020 f1f8 +void m68000_mcu_device::move_b_pais_dd_dpm() // 1020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -34318,7 +34318,7 @@ void m68000_device::move_b_pais_dd_dpm() // 1020 f1f8 } } -void m68000_device::move_b_das_dd_dpm() // 1028 f1f8 +void m68000_mcu_device::move_b_das_dd_dpm() // 1028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -34414,7 +34414,7 @@ void m68000_device::move_b_das_dd_dpm() // 1028 f1f8 } } -void m68000_device::move_b_dais_dd_dpm() // 1030 f1f8 +void m68000_mcu_device::move_b_dais_dd_dpm() // 1030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -34551,7 +34551,7 @@ adsw2: } } -void m68000_device::move_b_adr16_dd_dpm() // 1038 f1ff +void m68000_mcu_device::move_b_adr16_dd_dpm() // 1038 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -34646,7 +34646,7 @@ void m68000_device::move_b_adr16_dd_dpm() // 1038 f1ff } } -void m68000_device::move_b_adr32_dd_dpm() // 1039 f1ff +void m68000_mcu_device::move_b_adr32_dd_dpm() // 1039 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -34765,7 +34765,7 @@ void m68000_device::move_b_adr32_dd_dpm() // 1039 f1ff } } -void m68000_device::move_b_dpc_dd_dpm() // 103a f1ff +void m68000_mcu_device::move_b_dpc_dd_dpm() // 103a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -34860,7 +34860,7 @@ void m68000_device::move_b_dpc_dd_dpm() // 103a f1ff } } -void m68000_device::move_b_dpci_dd_dpm() // 103b f1ff +void m68000_mcu_device::move_b_dpci_dd_dpm() // 103b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -34996,7 +34996,7 @@ adsw2: } } -void m68000_device::move_b_imm8_dd_dpm() // 103c f1ff +void m68000_mcu_device::move_b_imm8_dd_dpm() // 103c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -35072,7 +35072,7 @@ void m68000_device::move_b_imm8_dd_dpm() // 103c f1ff } } -void m68000_device::move_b_ds_aid_dpm() // 1080 f1f8 +void m68000_mcu_device::move_b_ds_aid_dpm() // 1080 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -35137,7 +35137,7 @@ void m68000_device::move_b_ds_aid_dpm() // 1080 f1f8 } } -void m68000_device::move_b_ais_aid_dpm() // 1090 f1f8 +void m68000_mcu_device::move_b_ais_aid_dpm() // 1090 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -35224,7 +35224,7 @@ void m68000_device::move_b_ais_aid_dpm() // 1090 f1f8 } } -void m68000_device::move_b_aips_aid_dpm() // 1098 f1f8 +void m68000_mcu_device::move_b_aips_aid_dpm() // 1098 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -35315,7 +35315,7 @@ void m68000_device::move_b_aips_aid_dpm() // 1098 f1f8 } } -void m68000_device::move_b_pais_aid_dpm() // 10a0 f1f8 +void m68000_mcu_device::move_b_pais_aid_dpm() // 10a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -35408,7 +35408,7 @@ void m68000_device::move_b_pais_aid_dpm() // 10a0 f1f8 } } -void m68000_device::move_b_das_aid_dpm() // 10a8 f1f8 +void m68000_mcu_device::move_b_das_aid_dpm() // 10a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -35520,7 +35520,7 @@ void m68000_device::move_b_das_aid_dpm() // 10a8 f1f8 } } -void m68000_device::move_b_dais_aid_dpm() // 10b0 f1f8 +void m68000_mcu_device::move_b_dais_aid_dpm() // 10b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -35673,7 +35673,7 @@ adsw2: } } -void m68000_device::move_b_adr16_aid_dpm() // 10b8 f1ff +void m68000_mcu_device::move_b_adr16_aid_dpm() // 10b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -35784,7 +35784,7 @@ void m68000_device::move_b_adr16_aid_dpm() // 10b8 f1ff } } -void m68000_device::move_b_adr32_aid_dpm() // 10b9 f1ff +void m68000_mcu_device::move_b_adr32_aid_dpm() // 10b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -35919,7 +35919,7 @@ void m68000_device::move_b_adr32_aid_dpm() // 10b9 f1ff } } -void m68000_device::move_b_dpc_aid_dpm() // 10ba f1ff +void m68000_mcu_device::move_b_dpc_aid_dpm() // 10ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -36030,7 +36030,7 @@ void m68000_device::move_b_dpc_aid_dpm() // 10ba f1ff } } -void m68000_device::move_b_dpci_aid_dpm() // 10bb f1ff +void m68000_mcu_device::move_b_dpci_aid_dpm() // 10bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -36182,7 +36182,7 @@ adsw2: } } -void m68000_device::move_b_imm8_aid_dpm() // 10bc f1ff +void m68000_mcu_device::move_b_imm8_aid_dpm() // 10bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -36273,7 +36273,7 @@ void m68000_device::move_b_imm8_aid_dpm() // 10bc f1ff } } -void m68000_device::move_b_ds_aipd_dpm() // 10c0 f1f8 +void m68000_mcu_device::move_b_ds_aipd_dpm() // 10c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -36337,7 +36337,7 @@ void m68000_device::move_b_ds_aipd_dpm() // 10c0 f1f8 } } -void m68000_device::move_b_ais_aipd_dpm() // 10d0 f1f8 +void m68000_mcu_device::move_b_ais_aipd_dpm() // 10d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -36424,7 +36424,7 @@ void m68000_device::move_b_ais_aipd_dpm() // 10d0 f1f8 } } -void m68000_device::move_b_aips_aipd_dpm() // 10d8 f1f8 +void m68000_mcu_device::move_b_aips_aipd_dpm() // 10d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -36515,7 +36515,7 @@ void m68000_device::move_b_aips_aipd_dpm() // 10d8 f1f8 } } -void m68000_device::move_b_pais_aipd_dpm() // 10e0 f1f8 +void m68000_mcu_device::move_b_pais_aipd_dpm() // 10e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -36608,7 +36608,7 @@ void m68000_device::move_b_pais_aipd_dpm() // 10e0 f1f8 } } -void m68000_device::move_b_das_aipd_dpm() // 10e8 f1f8 +void m68000_mcu_device::move_b_das_aipd_dpm() // 10e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -36720,7 +36720,7 @@ void m68000_device::move_b_das_aipd_dpm() // 10e8 f1f8 } } -void m68000_device::move_b_dais_aipd_dpm() // 10f0 f1f8 +void m68000_mcu_device::move_b_dais_aipd_dpm() // 10f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -36873,7 +36873,7 @@ adsw2: } } -void m68000_device::move_b_adr16_aipd_dpm() // 10f8 f1ff +void m68000_mcu_device::move_b_adr16_aipd_dpm() // 10f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -36984,7 +36984,7 @@ void m68000_device::move_b_adr16_aipd_dpm() // 10f8 f1ff } } -void m68000_device::move_b_adr32_aipd_dpm() // 10f9 f1ff +void m68000_mcu_device::move_b_adr32_aipd_dpm() // 10f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -37119,7 +37119,7 @@ void m68000_device::move_b_adr32_aipd_dpm() // 10f9 f1ff } } -void m68000_device::move_b_dpc_aipd_dpm() // 10fa f1ff +void m68000_mcu_device::move_b_dpc_aipd_dpm() // 10fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -37230,7 +37230,7 @@ void m68000_device::move_b_dpc_aipd_dpm() // 10fa f1ff } } -void m68000_device::move_b_dpci_aipd_dpm() // 10fb f1ff +void m68000_mcu_device::move_b_dpci_aipd_dpm() // 10fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -37382,7 +37382,7 @@ adsw2: } } -void m68000_device::move_b_imm8_aipd_dpm() // 10fc f1ff +void m68000_mcu_device::move_b_imm8_aipd_dpm() // 10fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -37472,7 +37472,7 @@ void m68000_device::move_b_imm8_aipd_dpm() // 10fc f1ff } } -void m68000_device::move_b_ds_paid_dpm() // 1100 f1f8 +void m68000_mcu_device::move_b_ds_paid_dpm() // 1100 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -37536,7 +37536,7 @@ void m68000_device::move_b_ds_paid_dpm() // 1100 f1f8 } } -void m68000_device::move_b_ais_paid_dpm() // 1110 f1f8 +void m68000_mcu_device::move_b_ais_paid_dpm() // 1110 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -37623,7 +37623,7 @@ void m68000_device::move_b_ais_paid_dpm() // 1110 f1f8 } } -void m68000_device::move_b_aips_paid_dpm() // 1118 f1f8 +void m68000_mcu_device::move_b_aips_paid_dpm() // 1118 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -37714,7 +37714,7 @@ void m68000_device::move_b_aips_paid_dpm() // 1118 f1f8 } } -void m68000_device::move_b_pais_paid_dpm() // 1120 f1f8 +void m68000_mcu_device::move_b_pais_paid_dpm() // 1120 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -37807,7 +37807,7 @@ void m68000_device::move_b_pais_paid_dpm() // 1120 f1f8 } } -void m68000_device::move_b_das_paid_dpm() // 1128 f1f8 +void m68000_mcu_device::move_b_das_paid_dpm() // 1128 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -37919,7 +37919,7 @@ void m68000_device::move_b_das_paid_dpm() // 1128 f1f8 } } -void m68000_device::move_b_dais_paid_dpm() // 1130 f1f8 +void m68000_mcu_device::move_b_dais_paid_dpm() // 1130 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -38072,7 +38072,7 @@ adsw2: } } -void m68000_device::move_b_adr16_paid_dpm() // 1138 f1ff +void m68000_mcu_device::move_b_adr16_paid_dpm() // 1138 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -38183,7 +38183,7 @@ void m68000_device::move_b_adr16_paid_dpm() // 1138 f1ff } } -void m68000_device::move_b_adr32_paid_dpm() // 1139 f1ff +void m68000_mcu_device::move_b_adr32_paid_dpm() // 1139 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -38318,7 +38318,7 @@ void m68000_device::move_b_adr32_paid_dpm() // 1139 f1ff } } -void m68000_device::move_b_dpc_paid_dpm() // 113a f1ff +void m68000_mcu_device::move_b_dpc_paid_dpm() // 113a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -38429,7 +38429,7 @@ void m68000_device::move_b_dpc_paid_dpm() // 113a f1ff } } -void m68000_device::move_b_dpci_paid_dpm() // 113b f1ff +void m68000_mcu_device::move_b_dpci_paid_dpm() // 113b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -38581,7 +38581,7 @@ adsw2: } } -void m68000_device::move_b_imm8_paid_dpm() // 113c f1ff +void m68000_mcu_device::move_b_imm8_paid_dpm() // 113c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -38671,7 +38671,7 @@ void m68000_device::move_b_imm8_paid_dpm() // 113c f1ff } } -void m68000_device::move_b_ds_dad_dpm() // 1140 f1f8 +void m68000_mcu_device::move_b_ds_dad_dpm() // 1140 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -38760,7 +38760,7 @@ void m68000_device::move_b_ds_dad_dpm() // 1140 f1f8 } } -void m68000_device::move_b_ais_dad_dpm() // 1150 f1f8 +void m68000_mcu_device::move_b_ais_dad_dpm() // 1150 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -38876,7 +38876,7 @@ void m68000_device::move_b_ais_dad_dpm() // 1150 f1f8 } } -void m68000_device::move_b_aips_dad_dpm() // 1158 f1f8 +void m68000_mcu_device::move_b_aips_dad_dpm() // 1158 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -38996,7 +38996,7 @@ void m68000_device::move_b_aips_dad_dpm() // 1158 f1f8 } } -void m68000_device::move_b_pais_dad_dpm() // 1160 f1f8 +void m68000_mcu_device::move_b_pais_dad_dpm() // 1160 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -39118,7 +39118,7 @@ void m68000_device::move_b_pais_dad_dpm() // 1160 f1f8 } } -void m68000_device::move_b_das_dad_dpm() // 1168 f1f8 +void m68000_mcu_device::move_b_das_dad_dpm() // 1168 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -39259,7 +39259,7 @@ void m68000_device::move_b_das_dad_dpm() // 1168 f1f8 } } -void m68000_device::move_b_dais_dad_dpm() // 1170 f1f8 +void m68000_mcu_device::move_b_dais_dad_dpm() // 1170 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -39441,7 +39441,7 @@ adsw2: } } -void m68000_device::move_b_adr16_dad_dpm() // 1178 f1ff +void m68000_mcu_device::move_b_adr16_dad_dpm() // 1178 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -39581,7 +39581,7 @@ void m68000_device::move_b_adr16_dad_dpm() // 1178 f1ff } } -void m68000_device::move_b_adr32_dad_dpm() // 1179 f1ff +void m68000_mcu_device::move_b_adr32_dad_dpm() // 1179 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -39745,7 +39745,7 @@ void m68000_device::move_b_adr32_dad_dpm() // 1179 f1ff } } -void m68000_device::move_b_dpc_dad_dpm() // 117a f1ff +void m68000_mcu_device::move_b_dpc_dad_dpm() // 117a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -39885,7 +39885,7 @@ void m68000_device::move_b_dpc_dad_dpm() // 117a f1ff } } -void m68000_device::move_b_dpci_dad_dpm() // 117b f1ff +void m68000_mcu_device::move_b_dpci_dad_dpm() // 117b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -40066,7 +40066,7 @@ adsw2: } } -void m68000_device::move_b_imm8_dad_dpm() // 117c f1ff +void m68000_mcu_device::move_b_imm8_dad_dpm() // 117c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -40181,7 +40181,7 @@ void m68000_device::move_b_imm8_dad_dpm() // 117c f1ff } } -void m68000_device::move_b_ds_daid_dpm() // 1180 f1f8 +void m68000_mcu_device::move_b_ds_daid_dpm() // 1180 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -40312,7 +40312,7 @@ rmdw2: } } -void m68000_device::move_b_ais_daid_dpm() // 1190 f1f8 +void m68000_mcu_device::move_b_ais_daid_dpm() // 1190 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -40469,7 +40469,7 @@ maww2: } } -void m68000_device::move_b_aips_daid_dpm() // 1198 f1f8 +void m68000_mcu_device::move_b_aips_daid_dpm() // 1198 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -40630,7 +40630,7 @@ maww2: } } -void m68000_device::move_b_pais_daid_dpm() // 11a0 f1f8 +void m68000_mcu_device::move_b_pais_daid_dpm() // 11a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -40793,7 +40793,7 @@ maww2: } } -void m68000_device::move_b_das_daid_dpm() // 11a8 f1f8 +void m68000_mcu_device::move_b_das_daid_dpm() // 11a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -40975,7 +40975,7 @@ maww2: } } -void m68000_device::move_b_dais_daid_dpm() // 11b0 f1f8 +void m68000_mcu_device::move_b_dais_daid_dpm() // 11b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -41198,7 +41198,7 @@ maww2: } } -void m68000_device::move_b_adr16_daid_dpm() // 11b8 f1ff +void m68000_mcu_device::move_b_adr16_daid_dpm() // 11b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -41379,7 +41379,7 @@ maww2: } } -void m68000_device::move_b_adr32_daid_dpm() // 11b9 f1ff +void m68000_mcu_device::move_b_adr32_daid_dpm() // 11b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -41584,7 +41584,7 @@ maww2: } } -void m68000_device::move_b_dpc_daid_dpm() // 11ba f1ff +void m68000_mcu_device::move_b_dpc_daid_dpm() // 11ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -41765,7 +41765,7 @@ maww2: } } -void m68000_device::move_b_dpci_daid_dpm() // 11bb f1ff +void m68000_mcu_device::move_b_dpci_daid_dpm() // 11bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -41987,7 +41987,7 @@ maww2: } } -void m68000_device::move_b_imm8_daid_dpm() // 11bc f1ff +void m68000_mcu_device::move_b_imm8_daid_dpm() // 11bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -42144,7 +42144,7 @@ rmdw2: } } -void m68000_device::move_b_ds_adr16_dpm() // 11c0 fff8 +void m68000_mcu_device::move_b_ds_adr16_dpm() // 11c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -42237,7 +42237,7 @@ void m68000_device::move_b_ds_adr16_dpm() // 11c0 fff8 } } -void m68000_device::move_b_ais_adr16_dpm() // 11d0 fff8 +void m68000_mcu_device::move_b_ais_adr16_dpm() // 11d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -42352,7 +42352,7 @@ void m68000_device::move_b_ais_adr16_dpm() // 11d0 fff8 } } -void m68000_device::move_b_aips_adr16_dpm() // 11d8 fff8 +void m68000_mcu_device::move_b_aips_adr16_dpm() // 11d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -42471,7 +42471,7 @@ void m68000_device::move_b_aips_adr16_dpm() // 11d8 fff8 } } -void m68000_device::move_b_pais_adr16_dpm() // 11e0 fff8 +void m68000_mcu_device::move_b_pais_adr16_dpm() // 11e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -42592,7 +42592,7 @@ void m68000_device::move_b_pais_adr16_dpm() // 11e0 fff8 } } -void m68000_device::move_b_das_adr16_dpm() // 11e8 fff8 +void m68000_mcu_device::move_b_das_adr16_dpm() // 11e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -42732,7 +42732,7 @@ void m68000_device::move_b_das_adr16_dpm() // 11e8 fff8 } } -void m68000_device::move_b_dais_adr16_dpm() // 11f0 fff8 +void m68000_mcu_device::move_b_dais_adr16_dpm() // 11f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -42913,7 +42913,7 @@ adsw2: } } -void m68000_device::move_b_adr16_adr16_dpm() // 11f8 ffff +void m68000_mcu_device::move_b_adr16_adr16_dpm() // 11f8 ffff { switch(m_inst_substate) { case 0: @@ -43052,7 +43052,7 @@ void m68000_device::move_b_adr16_adr16_dpm() // 11f8 ffff } } -void m68000_device::move_b_adr32_adr16_dpm() // 11f9 ffff +void m68000_mcu_device::move_b_adr32_adr16_dpm() // 11f9 ffff { switch(m_inst_substate) { case 0: @@ -43215,7 +43215,7 @@ void m68000_device::move_b_adr32_adr16_dpm() // 11f9 ffff } } -void m68000_device::move_b_dpc_adr16_dpm() // 11fa ffff +void m68000_mcu_device::move_b_dpc_adr16_dpm() // 11fa ffff { switch(m_inst_substate) { case 0: @@ -43354,7 +43354,7 @@ void m68000_device::move_b_dpc_adr16_dpm() // 11fa ffff } } -void m68000_device::move_b_dpci_adr16_dpm() // 11fb ffff +void m68000_mcu_device::move_b_dpci_adr16_dpm() // 11fb ffff { switch(m_inst_substate) { case 0: @@ -43534,7 +43534,7 @@ adsw2: } } -void m68000_device::move_b_imm8_adr16_dpm() // 11fc ffff +void m68000_mcu_device::move_b_imm8_adr16_dpm() // 11fc ffff { switch(m_inst_substate) { case 0: @@ -43653,7 +43653,7 @@ void m68000_device::move_b_imm8_adr16_dpm() // 11fc ffff } } -void m68000_device::move_b_ds_adr32_dpm() // 13c0 fff8 +void m68000_mcu_device::move_b_ds_adr32_dpm() // 13c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -43770,7 +43770,7 @@ void m68000_device::move_b_ds_adr32_dpm() // 13c0 fff8 } } -void m68000_device::move_b_ais_adr32_dpm() // 13d0 fff8 +void m68000_mcu_device::move_b_ais_adr32_dpm() // 13d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -43908,7 +43908,7 @@ void m68000_device::move_b_ais_adr32_dpm() // 13d0 fff8 } } -void m68000_device::move_b_aips_adr32_dpm() // 13d8 fff8 +void m68000_mcu_device::move_b_aips_adr32_dpm() // 13d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -44050,7 +44050,7 @@ void m68000_device::move_b_aips_adr32_dpm() // 13d8 fff8 } } -void m68000_device::move_b_pais_adr32_dpm() // 13e0 fff8 +void m68000_mcu_device::move_b_pais_adr32_dpm() // 13e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -44194,7 +44194,7 @@ void m68000_device::move_b_pais_adr32_dpm() // 13e0 fff8 } } -void m68000_device::move_b_das_adr32_dpm() // 13e8 fff8 +void m68000_mcu_device::move_b_das_adr32_dpm() // 13e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -44357,7 +44357,7 @@ void m68000_device::move_b_das_adr32_dpm() // 13e8 fff8 } } -void m68000_device::move_b_dais_adr32_dpm() // 13f0 fff8 +void m68000_mcu_device::move_b_dais_adr32_dpm() // 13f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -44561,7 +44561,7 @@ adsw2: } } -void m68000_device::move_b_adr16_adr32_dpm() // 13f8 ffff +void m68000_mcu_device::move_b_adr16_adr32_dpm() // 13f8 ffff { switch(m_inst_substate) { case 0: @@ -44723,7 +44723,7 @@ void m68000_device::move_b_adr16_adr32_dpm() // 13f8 ffff } } -void m68000_device::move_b_adr32_adr32_dpm() // 13f9 ffff +void m68000_mcu_device::move_b_adr32_adr32_dpm() // 13f9 ffff { switch(m_inst_substate) { case 0: @@ -44909,7 +44909,7 @@ void m68000_device::move_b_adr32_adr32_dpm() // 13f9 ffff } } -void m68000_device::move_b_dpc_adr32_dpm() // 13fa ffff +void m68000_mcu_device::move_b_dpc_adr32_dpm() // 13fa ffff { switch(m_inst_substate) { case 0: @@ -45071,7 +45071,7 @@ void m68000_device::move_b_dpc_adr32_dpm() // 13fa ffff } } -void m68000_device::move_b_dpci_adr32_dpm() // 13fb ffff +void m68000_mcu_device::move_b_dpci_adr32_dpm() // 13fb ffff { switch(m_inst_substate) { case 0: @@ -45274,7 +45274,7 @@ adsw2: } } -void m68000_device::move_b_imm8_adr32_dpm() // 13fc ffff +void m68000_mcu_device::move_b_imm8_adr32_dpm() // 13fc ffff { switch(m_inst_substate) { case 0: @@ -45417,7 +45417,7 @@ void m68000_device::move_b_imm8_adr32_dpm() // 13fc ffff } } -void m68000_device::move_l_ds_dd_dpm() // 2000 f1f8 +void m68000_mcu_device::move_l_ds_dd_dpm() // 2000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -45469,7 +45469,7 @@ void m68000_device::move_l_ds_dd_dpm() // 2000 f1f8 } } -void m68000_device::move_l_as_dd_dpm() // 2008 f1f8 +void m68000_mcu_device::move_l_as_dd_dpm() // 2008 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -45521,7 +45521,7 @@ void m68000_device::move_l_as_dd_dpm() // 2008 f1f8 } } -void m68000_device::move_l_ais_dd_dpm() // 2010 f1f8 +void m68000_mcu_device::move_l_ais_dd_dpm() // 2010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -45624,7 +45624,7 @@ void m68000_device::move_l_ais_dd_dpm() // 2010 f1f8 } } -void m68000_device::move_l_aips_dd_dpm() // 2018 f1f8 +void m68000_mcu_device::move_l_aips_dd_dpm() // 2018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -45730,7 +45730,7 @@ void m68000_device::move_l_aips_dd_dpm() // 2018 f1f8 } } -void m68000_device::move_l_pais_dd_dpm() // 2020 f1f8 +void m68000_mcu_device::move_l_pais_dd_dpm() // 2020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -45837,7 +45837,7 @@ void m68000_device::move_l_pais_dd_dpm() // 2020 f1f8 } } -void m68000_device::move_l_das_dd_dpm() // 2028 f1f8 +void m68000_mcu_device::move_l_das_dd_dpm() // 2028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -45964,7 +45964,7 @@ void m68000_device::move_l_das_dd_dpm() // 2028 f1f8 } } -void m68000_device::move_l_dais_dd_dpm() // 2030 f1f8 +void m68000_mcu_device::move_l_dais_dd_dpm() // 2030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -46132,7 +46132,7 @@ adsl2: } } -void m68000_device::move_l_adr16_dd_dpm() // 2038 f1ff +void m68000_mcu_device::move_l_adr16_dd_dpm() // 2038 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -46261,7 +46261,7 @@ void m68000_device::move_l_adr16_dd_dpm() // 2038 f1ff } } -void m68000_device::move_l_adr32_dd_dpm() // 2039 f1ff +void m68000_mcu_device::move_l_adr32_dd_dpm() // 2039 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -46414,7 +46414,7 @@ void m68000_device::move_l_adr32_dd_dpm() // 2039 f1ff } } -void m68000_device::move_l_dpc_dd_dpm() // 203a f1ff +void m68000_mcu_device::move_l_dpc_dd_dpm() // 203a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -46540,7 +46540,7 @@ void m68000_device::move_l_dpc_dd_dpm() // 203a f1ff } } -void m68000_device::move_l_dpci_dd_dpm() // 203b f1ff +void m68000_mcu_device::move_l_dpci_dd_dpm() // 203b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -46707,7 +46707,7 @@ adsl2: } } -void m68000_device::move_l_imm32_dd_dpm() // 203c f1ff +void m68000_mcu_device::move_l_imm32_dd_dpm() // 203c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -46809,7 +46809,7 @@ void m68000_device::move_l_imm32_dd_dpm() // 203c f1ff } } -void m68000_device::movea_l_ds_ad_dpm() // 2040 f1f8 +void m68000_mcu_device::movea_l_ds_ad_dpm() // 2040 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -46859,7 +46859,7 @@ void m68000_device::movea_l_ds_ad_dpm() // 2040 f1f8 } } -void m68000_device::movea_l_as_ad_dpm() // 2048 f1f8 +void m68000_mcu_device::movea_l_as_ad_dpm() // 2048 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -46909,7 +46909,7 @@ void m68000_device::movea_l_as_ad_dpm() // 2048 f1f8 } } -void m68000_device::movea_l_ais_ad_dpm() // 2050 f1f8 +void m68000_mcu_device::movea_l_ais_ad_dpm() // 2050 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -47010,7 +47010,7 @@ void m68000_device::movea_l_ais_ad_dpm() // 2050 f1f8 } } -void m68000_device::movea_l_aips_ad_dpm() // 2058 f1f8 +void m68000_mcu_device::movea_l_aips_ad_dpm() // 2058 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -47114,7 +47114,7 @@ void m68000_device::movea_l_aips_ad_dpm() // 2058 f1f8 } } -void m68000_device::movea_l_pais_ad_dpm() // 2060 f1f8 +void m68000_mcu_device::movea_l_pais_ad_dpm() // 2060 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -47219,7 +47219,7 @@ void m68000_device::movea_l_pais_ad_dpm() // 2060 f1f8 } } -void m68000_device::movea_l_das_ad_dpm() // 2068 f1f8 +void m68000_mcu_device::movea_l_das_ad_dpm() // 2068 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -47344,7 +47344,7 @@ void m68000_device::movea_l_das_ad_dpm() // 2068 f1f8 } } -void m68000_device::movea_l_dais_ad_dpm() // 2070 f1f8 +void m68000_mcu_device::movea_l_dais_ad_dpm() // 2070 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -47510,7 +47510,7 @@ adsl2: } } -void m68000_device::movea_l_adr16_ad_dpm() // 2078 f1ff +void m68000_mcu_device::movea_l_adr16_ad_dpm() // 2078 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -47637,7 +47637,7 @@ void m68000_device::movea_l_adr16_ad_dpm() // 2078 f1ff } } -void m68000_device::movea_l_adr32_ad_dpm() // 2079 f1ff +void m68000_mcu_device::movea_l_adr32_ad_dpm() // 2079 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -47788,7 +47788,7 @@ void m68000_device::movea_l_adr32_ad_dpm() // 2079 f1ff } } -void m68000_device::movea_l_dpc_ad_dpm() // 207a f1ff +void m68000_mcu_device::movea_l_dpc_ad_dpm() // 207a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -47912,7 +47912,7 @@ void m68000_device::movea_l_dpc_ad_dpm() // 207a f1ff } } -void m68000_device::movea_l_dpci_ad_dpm() // 207b f1ff +void m68000_mcu_device::movea_l_dpci_ad_dpm() // 207b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -48077,7 +48077,7 @@ adsl2: } } -void m68000_device::movea_l_imm32_ad_dpm() // 207c f1ff +void m68000_mcu_device::movea_l_imm32_ad_dpm() // 207c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -48177,7 +48177,7 @@ void m68000_device::movea_l_imm32_ad_dpm() // 207c f1ff } } -void m68000_device::move_l_ds_aid_dpm() // 2080 f1f8 +void m68000_mcu_device::move_l_ds_aid_dpm() // 2080 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -48274,7 +48274,7 @@ void m68000_device::move_l_ds_aid_dpm() // 2080 f1f8 } } -void m68000_device::move_l_as_aid_dpm() // 2088 f1f8 +void m68000_mcu_device::move_l_as_aid_dpm() // 2088 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -48371,7 +48371,7 @@ void m68000_device::move_l_as_aid_dpm() // 2088 f1f8 } } -void m68000_device::move_l_ais_aid_dpm() // 2090 f1f8 +void m68000_mcu_device::move_l_ais_aid_dpm() // 2090 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -48519,7 +48519,7 @@ void m68000_device::move_l_ais_aid_dpm() // 2090 f1f8 } } -void m68000_device::move_l_aips_aid_dpm() // 2098 f1f8 +void m68000_mcu_device::move_l_aips_aid_dpm() // 2098 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -48670,7 +48670,7 @@ void m68000_device::move_l_aips_aid_dpm() // 2098 f1f8 } } -void m68000_device::move_l_pais_aid_dpm() // 20a0 f1f8 +void m68000_mcu_device::move_l_pais_aid_dpm() // 20a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -48822,7 +48822,7 @@ void m68000_device::move_l_pais_aid_dpm() // 20a0 f1f8 } } -void m68000_device::move_l_das_aid_dpm() // 20a8 f1f8 +void m68000_mcu_device::move_l_das_aid_dpm() // 20a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -48994,7 +48994,7 @@ void m68000_device::move_l_das_aid_dpm() // 20a8 f1f8 } } -void m68000_device::move_l_dais_aid_dpm() // 20b0 f1f8 +void m68000_mcu_device::move_l_dais_aid_dpm() // 20b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -49207,7 +49207,7 @@ adsl2: } } -void m68000_device::move_l_adr16_aid_dpm() // 20b8 f1ff +void m68000_mcu_device::move_l_adr16_aid_dpm() // 20b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -49381,7 +49381,7 @@ void m68000_device::move_l_adr16_aid_dpm() // 20b8 f1ff } } -void m68000_device::move_l_adr32_aid_dpm() // 20b9 f1ff +void m68000_mcu_device::move_l_adr32_aid_dpm() // 20b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -49579,7 +49579,7 @@ void m68000_device::move_l_adr32_aid_dpm() // 20b9 f1ff } } -void m68000_device::move_l_dpc_aid_dpm() // 20ba f1ff +void m68000_mcu_device::move_l_dpc_aid_dpm() // 20ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -49750,7 +49750,7 @@ void m68000_device::move_l_dpc_aid_dpm() // 20ba f1ff } } -void m68000_device::move_l_dpci_aid_dpm() // 20bb f1ff +void m68000_mcu_device::move_l_dpci_aid_dpm() // 20bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -49962,7 +49962,7 @@ adsl2: } } -void m68000_device::move_l_imm32_aid_dpm() // 20bc f1ff +void m68000_mcu_device::move_l_imm32_aid_dpm() // 20bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -50109,7 +50109,7 @@ void m68000_device::move_l_imm32_aid_dpm() // 20bc f1ff } } -void m68000_device::move_l_ds_aipd_dpm() // 20c0 f1f8 +void m68000_mcu_device::move_l_ds_aipd_dpm() // 20c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -50206,7 +50206,7 @@ void m68000_device::move_l_ds_aipd_dpm() // 20c0 f1f8 } } -void m68000_device::move_l_as_aipd_dpm() // 20c8 f1f8 +void m68000_mcu_device::move_l_as_aipd_dpm() // 20c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50303,7 +50303,7 @@ void m68000_device::move_l_as_aipd_dpm() // 20c8 f1f8 } } -void m68000_device::move_l_ais_aipd_dpm() // 20d0 f1f8 +void m68000_mcu_device::move_l_ais_aipd_dpm() // 20d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50450,7 +50450,7 @@ void m68000_device::move_l_ais_aipd_dpm() // 20d0 f1f8 } } -void m68000_device::move_l_aips_aipd_dpm() // 20d8 f1f8 +void m68000_mcu_device::move_l_aips_aipd_dpm() // 20d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50600,7 +50600,7 @@ void m68000_device::move_l_aips_aipd_dpm() // 20d8 f1f8 } } -void m68000_device::move_l_pais_aipd_dpm() // 20e0 f1f8 +void m68000_mcu_device::move_l_pais_aipd_dpm() // 20e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50751,7 +50751,7 @@ void m68000_device::move_l_pais_aipd_dpm() // 20e0 f1f8 } } -void m68000_device::move_l_das_aipd_dpm() // 20e8 f1f8 +void m68000_mcu_device::move_l_das_aipd_dpm() // 20e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50922,7 +50922,7 @@ void m68000_device::move_l_das_aipd_dpm() // 20e8 f1f8 } } -void m68000_device::move_l_dais_aipd_dpm() // 20f0 f1f8 +void m68000_mcu_device::move_l_dais_aipd_dpm() // 20f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -51134,7 +51134,7 @@ adsl2: } } -void m68000_device::move_l_adr16_aipd_dpm() // 20f8 f1ff +void m68000_mcu_device::move_l_adr16_aipd_dpm() // 20f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -51307,7 +51307,7 @@ void m68000_device::move_l_adr16_aipd_dpm() // 20f8 f1ff } } -void m68000_device::move_l_adr32_aipd_dpm() // 20f9 f1ff +void m68000_mcu_device::move_l_adr32_aipd_dpm() // 20f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -51504,7 +51504,7 @@ void m68000_device::move_l_adr32_aipd_dpm() // 20f9 f1ff } } -void m68000_device::move_l_dpc_aipd_dpm() // 20fa f1ff +void m68000_mcu_device::move_l_dpc_aipd_dpm() // 20fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -51674,7 +51674,7 @@ void m68000_device::move_l_dpc_aipd_dpm() // 20fa f1ff } } -void m68000_device::move_l_dpci_aipd_dpm() // 20fb f1ff +void m68000_mcu_device::move_l_dpci_aipd_dpm() // 20fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -51885,7 +51885,7 @@ adsl2: } } -void m68000_device::move_l_imm32_aipd_dpm() // 20fc f1ff +void m68000_mcu_device::move_l_imm32_aipd_dpm() // 20fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -52032,7 +52032,7 @@ void m68000_device::move_l_imm32_aipd_dpm() // 20fc f1ff } } -void m68000_device::move_l_ds_paid_dpm() // 2100 f1f8 +void m68000_mcu_device::move_l_ds_paid_dpm() // 2100 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -52128,7 +52128,7 @@ void m68000_device::move_l_ds_paid_dpm() // 2100 f1f8 } } -void m68000_device::move_l_as_paid_dpm() // 2108 f1f8 +void m68000_mcu_device::move_l_as_paid_dpm() // 2108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -52224,7 +52224,7 @@ void m68000_device::move_l_as_paid_dpm() // 2108 f1f8 } } -void m68000_device::move_l_ais_paid_dpm() // 2110 f1f8 +void m68000_mcu_device::move_l_ais_paid_dpm() // 2110 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -52371,7 +52371,7 @@ void m68000_device::move_l_ais_paid_dpm() // 2110 f1f8 } } -void m68000_device::move_l_aips_paid_dpm() // 2118 f1f8 +void m68000_mcu_device::move_l_aips_paid_dpm() // 2118 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -52521,7 +52521,7 @@ void m68000_device::move_l_aips_paid_dpm() // 2118 f1f8 } } -void m68000_device::move_l_pais_paid_dpm() // 2120 f1f8 +void m68000_mcu_device::move_l_pais_paid_dpm() // 2120 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -52672,7 +52672,7 @@ void m68000_device::move_l_pais_paid_dpm() // 2120 f1f8 } } -void m68000_device::move_l_das_paid_dpm() // 2128 f1f8 +void m68000_mcu_device::move_l_das_paid_dpm() // 2128 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -52843,7 +52843,7 @@ void m68000_device::move_l_das_paid_dpm() // 2128 f1f8 } } -void m68000_device::move_l_dais_paid_dpm() // 2130 f1f8 +void m68000_mcu_device::move_l_dais_paid_dpm() // 2130 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -53055,7 +53055,7 @@ adsl2: } } -void m68000_device::move_l_adr16_paid_dpm() // 2138 f1ff +void m68000_mcu_device::move_l_adr16_paid_dpm() // 2138 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -53228,7 +53228,7 @@ void m68000_device::move_l_adr16_paid_dpm() // 2138 f1ff } } -void m68000_device::move_l_adr32_paid_dpm() // 2139 f1ff +void m68000_mcu_device::move_l_adr32_paid_dpm() // 2139 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -53425,7 +53425,7 @@ void m68000_device::move_l_adr32_paid_dpm() // 2139 f1ff } } -void m68000_device::move_l_dpc_paid_dpm() // 213a f1ff +void m68000_mcu_device::move_l_dpc_paid_dpm() // 213a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -53595,7 +53595,7 @@ void m68000_device::move_l_dpc_paid_dpm() // 213a f1ff } } -void m68000_device::move_l_dpci_paid_dpm() // 213b f1ff +void m68000_mcu_device::move_l_dpci_paid_dpm() // 213b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -53806,7 +53806,7 @@ adsl2: } } -void m68000_device::move_l_imm32_paid_dpm() // 213c f1ff +void m68000_mcu_device::move_l_imm32_paid_dpm() // 213c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -53952,7 +53952,7 @@ void m68000_device::move_l_imm32_paid_dpm() // 213c f1ff } } -void m68000_device::move_l_ds_dad_dpm() // 2140 f1f8 +void m68000_mcu_device::move_l_ds_dad_dpm() // 2140 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -54075,7 +54075,7 @@ void m68000_device::move_l_ds_dad_dpm() // 2140 f1f8 } } -void m68000_device::move_l_as_dad_dpm() // 2148 f1f8 +void m68000_mcu_device::move_l_as_dad_dpm() // 2148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -54198,7 +54198,7 @@ void m68000_device::move_l_as_dad_dpm() // 2148 f1f8 } } -void m68000_device::move_l_ais_dad_dpm() // 2150 f1f8 +void m68000_mcu_device::move_l_ais_dad_dpm() // 2150 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -54375,7 +54375,7 @@ void m68000_device::move_l_ais_dad_dpm() // 2150 f1f8 } } -void m68000_device::move_l_aips_dad_dpm() // 2158 f1f8 +void m68000_mcu_device::move_l_aips_dad_dpm() // 2158 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -54555,7 +54555,7 @@ void m68000_device::move_l_aips_dad_dpm() // 2158 f1f8 } } -void m68000_device::move_l_pais_dad_dpm() // 2160 f1f8 +void m68000_mcu_device::move_l_pais_dad_dpm() // 2160 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -54736,7 +54736,7 @@ void m68000_device::move_l_pais_dad_dpm() // 2160 f1f8 } } -void m68000_device::move_l_das_dad_dpm() // 2168 f1f8 +void m68000_mcu_device::move_l_das_dad_dpm() // 2168 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -54937,7 +54937,7 @@ void m68000_device::move_l_das_dad_dpm() // 2168 f1f8 } } -void m68000_device::move_l_dais_dad_dpm() // 2170 f1f8 +void m68000_mcu_device::move_l_dais_dad_dpm() // 2170 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -55179,7 +55179,7 @@ adsl2: } } -void m68000_device::move_l_adr16_dad_dpm() // 2178 f1ff +void m68000_mcu_device::move_l_adr16_dad_dpm() // 2178 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -55382,7 +55382,7 @@ void m68000_device::move_l_adr16_dad_dpm() // 2178 f1ff } } -void m68000_device::move_l_adr32_dad_dpm() // 2179 f1ff +void m68000_mcu_device::move_l_adr32_dad_dpm() // 2179 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -55609,7 +55609,7 @@ void m68000_device::move_l_adr32_dad_dpm() // 2179 f1ff } } -void m68000_device::move_l_dpc_dad_dpm() // 217a f1ff +void m68000_mcu_device::move_l_dpc_dad_dpm() // 217a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -55809,7 +55809,7 @@ void m68000_device::move_l_dpc_dad_dpm() // 217a f1ff } } -void m68000_device::move_l_dpci_dad_dpm() // 217b f1ff +void m68000_mcu_device::move_l_dpci_dad_dpm() // 217b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -56050,7 +56050,7 @@ adsl2: } } -void m68000_device::move_l_imm32_dad_dpm() // 217c f1ff +void m68000_mcu_device::move_l_imm32_dad_dpm() // 217c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -56223,7 +56223,7 @@ void m68000_device::move_l_imm32_dad_dpm() // 217c f1ff } } -void m68000_device::move_l_ds_daid_dpm() // 2180 f1f8 +void m68000_mcu_device::move_l_ds_daid_dpm() // 2180 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -56388,7 +56388,7 @@ rmdl2: } } -void m68000_device::move_l_as_daid_dpm() // 2188 f1f8 +void m68000_mcu_device::move_l_as_daid_dpm() // 2188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -56553,7 +56553,7 @@ rmdl2: } } -void m68000_device::move_l_ais_daid_dpm() // 2190 f1f8 +void m68000_mcu_device::move_l_ais_daid_dpm() // 2190 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -56771,7 +56771,7 @@ mawl2: } } -void m68000_device::move_l_aips_daid_dpm() // 2198 f1f8 +void m68000_mcu_device::move_l_aips_daid_dpm() // 2198 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -56992,7 +56992,7 @@ mawl2: } } -void m68000_device::move_l_pais_daid_dpm() // 21a0 f1f8 +void m68000_mcu_device::move_l_pais_daid_dpm() // 21a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57214,7 +57214,7 @@ mawl2: } } -void m68000_device::move_l_das_daid_dpm() // 21a8 f1f8 +void m68000_mcu_device::move_l_das_daid_dpm() // 21a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57456,7 +57456,7 @@ mawl2: } } -void m68000_device::move_l_dais_daid_dpm() // 21b0 f1f8 +void m68000_mcu_device::move_l_dais_daid_dpm() // 21b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57739,7 +57739,7 @@ mawl2: } } -void m68000_device::move_l_adr16_daid_dpm() // 21b8 f1ff +void m68000_mcu_device::move_l_adr16_daid_dpm() // 21b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -57983,7 +57983,7 @@ mawl2: } } -void m68000_device::move_l_adr32_daid_dpm() // 21b9 f1ff +void m68000_mcu_device::move_l_adr32_daid_dpm() // 21b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -58251,7 +58251,7 @@ mawl2: } } -void m68000_device::move_l_dpc_daid_dpm() // 21ba f1ff +void m68000_mcu_device::move_l_dpc_daid_dpm() // 21ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -58492,7 +58492,7 @@ mawl2: } } -void m68000_device::move_l_dpci_daid_dpm() // 21bb f1ff +void m68000_mcu_device::move_l_dpci_daid_dpm() // 21bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -58774,7 +58774,7 @@ mawl2: } } -void m68000_device::move_l_imm32_daid_dpm() // 21bc f1ff +void m68000_mcu_device::move_l_imm32_daid_dpm() // 21bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -58989,7 +58989,7 @@ rmdl2: } } -void m68000_device::move_l_ds_adr16_dpm() // 21c0 fff8 +void m68000_mcu_device::move_l_ds_adr16_dpm() // 21c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -59115,7 +59115,7 @@ void m68000_device::move_l_ds_adr16_dpm() // 21c0 fff8 } } -void m68000_device::move_l_as_adr16_dpm() // 21c8 fff8 +void m68000_mcu_device::move_l_as_adr16_dpm() // 21c8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -59241,7 +59241,7 @@ void m68000_device::move_l_as_adr16_dpm() // 21c8 fff8 } } -void m68000_device::move_l_ais_adr16_dpm() // 21d0 fff8 +void m68000_mcu_device::move_l_ais_adr16_dpm() // 21d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -59417,7 +59417,7 @@ void m68000_device::move_l_ais_adr16_dpm() // 21d0 fff8 } } -void m68000_device::move_l_aips_adr16_dpm() // 21d8 fff8 +void m68000_mcu_device::move_l_aips_adr16_dpm() // 21d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -59596,7 +59596,7 @@ void m68000_device::move_l_aips_adr16_dpm() // 21d8 fff8 } } -void m68000_device::move_l_pais_adr16_dpm() // 21e0 fff8 +void m68000_mcu_device::move_l_pais_adr16_dpm() // 21e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -59776,7 +59776,7 @@ void m68000_device::move_l_pais_adr16_dpm() // 21e0 fff8 } } -void m68000_device::move_l_das_adr16_dpm() // 21e8 fff8 +void m68000_mcu_device::move_l_das_adr16_dpm() // 21e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -59976,7 +59976,7 @@ void m68000_device::move_l_das_adr16_dpm() // 21e8 fff8 } } -void m68000_device::move_l_dais_adr16_dpm() // 21f0 fff8 +void m68000_mcu_device::move_l_dais_adr16_dpm() // 21f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -60217,7 +60217,7 @@ adsl2: } } -void m68000_device::move_l_adr16_adr16_dpm() // 21f8 ffff +void m68000_mcu_device::move_l_adr16_adr16_dpm() // 21f8 ffff { switch(m_inst_substate) { case 0: @@ -60419,7 +60419,7 @@ void m68000_device::move_l_adr16_adr16_dpm() // 21f8 ffff } } -void m68000_device::move_l_adr32_adr16_dpm() // 21f9 ffff +void m68000_mcu_device::move_l_adr32_adr16_dpm() // 21f9 ffff { switch(m_inst_substate) { case 0: @@ -60645,7 +60645,7 @@ void m68000_device::move_l_adr32_adr16_dpm() // 21f9 ffff } } -void m68000_device::move_l_dpc_adr16_dpm() // 21fa ffff +void m68000_mcu_device::move_l_dpc_adr16_dpm() // 21fa ffff { switch(m_inst_substate) { case 0: @@ -60844,7 +60844,7 @@ void m68000_device::move_l_dpc_adr16_dpm() // 21fa ffff } } -void m68000_device::move_l_dpci_adr16_dpm() // 21fb ffff +void m68000_mcu_device::move_l_dpci_adr16_dpm() // 21fb ffff { switch(m_inst_substate) { case 0: @@ -61084,7 +61084,7 @@ adsl2: } } -void m68000_device::move_l_imm32_adr16_dpm() // 21fc ffff +void m68000_mcu_device::move_l_imm32_adr16_dpm() // 21fc ffff { switch(m_inst_substate) { case 0: @@ -61260,7 +61260,7 @@ void m68000_device::move_l_imm32_adr16_dpm() // 21fc ffff } } -void m68000_device::move_l_ds_adr32_dpm() // 23c0 fff8 +void m68000_mcu_device::move_l_ds_adr32_dpm() // 23c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -61410,7 +61410,7 @@ void m68000_device::move_l_ds_adr32_dpm() // 23c0 fff8 } } -void m68000_device::move_l_as_adr32_dpm() // 23c8 fff8 +void m68000_mcu_device::move_l_as_adr32_dpm() // 23c8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -61560,7 +61560,7 @@ void m68000_device::move_l_as_adr32_dpm() // 23c8 fff8 } } -void m68000_device::move_l_ais_adr32_dpm() // 23d0 fff8 +void m68000_mcu_device::move_l_ais_adr32_dpm() // 23d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -61761,7 +61761,7 @@ void m68000_device::move_l_ais_adr32_dpm() // 23d0 fff8 } } -void m68000_device::move_l_aips_adr32_dpm() // 23d8 fff8 +void m68000_mcu_device::move_l_aips_adr32_dpm() // 23d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -61965,7 +61965,7 @@ void m68000_device::move_l_aips_adr32_dpm() // 23d8 fff8 } } -void m68000_device::move_l_pais_adr32_dpm() // 23e0 fff8 +void m68000_mcu_device::move_l_pais_adr32_dpm() // 23e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -62170,7 +62170,7 @@ void m68000_device::move_l_pais_adr32_dpm() // 23e0 fff8 } } -void m68000_device::move_l_das_adr32_dpm() // 23e8 fff8 +void m68000_mcu_device::move_l_das_adr32_dpm() // 23e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -62395,7 +62395,7 @@ void m68000_device::move_l_das_adr32_dpm() // 23e8 fff8 } } -void m68000_device::move_l_dais_adr32_dpm() // 23f0 fff8 +void m68000_mcu_device::move_l_dais_adr32_dpm() // 23f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -62661,7 +62661,7 @@ adsl2: } } -void m68000_device::move_l_adr16_adr32_dpm() // 23f8 ffff +void m68000_mcu_device::move_l_adr16_adr32_dpm() // 23f8 ffff { switch(m_inst_substate) { case 0: @@ -62888,7 +62888,7 @@ void m68000_device::move_l_adr16_adr32_dpm() // 23f8 ffff } } -void m68000_device::move_l_adr32_adr32_dpm() // 23f9 ffff +void m68000_mcu_device::move_l_adr32_adr32_dpm() // 23f9 ffff { switch(m_inst_substate) { case 0: @@ -63139,7 +63139,7 @@ void m68000_device::move_l_adr32_adr32_dpm() // 23f9 ffff } } -void m68000_device::move_l_dpc_adr32_dpm() // 23fa ffff +void m68000_mcu_device::move_l_dpc_adr32_dpm() // 23fa ffff { switch(m_inst_substate) { case 0: @@ -63363,7 +63363,7 @@ void m68000_device::move_l_dpc_adr32_dpm() // 23fa ffff } } -void m68000_device::move_l_dpci_adr32_dpm() // 23fb ffff +void m68000_mcu_device::move_l_dpci_adr32_dpm() // 23fb ffff { switch(m_inst_substate) { case 0: @@ -63628,7 +63628,7 @@ adsl2: } } -void m68000_device::move_l_imm32_adr32_dpm() // 23fc ffff +void m68000_mcu_device::move_l_imm32_adr32_dpm() // 23fc ffff { switch(m_inst_substate) { case 0: @@ -63828,7 +63828,7 @@ void m68000_device::move_l_imm32_adr32_dpm() // 23fc ffff } } -void m68000_device::move_w_ds_dd_dpm() // 3000 f1f8 +void m68000_mcu_device::move_w_ds_dd_dpm() // 3000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -63878,7 +63878,7 @@ void m68000_device::move_w_ds_dd_dpm() // 3000 f1f8 } } -void m68000_device::move_w_as_dd_dpm() // 3008 f1f8 +void m68000_mcu_device::move_w_as_dd_dpm() // 3008 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -63928,7 +63928,7 @@ void m68000_device::move_w_as_dd_dpm() // 3008 f1f8 } } -void m68000_device::move_w_ais_dd_dpm() // 3010 f1f8 +void m68000_mcu_device::move_w_ais_dd_dpm() // 3010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -64003,7 +64003,7 @@ void m68000_device::move_w_ais_dd_dpm() // 3010 f1f8 } } -void m68000_device::move_w_aips_dd_dpm() // 3018 f1f8 +void m68000_mcu_device::move_w_aips_dd_dpm() // 3018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -64082,7 +64082,7 @@ void m68000_device::move_w_aips_dd_dpm() // 3018 f1f8 } } -void m68000_device::move_w_pais_dd_dpm() // 3020 f1f8 +void m68000_mcu_device::move_w_pais_dd_dpm() // 3020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -64163,7 +64163,7 @@ void m68000_device::move_w_pais_dd_dpm() // 3020 f1f8 } } -void m68000_device::move_w_das_dd_dpm() // 3028 f1f8 +void m68000_mcu_device::move_w_das_dd_dpm() // 3028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -64263,7 +64263,7 @@ void m68000_device::move_w_das_dd_dpm() // 3028 f1f8 } } -void m68000_device::move_w_dais_dd_dpm() // 3030 f1f8 +void m68000_mcu_device::move_w_dais_dd_dpm() // 3030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -64404,7 +64404,7 @@ adsw2: } } -void m68000_device::move_w_adr16_dd_dpm() // 3038 f1ff +void m68000_mcu_device::move_w_adr16_dd_dpm() // 3038 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -64503,7 +64503,7 @@ void m68000_device::move_w_adr16_dd_dpm() // 3038 f1ff } } -void m68000_device::move_w_adr32_dd_dpm() // 3039 f1ff +void m68000_mcu_device::move_w_adr32_dd_dpm() // 3039 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -64626,7 +64626,7 @@ void m68000_device::move_w_adr32_dd_dpm() // 3039 f1ff } } -void m68000_device::move_w_dpc_dd_dpm() // 303a f1ff +void m68000_mcu_device::move_w_dpc_dd_dpm() // 303a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -64725,7 +64725,7 @@ void m68000_device::move_w_dpc_dd_dpm() // 303a f1ff } } -void m68000_device::move_w_dpci_dd_dpm() // 303b f1ff +void m68000_mcu_device::move_w_dpci_dd_dpm() // 303b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -64865,7 +64865,7 @@ adsw2: } } -void m68000_device::move_w_imm16_dd_dpm() // 303c f1ff +void m68000_mcu_device::move_w_imm16_dd_dpm() // 303c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -64941,7 +64941,7 @@ void m68000_device::move_w_imm16_dd_dpm() // 303c f1ff } } -void m68000_device::movea_w_ds_ad_dpm() // 3040 f1f8 +void m68000_mcu_device::movea_w_ds_ad_dpm() // 3040 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -64989,7 +64989,7 @@ void m68000_device::movea_w_ds_ad_dpm() // 3040 f1f8 } } -void m68000_device::movea_w_as_ad_dpm() // 3048 f1f8 +void m68000_mcu_device::movea_w_as_ad_dpm() // 3048 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -65037,7 +65037,7 @@ void m68000_device::movea_w_as_ad_dpm() // 3048 f1f8 } } -void m68000_device::movea_w_ais_ad_dpm() // 3050 f1f8 +void m68000_mcu_device::movea_w_ais_ad_dpm() // 3050 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -65109,7 +65109,7 @@ void m68000_device::movea_w_ais_ad_dpm() // 3050 f1f8 } } -void m68000_device::movea_w_aips_ad_dpm() // 3058 f1f8 +void m68000_mcu_device::movea_w_aips_ad_dpm() // 3058 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -65185,7 +65185,7 @@ void m68000_device::movea_w_aips_ad_dpm() // 3058 f1f8 } } -void m68000_device::movea_w_pais_ad_dpm() // 3060 f1f8 +void m68000_mcu_device::movea_w_pais_ad_dpm() // 3060 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -65263,7 +65263,7 @@ void m68000_device::movea_w_pais_ad_dpm() // 3060 f1f8 } } -void m68000_device::movea_w_das_ad_dpm() // 3068 f1f8 +void m68000_mcu_device::movea_w_das_ad_dpm() // 3068 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -65360,7 +65360,7 @@ void m68000_device::movea_w_das_ad_dpm() // 3068 f1f8 } } -void m68000_device::movea_w_dais_ad_dpm() // 3070 f1f8 +void m68000_mcu_device::movea_w_dais_ad_dpm() // 3070 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -65498,7 +65498,7 @@ adsw2: } } -void m68000_device::movea_w_adr16_ad_dpm() // 3078 f1ff +void m68000_mcu_device::movea_w_adr16_ad_dpm() // 3078 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -65594,7 +65594,7 @@ void m68000_device::movea_w_adr16_ad_dpm() // 3078 f1ff } } -void m68000_device::movea_w_adr32_ad_dpm() // 3079 f1ff +void m68000_mcu_device::movea_w_adr32_ad_dpm() // 3079 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -65714,7 +65714,7 @@ void m68000_device::movea_w_adr32_ad_dpm() // 3079 f1ff } } -void m68000_device::movea_w_dpc_ad_dpm() // 307a f1ff +void m68000_mcu_device::movea_w_dpc_ad_dpm() // 307a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -65810,7 +65810,7 @@ void m68000_device::movea_w_dpc_ad_dpm() // 307a f1ff } } -void m68000_device::movea_w_dpci_ad_dpm() // 307b f1ff +void m68000_mcu_device::movea_w_dpci_ad_dpm() // 307b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -65947,7 +65947,7 @@ adsw2: } } -void m68000_device::movea_w_imm16_ad_dpm() // 307c f1ff +void m68000_mcu_device::movea_w_imm16_ad_dpm() // 307c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -66021,7 +66021,7 @@ void m68000_device::movea_w_imm16_ad_dpm() // 307c f1ff } } -void m68000_device::move_w_ds_aid_dpm() // 3080 f1f8 +void m68000_mcu_device::move_w_ds_aid_dpm() // 3080 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -66092,7 +66092,7 @@ void m68000_device::move_w_ds_aid_dpm() // 3080 f1f8 } } -void m68000_device::move_w_as_aid_dpm() // 3088 f1f8 +void m68000_mcu_device::move_w_as_aid_dpm() // 3088 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -66163,7 +66163,7 @@ void m68000_device::move_w_as_aid_dpm() // 3088 f1f8 } } -void m68000_device::move_w_ais_aid_dpm() // 3090 f1f8 +void m68000_mcu_device::move_w_ais_aid_dpm() // 3090 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -66260,7 +66260,7 @@ void m68000_device::move_w_ais_aid_dpm() // 3090 f1f8 } } -void m68000_device::move_w_aips_aid_dpm() // 3098 f1f8 +void m68000_mcu_device::move_w_aips_aid_dpm() // 3098 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -66361,7 +66361,7 @@ void m68000_device::move_w_aips_aid_dpm() // 3098 f1f8 } } -void m68000_device::move_w_pais_aid_dpm() // 30a0 f1f8 +void m68000_mcu_device::move_w_pais_aid_dpm() // 30a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -66464,7 +66464,7 @@ void m68000_device::move_w_pais_aid_dpm() // 30a0 f1f8 } } -void m68000_device::move_w_das_aid_dpm() // 30a8 f1f8 +void m68000_mcu_device::move_w_das_aid_dpm() // 30a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -66586,7 +66586,7 @@ void m68000_device::move_w_das_aid_dpm() // 30a8 f1f8 } } -void m68000_device::move_w_dais_aid_dpm() // 30b0 f1f8 +void m68000_mcu_device::move_w_dais_aid_dpm() // 30b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -66749,7 +66749,7 @@ adsw2: } } -void m68000_device::move_w_adr16_aid_dpm() // 30b8 f1ff +void m68000_mcu_device::move_w_adr16_aid_dpm() // 30b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -66870,7 +66870,7 @@ void m68000_device::move_w_adr16_aid_dpm() // 30b8 f1ff } } -void m68000_device::move_w_adr32_aid_dpm() // 30b9 f1ff +void m68000_mcu_device::move_w_adr32_aid_dpm() // 30b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -67015,7 +67015,7 @@ void m68000_device::move_w_adr32_aid_dpm() // 30b9 f1ff } } -void m68000_device::move_w_dpc_aid_dpm() // 30ba f1ff +void m68000_mcu_device::move_w_dpc_aid_dpm() // 30ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -67136,7 +67136,7 @@ void m68000_device::move_w_dpc_aid_dpm() // 30ba f1ff } } -void m68000_device::move_w_dpci_aid_dpm() // 30bb f1ff +void m68000_mcu_device::move_w_dpci_aid_dpm() // 30bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -67298,7 +67298,7 @@ adsw2: } } -void m68000_device::move_w_imm16_aid_dpm() // 30bc f1ff +void m68000_mcu_device::move_w_imm16_aid_dpm() // 30bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -67395,7 +67395,7 @@ void m68000_device::move_w_imm16_aid_dpm() // 30bc f1ff } } -void m68000_device::move_w_ds_aipd_dpm() // 30c0 f1f8 +void m68000_mcu_device::move_w_ds_aipd_dpm() // 30c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -67465,7 +67465,7 @@ void m68000_device::move_w_ds_aipd_dpm() // 30c0 f1f8 } } -void m68000_device::move_w_as_aipd_dpm() // 30c8 f1f8 +void m68000_mcu_device::move_w_as_aipd_dpm() // 30c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -67535,7 +67535,7 @@ void m68000_device::move_w_as_aipd_dpm() // 30c8 f1f8 } } -void m68000_device::move_w_ais_aipd_dpm() // 30d0 f1f8 +void m68000_mcu_device::move_w_ais_aipd_dpm() // 30d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -67632,7 +67632,7 @@ void m68000_device::move_w_ais_aipd_dpm() // 30d0 f1f8 } } -void m68000_device::move_w_aips_aipd_dpm() // 30d8 f1f8 +void m68000_mcu_device::move_w_aips_aipd_dpm() // 30d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -67733,7 +67733,7 @@ void m68000_device::move_w_aips_aipd_dpm() // 30d8 f1f8 } } -void m68000_device::move_w_pais_aipd_dpm() // 30e0 f1f8 +void m68000_mcu_device::move_w_pais_aipd_dpm() // 30e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -67836,7 +67836,7 @@ void m68000_device::move_w_pais_aipd_dpm() // 30e0 f1f8 } } -void m68000_device::move_w_das_aipd_dpm() // 30e8 f1f8 +void m68000_mcu_device::move_w_das_aipd_dpm() // 30e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -67958,7 +67958,7 @@ void m68000_device::move_w_das_aipd_dpm() // 30e8 f1f8 } } -void m68000_device::move_w_dais_aipd_dpm() // 30f0 f1f8 +void m68000_mcu_device::move_w_dais_aipd_dpm() // 30f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -68121,7 +68121,7 @@ adsw2: } } -void m68000_device::move_w_adr16_aipd_dpm() // 30f8 f1ff +void m68000_mcu_device::move_w_adr16_aipd_dpm() // 30f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -68242,7 +68242,7 @@ void m68000_device::move_w_adr16_aipd_dpm() // 30f8 f1ff } } -void m68000_device::move_w_adr32_aipd_dpm() // 30f9 f1ff +void m68000_mcu_device::move_w_adr32_aipd_dpm() // 30f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -68387,7 +68387,7 @@ void m68000_device::move_w_adr32_aipd_dpm() // 30f9 f1ff } } -void m68000_device::move_w_dpc_aipd_dpm() // 30fa f1ff +void m68000_mcu_device::move_w_dpc_aipd_dpm() // 30fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -68508,7 +68508,7 @@ void m68000_device::move_w_dpc_aipd_dpm() // 30fa f1ff } } -void m68000_device::move_w_dpci_aipd_dpm() // 30fb f1ff +void m68000_mcu_device::move_w_dpci_aipd_dpm() // 30fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -68670,7 +68670,7 @@ adsw2: } } -void m68000_device::move_w_imm16_aipd_dpm() // 30fc f1ff +void m68000_mcu_device::move_w_imm16_aipd_dpm() // 30fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -68766,7 +68766,7 @@ void m68000_device::move_w_imm16_aipd_dpm() // 30fc f1ff } } -void m68000_device::move_w_ds_paid_dpm() // 3100 f1f8 +void m68000_mcu_device::move_w_ds_paid_dpm() // 3100 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -68836,7 +68836,7 @@ void m68000_device::move_w_ds_paid_dpm() // 3100 f1f8 } } -void m68000_device::move_w_as_paid_dpm() // 3108 f1f8 +void m68000_mcu_device::move_w_as_paid_dpm() // 3108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -68906,7 +68906,7 @@ void m68000_device::move_w_as_paid_dpm() // 3108 f1f8 } } -void m68000_device::move_w_ais_paid_dpm() // 3110 f1f8 +void m68000_mcu_device::move_w_ais_paid_dpm() // 3110 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -69003,7 +69003,7 @@ void m68000_device::move_w_ais_paid_dpm() // 3110 f1f8 } } -void m68000_device::move_w_aips_paid_dpm() // 3118 f1f8 +void m68000_mcu_device::move_w_aips_paid_dpm() // 3118 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -69104,7 +69104,7 @@ void m68000_device::move_w_aips_paid_dpm() // 3118 f1f8 } } -void m68000_device::move_w_pais_paid_dpm() // 3120 f1f8 +void m68000_mcu_device::move_w_pais_paid_dpm() // 3120 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -69207,7 +69207,7 @@ void m68000_device::move_w_pais_paid_dpm() // 3120 f1f8 } } -void m68000_device::move_w_das_paid_dpm() // 3128 f1f8 +void m68000_mcu_device::move_w_das_paid_dpm() // 3128 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -69329,7 +69329,7 @@ void m68000_device::move_w_das_paid_dpm() // 3128 f1f8 } } -void m68000_device::move_w_dais_paid_dpm() // 3130 f1f8 +void m68000_mcu_device::move_w_dais_paid_dpm() // 3130 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -69492,7 +69492,7 @@ adsw2: } } -void m68000_device::move_w_adr16_paid_dpm() // 3138 f1ff +void m68000_mcu_device::move_w_adr16_paid_dpm() // 3138 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -69613,7 +69613,7 @@ void m68000_device::move_w_adr16_paid_dpm() // 3138 f1ff } } -void m68000_device::move_w_adr32_paid_dpm() // 3139 f1ff +void m68000_mcu_device::move_w_adr32_paid_dpm() // 3139 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -69758,7 +69758,7 @@ void m68000_device::move_w_adr32_paid_dpm() // 3139 f1ff } } -void m68000_device::move_w_dpc_paid_dpm() // 313a f1ff +void m68000_mcu_device::move_w_dpc_paid_dpm() // 313a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -69879,7 +69879,7 @@ void m68000_device::move_w_dpc_paid_dpm() // 313a f1ff } } -void m68000_device::move_w_dpci_paid_dpm() // 313b f1ff +void m68000_mcu_device::move_w_dpci_paid_dpm() // 313b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -70041,7 +70041,7 @@ adsw2: } } -void m68000_device::move_w_imm16_paid_dpm() // 313c f1ff +void m68000_mcu_device::move_w_imm16_paid_dpm() // 313c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -70137,7 +70137,7 @@ void m68000_device::move_w_imm16_paid_dpm() // 313c f1ff } } -void m68000_device::move_w_ds_dad_dpm() // 3140 f1f8 +void m68000_mcu_device::move_w_ds_dad_dpm() // 3140 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -70232,7 +70232,7 @@ void m68000_device::move_w_ds_dad_dpm() // 3140 f1f8 } } -void m68000_device::move_w_as_dad_dpm() // 3148 f1f8 +void m68000_mcu_device::move_w_as_dad_dpm() // 3148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -70327,7 +70327,7 @@ void m68000_device::move_w_as_dad_dpm() // 3148 f1f8 } } -void m68000_device::move_w_ais_dad_dpm() // 3150 f1f8 +void m68000_mcu_device::move_w_ais_dad_dpm() // 3150 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -70453,7 +70453,7 @@ void m68000_device::move_w_ais_dad_dpm() // 3150 f1f8 } } -void m68000_device::move_w_aips_dad_dpm() // 3158 f1f8 +void m68000_mcu_device::move_w_aips_dad_dpm() // 3158 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -70583,7 +70583,7 @@ void m68000_device::move_w_aips_dad_dpm() // 3158 f1f8 } } -void m68000_device::move_w_pais_dad_dpm() // 3160 f1f8 +void m68000_mcu_device::move_w_pais_dad_dpm() // 3160 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -70715,7 +70715,7 @@ void m68000_device::move_w_pais_dad_dpm() // 3160 f1f8 } } -void m68000_device::move_w_das_dad_dpm() // 3168 f1f8 +void m68000_mcu_device::move_w_das_dad_dpm() // 3168 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -70866,7 +70866,7 @@ void m68000_device::move_w_das_dad_dpm() // 3168 f1f8 } } -void m68000_device::move_w_dais_dad_dpm() // 3170 f1f8 +void m68000_mcu_device::move_w_dais_dad_dpm() // 3170 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -71058,7 +71058,7 @@ adsw2: } } -void m68000_device::move_w_adr16_dad_dpm() // 3178 f1ff +void m68000_mcu_device::move_w_adr16_dad_dpm() // 3178 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -71208,7 +71208,7 @@ void m68000_device::move_w_adr16_dad_dpm() // 3178 f1ff } } -void m68000_device::move_w_adr32_dad_dpm() // 3179 f1ff +void m68000_mcu_device::move_w_adr32_dad_dpm() // 3179 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -71382,7 +71382,7 @@ void m68000_device::move_w_adr32_dad_dpm() // 3179 f1ff } } -void m68000_device::move_w_dpc_dad_dpm() // 317a f1ff +void m68000_mcu_device::move_w_dpc_dad_dpm() // 317a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -71532,7 +71532,7 @@ void m68000_device::move_w_dpc_dad_dpm() // 317a f1ff } } -void m68000_device::move_w_dpci_dad_dpm() // 317b f1ff +void m68000_mcu_device::move_w_dpci_dad_dpm() // 317b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -71723,7 +71723,7 @@ adsw2: } } -void m68000_device::move_w_imm16_dad_dpm() // 317c f1ff +void m68000_mcu_device::move_w_imm16_dad_dpm() // 317c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -71844,7 +71844,7 @@ void m68000_device::move_w_imm16_dad_dpm() // 317c f1ff } } -void m68000_device::move_w_ds_daid_dpm() // 3180 f1f8 +void m68000_mcu_device::move_w_ds_daid_dpm() // 3180 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -71981,7 +71981,7 @@ rmdw2: } } -void m68000_device::move_w_as_daid_dpm() // 3188 f1f8 +void m68000_mcu_device::move_w_as_daid_dpm() // 3188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -72118,7 +72118,7 @@ rmdw2: } } -void m68000_device::move_w_ais_daid_dpm() // 3190 f1f8 +void m68000_mcu_device::move_w_ais_daid_dpm() // 3190 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -72285,7 +72285,7 @@ maww2: } } -void m68000_device::move_w_aips_daid_dpm() // 3198 f1f8 +void m68000_mcu_device::move_w_aips_daid_dpm() // 3198 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -72456,7 +72456,7 @@ maww2: } } -void m68000_device::move_w_pais_daid_dpm() // 31a0 f1f8 +void m68000_mcu_device::move_w_pais_daid_dpm() // 31a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -72629,7 +72629,7 @@ maww2: } } -void m68000_device::move_w_das_daid_dpm() // 31a8 f1f8 +void m68000_mcu_device::move_w_das_daid_dpm() // 31a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -72821,7 +72821,7 @@ maww2: } } -void m68000_device::move_w_dais_daid_dpm() // 31b0 f1f8 +void m68000_mcu_device::move_w_dais_daid_dpm() // 31b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -73054,7 +73054,7 @@ maww2: } } -void m68000_device::move_w_adr16_daid_dpm() // 31b8 f1ff +void m68000_mcu_device::move_w_adr16_daid_dpm() // 31b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -73245,7 +73245,7 @@ maww2: } } -void m68000_device::move_w_adr32_daid_dpm() // 31b9 f1ff +void m68000_mcu_device::move_w_adr32_daid_dpm() // 31b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -73460,7 +73460,7 @@ maww2: } } -void m68000_device::move_w_dpc_daid_dpm() // 31ba f1ff +void m68000_mcu_device::move_w_dpc_daid_dpm() // 31ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -73651,7 +73651,7 @@ maww2: } } -void m68000_device::move_w_dpci_daid_dpm() // 31bb f1ff +void m68000_mcu_device::move_w_dpci_daid_dpm() // 31bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -73883,7 +73883,7 @@ maww2: } } -void m68000_device::move_w_imm16_daid_dpm() // 31bc f1ff +void m68000_mcu_device::move_w_imm16_daid_dpm() // 31bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -74046,7 +74046,7 @@ rmdw2: } } -void m68000_device::move_w_ds_adr16_dpm() // 31c0 fff8 +void m68000_mcu_device::move_w_ds_adr16_dpm() // 31c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -74145,7 +74145,7 @@ void m68000_device::move_w_ds_adr16_dpm() // 31c0 fff8 } } -void m68000_device::move_w_as_adr16_dpm() // 31c8 fff8 +void m68000_mcu_device::move_w_as_adr16_dpm() // 31c8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -74244,7 +74244,7 @@ void m68000_device::move_w_as_adr16_dpm() // 31c8 fff8 } } -void m68000_device::move_w_ais_adr16_dpm() // 31d0 fff8 +void m68000_mcu_device::move_w_ais_adr16_dpm() // 31d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -74369,7 +74369,7 @@ void m68000_device::move_w_ais_adr16_dpm() // 31d0 fff8 } } -void m68000_device::move_w_aips_adr16_dpm() // 31d8 fff8 +void m68000_mcu_device::move_w_aips_adr16_dpm() // 31d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -74498,7 +74498,7 @@ void m68000_device::move_w_aips_adr16_dpm() // 31d8 fff8 } } -void m68000_device::move_w_pais_adr16_dpm() // 31e0 fff8 +void m68000_mcu_device::move_w_pais_adr16_dpm() // 31e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -74629,7 +74629,7 @@ void m68000_device::move_w_pais_adr16_dpm() // 31e0 fff8 } } -void m68000_device::move_w_das_adr16_dpm() // 31e8 fff8 +void m68000_mcu_device::move_w_das_adr16_dpm() // 31e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -74779,7 +74779,7 @@ void m68000_device::move_w_das_adr16_dpm() // 31e8 fff8 } } -void m68000_device::move_w_dais_adr16_dpm() // 31f0 fff8 +void m68000_mcu_device::move_w_dais_adr16_dpm() // 31f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -74970,7 +74970,7 @@ adsw2: } } -void m68000_device::move_w_adr16_adr16_dpm() // 31f8 ffff +void m68000_mcu_device::move_w_adr16_adr16_dpm() // 31f8 ffff { switch(m_inst_substate) { case 0: @@ -75119,7 +75119,7 @@ void m68000_device::move_w_adr16_adr16_dpm() // 31f8 ffff } } -void m68000_device::move_w_adr32_adr16_dpm() // 31f9 ffff +void m68000_mcu_device::move_w_adr32_adr16_dpm() // 31f9 ffff { switch(m_inst_substate) { case 0: @@ -75292,7 +75292,7 @@ void m68000_device::move_w_adr32_adr16_dpm() // 31f9 ffff } } -void m68000_device::move_w_dpc_adr16_dpm() // 31fa ffff +void m68000_mcu_device::move_w_dpc_adr16_dpm() // 31fa ffff { switch(m_inst_substate) { case 0: @@ -75441,7 +75441,7 @@ void m68000_device::move_w_dpc_adr16_dpm() // 31fa ffff } } -void m68000_device::move_w_dpci_adr16_dpm() // 31fb ffff +void m68000_mcu_device::move_w_dpci_adr16_dpm() // 31fb ffff { switch(m_inst_substate) { case 0: @@ -75631,7 +75631,7 @@ adsw2: } } -void m68000_device::move_w_imm16_adr16_dpm() // 31fc ffff +void m68000_mcu_device::move_w_imm16_adr16_dpm() // 31fc ffff { switch(m_inst_substate) { case 0: @@ -75756,7 +75756,7 @@ void m68000_device::move_w_imm16_adr16_dpm() // 31fc ffff } } -void m68000_device::move_w_ds_adr32_dpm() // 33c0 fff8 +void m68000_mcu_device::move_w_ds_adr32_dpm() // 33c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -75879,7 +75879,7 @@ void m68000_device::move_w_ds_adr32_dpm() // 33c0 fff8 } } -void m68000_device::move_w_as_adr32_dpm() // 33c8 fff8 +void m68000_mcu_device::move_w_as_adr32_dpm() // 33c8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -76002,7 +76002,7 @@ void m68000_device::move_w_as_adr32_dpm() // 33c8 fff8 } } -void m68000_device::move_w_ais_adr32_dpm() // 33d0 fff8 +void m68000_mcu_device::move_w_ais_adr32_dpm() // 33d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -76150,7 +76150,7 @@ void m68000_device::move_w_ais_adr32_dpm() // 33d0 fff8 } } -void m68000_device::move_w_aips_adr32_dpm() // 33d8 fff8 +void m68000_mcu_device::move_w_aips_adr32_dpm() // 33d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -76302,7 +76302,7 @@ void m68000_device::move_w_aips_adr32_dpm() // 33d8 fff8 } } -void m68000_device::move_w_pais_adr32_dpm() // 33e0 fff8 +void m68000_mcu_device::move_w_pais_adr32_dpm() // 33e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -76456,7 +76456,7 @@ void m68000_device::move_w_pais_adr32_dpm() // 33e0 fff8 } } -void m68000_device::move_w_das_adr32_dpm() // 33e8 fff8 +void m68000_mcu_device::move_w_das_adr32_dpm() // 33e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -76629,7 +76629,7 @@ void m68000_device::move_w_das_adr32_dpm() // 33e8 fff8 } } -void m68000_device::move_w_dais_adr32_dpm() // 33f0 fff8 +void m68000_mcu_device::move_w_dais_adr32_dpm() // 33f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -76843,7 +76843,7 @@ adsw2: } } -void m68000_device::move_w_adr16_adr32_dpm() // 33f8 ffff +void m68000_mcu_device::move_w_adr16_adr32_dpm() // 33f8 ffff { switch(m_inst_substate) { case 0: @@ -77015,7 +77015,7 @@ void m68000_device::move_w_adr16_adr32_dpm() // 33f8 ffff } } -void m68000_device::move_w_adr32_adr32_dpm() // 33f9 ffff +void m68000_mcu_device::move_w_adr32_adr32_dpm() // 33f9 ffff { switch(m_inst_substate) { case 0: @@ -77211,7 +77211,7 @@ void m68000_device::move_w_adr32_adr32_dpm() // 33f9 ffff } } -void m68000_device::move_w_dpc_adr32_dpm() // 33fa ffff +void m68000_mcu_device::move_w_dpc_adr32_dpm() // 33fa ffff { switch(m_inst_substate) { case 0: @@ -77383,7 +77383,7 @@ void m68000_device::move_w_dpc_adr32_dpm() // 33fa ffff } } -void m68000_device::move_w_dpci_adr32_dpm() // 33fb ffff +void m68000_mcu_device::move_w_dpci_adr32_dpm() // 33fb ffff { switch(m_inst_substate) { case 0: @@ -77596,7 +77596,7 @@ adsw2: } } -void m68000_device::move_w_imm16_adr32_dpm() // 33fc ffff +void m68000_mcu_device::move_w_imm16_adr32_dpm() // 33fc ffff { switch(m_inst_substate) { case 0: @@ -77745,7 +77745,7 @@ void m68000_device::move_w_imm16_adr32_dpm() // 33fc ffff } } -void m68000_device::negx_b_ds_dpm() // 4000 fff8 +void m68000_mcu_device::negx_b_ds_dpm() // 4000 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -77793,7 +77793,7 @@ void m68000_device::negx_b_ds_dpm() // 4000 fff8 } } -void m68000_device::negx_b_ais_dpm() // 4010 fff8 +void m68000_mcu_device::negx_b_ais_dpm() // 4010 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -77878,7 +77878,7 @@ void m68000_device::negx_b_ais_dpm() // 4010 fff8 } } -void m68000_device::negx_b_aips_dpm() // 4018 fff8 +void m68000_mcu_device::negx_b_aips_dpm() // 4018 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -77967,7 +77967,7 @@ void m68000_device::negx_b_aips_dpm() // 4018 fff8 } } -void m68000_device::negx_b_pais_dpm() // 4020 fff8 +void m68000_mcu_device::negx_b_pais_dpm() // 4020 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -78058,7 +78058,7 @@ void m68000_device::negx_b_pais_dpm() // 4020 fff8 } } -void m68000_device::negx_b_das_dpm() // 4028 fff8 +void m68000_mcu_device::negx_b_das_dpm() // 4028 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -78168,7 +78168,7 @@ void m68000_device::negx_b_das_dpm() // 4028 fff8 } } -void m68000_device::negx_b_dais_dpm() // 4030 fff8 +void m68000_mcu_device::negx_b_dais_dpm() // 4030 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -78319,7 +78319,7 @@ adsw2: } } -void m68000_device::negx_b_adr16_dpm() // 4038 ffff +void m68000_mcu_device::negx_b_adr16_dpm() // 4038 ffff { switch(m_inst_substate) { case 0: @@ -78428,7 +78428,7 @@ void m68000_device::negx_b_adr16_dpm() // 4038 ffff } } -void m68000_device::negx_b_adr32_dpm() // 4039 ffff +void m68000_mcu_device::negx_b_adr32_dpm() // 4039 ffff { switch(m_inst_substate) { case 0: @@ -78561,7 +78561,7 @@ void m68000_device::negx_b_adr32_dpm() // 4039 ffff } } -void m68000_device::negx_w_ds_dpm() // 4040 fff8 +void m68000_mcu_device::negx_w_ds_dpm() // 4040 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -78609,7 +78609,7 @@ void m68000_device::negx_w_ds_dpm() // 4040 fff8 } } -void m68000_device::negx_w_ais_dpm() // 4050 fff8 +void m68000_mcu_device::negx_w_ais_dpm() // 4050 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -78704,7 +78704,7 @@ void m68000_device::negx_w_ais_dpm() // 4050 fff8 } } -void m68000_device::negx_w_aips_dpm() // 4058 fff8 +void m68000_mcu_device::negx_w_aips_dpm() // 4058 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -78803,7 +78803,7 @@ void m68000_device::negx_w_aips_dpm() // 4058 fff8 } } -void m68000_device::negx_w_pais_dpm() // 4060 fff8 +void m68000_mcu_device::negx_w_pais_dpm() // 4060 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -78904,7 +78904,7 @@ void m68000_device::negx_w_pais_dpm() // 4060 fff8 } } -void m68000_device::negx_w_das_dpm() // 4068 fff8 +void m68000_mcu_device::negx_w_das_dpm() // 4068 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -79024,7 +79024,7 @@ void m68000_device::negx_w_das_dpm() // 4068 fff8 } } -void m68000_device::negx_w_dais_dpm() // 4070 fff8 +void m68000_mcu_device::negx_w_dais_dpm() // 4070 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -79185,7 +79185,7 @@ adsw2: } } -void m68000_device::negx_w_adr16_dpm() // 4078 ffff +void m68000_mcu_device::negx_w_adr16_dpm() // 4078 ffff { switch(m_inst_substate) { case 0: @@ -79304,7 +79304,7 @@ void m68000_device::negx_w_adr16_dpm() // 4078 ffff } } -void m68000_device::negx_w_adr32_dpm() // 4079 ffff +void m68000_mcu_device::negx_w_adr32_dpm() // 4079 ffff { switch(m_inst_substate) { case 0: @@ -79447,7 +79447,7 @@ void m68000_device::negx_w_adr32_dpm() // 4079 ffff } } -void m68000_device::negx_l_ds_dpm() // 4080 fff8 +void m68000_mcu_device::negx_l_ds_dpm() // 4080 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -79501,7 +79501,7 @@ void m68000_device::negx_l_ds_dpm() // 4080 fff8 } } -void m68000_device::negx_l_ais_dpm() // 4090 fff8 +void m68000_mcu_device::negx_l_ais_dpm() // 4090 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -79646,7 +79646,7 @@ void m68000_device::negx_l_ais_dpm() // 4090 fff8 } } -void m68000_device::negx_l_aips_dpm() // 4098 fff8 +void m68000_mcu_device::negx_l_aips_dpm() // 4098 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -79794,7 +79794,7 @@ void m68000_device::negx_l_aips_dpm() // 4098 fff8 } } -void m68000_device::negx_l_pais_dpm() // 40a0 fff8 +void m68000_mcu_device::negx_l_pais_dpm() // 40a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -79943,7 +79943,7 @@ void m68000_device::negx_l_pais_dpm() // 40a0 fff8 } } -void m68000_device::negx_l_das_dpm() // 40a8 fff8 +void m68000_mcu_device::negx_l_das_dpm() // 40a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -80112,7 +80112,7 @@ void m68000_device::negx_l_das_dpm() // 40a8 fff8 } } -void m68000_device::negx_l_dais_dpm() // 40b0 fff8 +void m68000_mcu_device::negx_l_dais_dpm() // 40b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -80322,7 +80322,7 @@ adsl2: } } -void m68000_device::negx_l_adr16_dpm() // 40b8 ffff +void m68000_mcu_device::negx_l_adr16_dpm() // 40b8 ffff { switch(m_inst_substate) { case 0: @@ -80493,7 +80493,7 @@ void m68000_device::negx_l_adr16_dpm() // 40b8 ffff } } -void m68000_device::negx_l_adr32_dpm() // 40b9 ffff +void m68000_mcu_device::negx_l_adr32_dpm() // 40b9 ffff { switch(m_inst_substate) { case 0: @@ -80688,7 +80688,7 @@ void m68000_device::negx_l_adr32_dpm() // 40b9 ffff } } -void m68000_device::move_sr_ds_dpm() // 40c0 fff8 +void m68000_mcu_device::move_sr_ds_dpm() // 40c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -80735,7 +80735,7 @@ void m68000_device::move_sr_ds_dpm() // 40c0 fff8 } } -void m68000_device::move_sr_ais_dpm() // 40d0 fff8 +void m68000_mcu_device::move_sr_ais_dpm() // 40d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -80831,7 +80831,7 @@ void m68000_device::move_sr_ais_dpm() // 40d0 fff8 } } -void m68000_device::move_sr_aips_dpm() // 40d8 fff8 +void m68000_mcu_device::move_sr_aips_dpm() // 40d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -80931,7 +80931,7 @@ void m68000_device::move_sr_aips_dpm() // 40d8 fff8 } } -void m68000_device::move_sr_pais_dpm() // 40e0 fff8 +void m68000_mcu_device::move_sr_pais_dpm() // 40e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -81033,7 +81033,7 @@ void m68000_device::move_sr_pais_dpm() // 40e0 fff8 } } -void m68000_device::move_sr_das_dpm() // 40e8 fff8 +void m68000_mcu_device::move_sr_das_dpm() // 40e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -81154,7 +81154,7 @@ void m68000_device::move_sr_das_dpm() // 40e8 fff8 } } -void m68000_device::move_sr_dais_dpm() // 40f0 fff8 +void m68000_mcu_device::move_sr_dais_dpm() // 40f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -81316,7 +81316,7 @@ adsw2: } } -void m68000_device::move_sr_adr16_dpm() // 40f8 ffff +void m68000_mcu_device::move_sr_adr16_dpm() // 40f8 ffff { switch(m_inst_substate) { case 0: @@ -81436,7 +81436,7 @@ void m68000_device::move_sr_adr16_dpm() // 40f8 ffff } } -void m68000_device::move_sr_adr32_dpm() // 40f9 ffff +void m68000_mcu_device::move_sr_adr32_dpm() // 40f9 ffff { switch(m_inst_substate) { case 0: @@ -81580,7 +81580,7 @@ void m68000_device::move_sr_adr32_dpm() // 40f9 ffff } } -void m68000_device::chk_w_ds_dd_dpm() // 4180 f1f8 +void m68000_mcu_device::chk_w_ds_dd_dpm() // 4180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -81825,7 +81825,7 @@ chkr4: } } -void m68000_device::chk_w_ais_dd_dpm() // 4190 f1f8 +void m68000_mcu_device::chk_w_ais_dd_dpm() // 4190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -82097,7 +82097,7 @@ chkr4: } } -void m68000_device::chk_w_aips_dd_dpm() // 4198 f1f8 +void m68000_mcu_device::chk_w_aips_dd_dpm() // 4198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -82373,7 +82373,7 @@ chkr4: } } -void m68000_device::chk_w_pais_dd_dpm() // 41a0 f1f8 +void m68000_mcu_device::chk_w_pais_dd_dpm() // 41a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -82651,7 +82651,7 @@ chkr4: } } -void m68000_device::chk_w_das_dd_dpm() // 41a8 f1f8 +void m68000_mcu_device::chk_w_das_dd_dpm() // 41a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -82948,7 +82948,7 @@ chkr4: } } -void m68000_device::chk_w_dais_dd_dpm() // 41b0 f1f8 +void m68000_mcu_device::chk_w_dais_dd_dpm() // 41b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -83286,7 +83286,7 @@ chkr4: } } -void m68000_device::chk_w_adr16_dd_dpm() // 41b8 f1ff +void m68000_mcu_device::chk_w_adr16_dd_dpm() // 41b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -83582,7 +83582,7 @@ chkr4: } } -void m68000_device::chk_w_adr32_dd_dpm() // 41b9 f1ff +void m68000_mcu_device::chk_w_adr32_dd_dpm() // 41b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -83902,7 +83902,7 @@ chkr4: } } -void m68000_device::chk_w_dpc_dd_dpm() // 41ba f1ff +void m68000_mcu_device::chk_w_dpc_dd_dpm() // 41ba f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -84198,7 +84198,7 @@ chkr4: } } -void m68000_device::chk_w_dpci_dd_dpm() // 41bb f1ff +void m68000_mcu_device::chk_w_dpci_dd_dpm() // 41bb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -84535,7 +84535,7 @@ chkr4: } } -void m68000_device::chk_w_imm16_dd_dpm() // 41bc f1ff +void m68000_mcu_device::chk_w_imm16_dd_dpm() // 41bc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -84806,7 +84806,7 @@ chkr4: } } -void m68000_device::lea_ais_ad_dpm() // 41d0 f1f8 +void m68000_mcu_device::lea_ais_ad_dpm() // 41d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -84854,7 +84854,7 @@ void m68000_device::lea_ais_ad_dpm() // 41d0 f1f8 } } -void m68000_device::lea_das_ad_dpm() // 41e8 f1f8 +void m68000_mcu_device::lea_das_ad_dpm() // 41e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -84924,7 +84924,7 @@ void m68000_device::lea_das_ad_dpm() // 41e8 f1f8 } } -void m68000_device::lea_dais_ad_dpm() // 41f0 f1f8 +void m68000_mcu_device::lea_dais_ad_dpm() // 41f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -85037,7 +85037,7 @@ leax4: } } -void m68000_device::lea_adr16_ad_dpm() // 41f8 f1ff +void m68000_mcu_device::lea_adr16_ad_dpm() // 41f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -85104,7 +85104,7 @@ void m68000_device::lea_adr16_ad_dpm() // 41f8 f1ff } } -void m68000_device::lea_adr32_ad_dpm() // 41f9 f1ff +void m68000_mcu_device::lea_adr32_ad_dpm() // 41f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -85197,7 +85197,7 @@ void m68000_device::lea_adr32_ad_dpm() // 41f9 f1ff } } -void m68000_device::lea_dpc_ad_dpm() // 41fa f1ff +void m68000_mcu_device::lea_dpc_ad_dpm() // 41fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -85266,7 +85266,7 @@ void m68000_device::lea_dpc_ad_dpm() // 41fa f1ff } } -void m68000_device::lea_dpci_ad_dpm() // 41fb f1ff +void m68000_mcu_device::lea_dpci_ad_dpm() // 41fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -85378,7 +85378,7 @@ leax4: } } -void m68000_device::clr_b_ds_dpm() // 4200 fff8 +void m68000_mcu_device::clr_b_ds_dpm() // 4200 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -85427,7 +85427,7 @@ void m68000_device::clr_b_ds_dpm() // 4200 fff8 } } -void m68000_device::clr_b_ais_dpm() // 4210 fff8 +void m68000_mcu_device::clr_b_ais_dpm() // 4210 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -85514,7 +85514,7 @@ void m68000_device::clr_b_ais_dpm() // 4210 fff8 } } -void m68000_device::clr_b_aips_dpm() // 4218 fff8 +void m68000_mcu_device::clr_b_aips_dpm() // 4218 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -85606,7 +85606,7 @@ void m68000_device::clr_b_aips_dpm() // 4218 fff8 } } -void m68000_device::clr_b_pais_dpm() // 4220 fff8 +void m68000_mcu_device::clr_b_pais_dpm() // 4220 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -85700,7 +85700,7 @@ void m68000_device::clr_b_pais_dpm() // 4220 fff8 } } -void m68000_device::clr_b_das_dpm() // 4228 fff8 +void m68000_mcu_device::clr_b_das_dpm() // 4228 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -85813,7 +85813,7 @@ void m68000_device::clr_b_das_dpm() // 4228 fff8 } } -void m68000_device::clr_b_dais_dpm() // 4230 fff8 +void m68000_mcu_device::clr_b_dais_dpm() // 4230 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -85969,7 +85969,7 @@ adsw2: } } -void m68000_device::clr_b_adr16_dpm() // 4238 ffff +void m68000_mcu_device::clr_b_adr16_dpm() // 4238 ffff { switch(m_inst_substate) { case 0: @@ -86081,7 +86081,7 @@ void m68000_device::clr_b_adr16_dpm() // 4238 ffff } } -void m68000_device::clr_b_adr32_dpm() // 4239 ffff +void m68000_mcu_device::clr_b_adr32_dpm() // 4239 ffff { switch(m_inst_substate) { case 0: @@ -86218,7 +86218,7 @@ void m68000_device::clr_b_adr32_dpm() // 4239 ffff } } -void m68000_device::clr_w_ds_dpm() // 4240 fff8 +void m68000_mcu_device::clr_w_ds_dpm() // 4240 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -86267,7 +86267,7 @@ void m68000_device::clr_w_ds_dpm() // 4240 fff8 } } -void m68000_device::clr_w_ais_dpm() // 4250 fff8 +void m68000_mcu_device::clr_w_ais_dpm() // 4250 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -86364,7 +86364,7 @@ void m68000_device::clr_w_ais_dpm() // 4250 fff8 } } -void m68000_device::clr_w_aips_dpm() // 4258 fff8 +void m68000_mcu_device::clr_w_aips_dpm() // 4258 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -86466,7 +86466,7 @@ void m68000_device::clr_w_aips_dpm() // 4258 fff8 } } -void m68000_device::clr_w_pais_dpm() // 4260 fff8 +void m68000_mcu_device::clr_w_pais_dpm() // 4260 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -86570,7 +86570,7 @@ void m68000_device::clr_w_pais_dpm() // 4260 fff8 } } -void m68000_device::clr_w_das_dpm() // 4268 fff8 +void m68000_mcu_device::clr_w_das_dpm() // 4268 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -86693,7 +86693,7 @@ void m68000_device::clr_w_das_dpm() // 4268 fff8 } } -void m68000_device::clr_w_dais_dpm() // 4270 fff8 +void m68000_mcu_device::clr_w_dais_dpm() // 4270 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -86859,7 +86859,7 @@ adsw2: } } -void m68000_device::clr_w_adr16_dpm() // 4278 ffff +void m68000_mcu_device::clr_w_adr16_dpm() // 4278 ffff { switch(m_inst_substate) { case 0: @@ -86981,7 +86981,7 @@ void m68000_device::clr_w_adr16_dpm() // 4278 ffff } } -void m68000_device::clr_w_adr32_dpm() // 4279 ffff +void m68000_mcu_device::clr_w_adr32_dpm() // 4279 ffff { switch(m_inst_substate) { case 0: @@ -87128,7 +87128,7 @@ void m68000_device::clr_w_adr32_dpm() // 4279 ffff } } -void m68000_device::clr_l_ds_dpm() // 4280 fff8 +void m68000_mcu_device::clr_l_ds_dpm() // 4280 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -87183,7 +87183,7 @@ void m68000_device::clr_l_ds_dpm() // 4280 fff8 } } -void m68000_device::clr_l_ais_dpm() // 4290 fff8 +void m68000_mcu_device::clr_l_ais_dpm() // 4290 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -87330,7 +87330,7 @@ void m68000_device::clr_l_ais_dpm() // 4290 fff8 } } -void m68000_device::clr_l_aips_dpm() // 4298 fff8 +void m68000_mcu_device::clr_l_aips_dpm() // 4298 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -87481,7 +87481,7 @@ void m68000_device::clr_l_aips_dpm() // 4298 fff8 } } -void m68000_device::clr_l_pais_dpm() // 42a0 fff8 +void m68000_mcu_device::clr_l_pais_dpm() // 42a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -87633,7 +87633,7 @@ void m68000_device::clr_l_pais_dpm() // 42a0 fff8 } } -void m68000_device::clr_l_das_dpm() // 42a8 fff8 +void m68000_mcu_device::clr_l_das_dpm() // 42a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -87805,7 +87805,7 @@ void m68000_device::clr_l_das_dpm() // 42a8 fff8 } } -void m68000_device::clr_l_dais_dpm() // 42b0 fff8 +void m68000_mcu_device::clr_l_dais_dpm() // 42b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -88020,7 +88020,7 @@ adsl2: } } -void m68000_device::clr_l_adr16_dpm() // 42b8 ffff +void m68000_mcu_device::clr_l_adr16_dpm() // 42b8 ffff { switch(m_inst_substate) { case 0: @@ -88195,7 +88195,7 @@ void m68000_device::clr_l_adr16_dpm() // 42b8 ffff } } -void m68000_device::clr_l_adr32_dpm() // 42b9 ffff +void m68000_mcu_device::clr_l_adr32_dpm() // 42b9 ffff { switch(m_inst_substate) { case 0: @@ -88395,7 +88395,7 @@ void m68000_device::clr_l_adr32_dpm() // 42b9 ffff } } -void m68000_device::neg_b_ds_dpm() // 4400 fff8 +void m68000_mcu_device::neg_b_ds_dpm() // 4400 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -88443,7 +88443,7 @@ void m68000_device::neg_b_ds_dpm() // 4400 fff8 } } -void m68000_device::neg_b_ais_dpm() // 4410 fff8 +void m68000_mcu_device::neg_b_ais_dpm() // 4410 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -88528,7 +88528,7 @@ void m68000_device::neg_b_ais_dpm() // 4410 fff8 } } -void m68000_device::neg_b_aips_dpm() // 4418 fff8 +void m68000_mcu_device::neg_b_aips_dpm() // 4418 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -88617,7 +88617,7 @@ void m68000_device::neg_b_aips_dpm() // 4418 fff8 } } -void m68000_device::neg_b_pais_dpm() // 4420 fff8 +void m68000_mcu_device::neg_b_pais_dpm() // 4420 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -88708,7 +88708,7 @@ void m68000_device::neg_b_pais_dpm() // 4420 fff8 } } -void m68000_device::neg_b_das_dpm() // 4428 fff8 +void m68000_mcu_device::neg_b_das_dpm() // 4428 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -88818,7 +88818,7 @@ void m68000_device::neg_b_das_dpm() // 4428 fff8 } } -void m68000_device::neg_b_dais_dpm() // 4430 fff8 +void m68000_mcu_device::neg_b_dais_dpm() // 4430 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -88969,7 +88969,7 @@ adsw2: } } -void m68000_device::neg_b_adr16_dpm() // 4438 ffff +void m68000_mcu_device::neg_b_adr16_dpm() // 4438 ffff { switch(m_inst_substate) { case 0: @@ -89078,7 +89078,7 @@ void m68000_device::neg_b_adr16_dpm() // 4438 ffff } } -void m68000_device::neg_b_adr32_dpm() // 4439 ffff +void m68000_mcu_device::neg_b_adr32_dpm() // 4439 ffff { switch(m_inst_substate) { case 0: @@ -89211,7 +89211,7 @@ void m68000_device::neg_b_adr32_dpm() // 4439 ffff } } -void m68000_device::neg_w_ds_dpm() // 4440 fff8 +void m68000_mcu_device::neg_w_ds_dpm() // 4440 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -89259,7 +89259,7 @@ void m68000_device::neg_w_ds_dpm() // 4440 fff8 } } -void m68000_device::neg_w_ais_dpm() // 4450 fff8 +void m68000_mcu_device::neg_w_ais_dpm() // 4450 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -89354,7 +89354,7 @@ void m68000_device::neg_w_ais_dpm() // 4450 fff8 } } -void m68000_device::neg_w_aips_dpm() // 4458 fff8 +void m68000_mcu_device::neg_w_aips_dpm() // 4458 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -89453,7 +89453,7 @@ void m68000_device::neg_w_aips_dpm() // 4458 fff8 } } -void m68000_device::neg_w_pais_dpm() // 4460 fff8 +void m68000_mcu_device::neg_w_pais_dpm() // 4460 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -89554,7 +89554,7 @@ void m68000_device::neg_w_pais_dpm() // 4460 fff8 } } -void m68000_device::neg_w_das_dpm() // 4468 fff8 +void m68000_mcu_device::neg_w_das_dpm() // 4468 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -89674,7 +89674,7 @@ void m68000_device::neg_w_das_dpm() // 4468 fff8 } } -void m68000_device::neg_w_dais_dpm() // 4470 fff8 +void m68000_mcu_device::neg_w_dais_dpm() // 4470 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -89835,7 +89835,7 @@ adsw2: } } -void m68000_device::neg_w_adr16_dpm() // 4478 ffff +void m68000_mcu_device::neg_w_adr16_dpm() // 4478 ffff { switch(m_inst_substate) { case 0: @@ -89954,7 +89954,7 @@ void m68000_device::neg_w_adr16_dpm() // 4478 ffff } } -void m68000_device::neg_w_adr32_dpm() // 4479 ffff +void m68000_mcu_device::neg_w_adr32_dpm() // 4479 ffff { switch(m_inst_substate) { case 0: @@ -90097,7 +90097,7 @@ void m68000_device::neg_w_adr32_dpm() // 4479 ffff } } -void m68000_device::neg_l_ds_dpm() // 4480 fff8 +void m68000_mcu_device::neg_l_ds_dpm() // 4480 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -90151,7 +90151,7 @@ void m68000_device::neg_l_ds_dpm() // 4480 fff8 } } -void m68000_device::neg_l_ais_dpm() // 4490 fff8 +void m68000_mcu_device::neg_l_ais_dpm() // 4490 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -90296,7 +90296,7 @@ void m68000_device::neg_l_ais_dpm() // 4490 fff8 } } -void m68000_device::neg_l_aips_dpm() // 4498 fff8 +void m68000_mcu_device::neg_l_aips_dpm() // 4498 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -90444,7 +90444,7 @@ void m68000_device::neg_l_aips_dpm() // 4498 fff8 } } -void m68000_device::neg_l_pais_dpm() // 44a0 fff8 +void m68000_mcu_device::neg_l_pais_dpm() // 44a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -90593,7 +90593,7 @@ void m68000_device::neg_l_pais_dpm() // 44a0 fff8 } } -void m68000_device::neg_l_das_dpm() // 44a8 fff8 +void m68000_mcu_device::neg_l_das_dpm() // 44a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -90762,7 +90762,7 @@ void m68000_device::neg_l_das_dpm() // 44a8 fff8 } } -void m68000_device::neg_l_dais_dpm() // 44b0 fff8 +void m68000_mcu_device::neg_l_dais_dpm() // 44b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -90972,7 +90972,7 @@ adsl2: } } -void m68000_device::neg_l_adr16_dpm() // 44b8 ffff +void m68000_mcu_device::neg_l_adr16_dpm() // 44b8 ffff { switch(m_inst_substate) { case 0: @@ -91143,7 +91143,7 @@ void m68000_device::neg_l_adr16_dpm() // 44b8 ffff } } -void m68000_device::neg_l_adr32_dpm() // 44b9 ffff +void m68000_mcu_device::neg_l_adr32_dpm() // 44b9 ffff { switch(m_inst_substate) { case 0: @@ -91338,7 +91338,7 @@ void m68000_device::neg_l_adr32_dpm() // 44b9 ffff } } -void m68000_device::move_ds_ccr_dpm() // 44c0 fff8 +void m68000_mcu_device::move_ds_ccr_dpm() // 44c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -91416,7 +91416,7 @@ void m68000_device::move_ds_ccr_dpm() // 44c0 fff8 } } -void m68000_device::move_ais_ccr_dpm() // 44d0 fff8 +void m68000_mcu_device::move_ais_ccr_dpm() // 44d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -91521,7 +91521,7 @@ void m68000_device::move_ais_ccr_dpm() // 44d0 fff8 } } -void m68000_device::move_aips_ccr_dpm() // 44d8 fff8 +void m68000_mcu_device::move_aips_ccr_dpm() // 44d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -91630,7 +91630,7 @@ void m68000_device::move_aips_ccr_dpm() // 44d8 fff8 } } -void m68000_device::move_pais_ccr_dpm() // 44e0 fff8 +void m68000_mcu_device::move_pais_ccr_dpm() // 44e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -91741,7 +91741,7 @@ void m68000_device::move_pais_ccr_dpm() // 44e0 fff8 } } -void m68000_device::move_das_ccr_dpm() // 44e8 fff8 +void m68000_mcu_device::move_das_ccr_dpm() // 44e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -91871,7 +91871,7 @@ void m68000_device::move_das_ccr_dpm() // 44e8 fff8 } } -void m68000_device::move_dais_ccr_dpm() // 44f0 fff8 +void m68000_mcu_device::move_dais_ccr_dpm() // 44f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -92042,7 +92042,7 @@ adsw2: } } -void m68000_device::move_adr16_ccr_dpm() // 44f8 ffff +void m68000_mcu_device::move_adr16_ccr_dpm() // 44f8 ffff { switch(m_inst_substate) { case 0: @@ -92171,7 +92171,7 @@ void m68000_device::move_adr16_ccr_dpm() // 44f8 ffff } } -void m68000_device::move_adr32_ccr_dpm() // 44f9 ffff +void m68000_mcu_device::move_adr32_ccr_dpm() // 44f9 ffff { switch(m_inst_substate) { case 0: @@ -92324,7 +92324,7 @@ void m68000_device::move_adr32_ccr_dpm() // 44f9 ffff } } -void m68000_device::move_dpc_ccr_dpm() // 44fa ffff +void m68000_mcu_device::move_dpc_ccr_dpm() // 44fa ffff { switch(m_inst_substate) { case 0: @@ -92453,7 +92453,7 @@ void m68000_device::move_dpc_ccr_dpm() // 44fa ffff } } -void m68000_device::move_dpci_ccr_dpm() // 44fb ffff +void m68000_mcu_device::move_dpci_ccr_dpm() // 44fb ffff { switch(m_inst_substate) { case 0: @@ -92623,7 +92623,7 @@ adsw2: } } -void m68000_device::move_imm8_ccr_dpm() // 44fc ffff +void m68000_mcu_device::move_imm8_ccr_dpm() // 44fc ffff { switch(m_inst_substate) { case 0: @@ -92727,7 +92727,7 @@ void m68000_device::move_imm8_ccr_dpm() // 44fc ffff } } -void m68000_device::not_b_ds_dpm() // 4600 fff8 +void m68000_mcu_device::not_b_ds_dpm() // 4600 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -92775,7 +92775,7 @@ void m68000_device::not_b_ds_dpm() // 4600 fff8 } } -void m68000_device::not_b_ais_dpm() // 4610 fff8 +void m68000_mcu_device::not_b_ais_dpm() // 4610 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -92860,7 +92860,7 @@ void m68000_device::not_b_ais_dpm() // 4610 fff8 } } -void m68000_device::not_b_aips_dpm() // 4618 fff8 +void m68000_mcu_device::not_b_aips_dpm() // 4618 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -92949,7 +92949,7 @@ void m68000_device::not_b_aips_dpm() // 4618 fff8 } } -void m68000_device::not_b_pais_dpm() // 4620 fff8 +void m68000_mcu_device::not_b_pais_dpm() // 4620 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -93040,7 +93040,7 @@ void m68000_device::not_b_pais_dpm() // 4620 fff8 } } -void m68000_device::not_b_das_dpm() // 4628 fff8 +void m68000_mcu_device::not_b_das_dpm() // 4628 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -93150,7 +93150,7 @@ void m68000_device::not_b_das_dpm() // 4628 fff8 } } -void m68000_device::not_b_dais_dpm() // 4630 fff8 +void m68000_mcu_device::not_b_dais_dpm() // 4630 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -93301,7 +93301,7 @@ adsw2: } } -void m68000_device::not_b_adr16_dpm() // 4638 ffff +void m68000_mcu_device::not_b_adr16_dpm() // 4638 ffff { switch(m_inst_substate) { case 0: @@ -93410,7 +93410,7 @@ void m68000_device::not_b_adr16_dpm() // 4638 ffff } } -void m68000_device::not_b_adr32_dpm() // 4639 ffff +void m68000_mcu_device::not_b_adr32_dpm() // 4639 ffff { switch(m_inst_substate) { case 0: @@ -93543,7 +93543,7 @@ void m68000_device::not_b_adr32_dpm() // 4639 ffff } } -void m68000_device::not_w_ds_dpm() // 4640 fff8 +void m68000_mcu_device::not_w_ds_dpm() // 4640 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -93591,7 +93591,7 @@ void m68000_device::not_w_ds_dpm() // 4640 fff8 } } -void m68000_device::not_w_ais_dpm() // 4650 fff8 +void m68000_mcu_device::not_w_ais_dpm() // 4650 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -93686,7 +93686,7 @@ void m68000_device::not_w_ais_dpm() // 4650 fff8 } } -void m68000_device::not_w_aips_dpm() // 4658 fff8 +void m68000_mcu_device::not_w_aips_dpm() // 4658 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -93785,7 +93785,7 @@ void m68000_device::not_w_aips_dpm() // 4658 fff8 } } -void m68000_device::not_w_pais_dpm() // 4660 fff8 +void m68000_mcu_device::not_w_pais_dpm() // 4660 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -93886,7 +93886,7 @@ void m68000_device::not_w_pais_dpm() // 4660 fff8 } } -void m68000_device::not_w_das_dpm() // 4668 fff8 +void m68000_mcu_device::not_w_das_dpm() // 4668 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -94006,7 +94006,7 @@ void m68000_device::not_w_das_dpm() // 4668 fff8 } } -void m68000_device::not_w_dais_dpm() // 4670 fff8 +void m68000_mcu_device::not_w_dais_dpm() // 4670 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -94167,7 +94167,7 @@ adsw2: } } -void m68000_device::not_w_adr16_dpm() // 4678 ffff +void m68000_mcu_device::not_w_adr16_dpm() // 4678 ffff { switch(m_inst_substate) { case 0: @@ -94286,7 +94286,7 @@ void m68000_device::not_w_adr16_dpm() // 4678 ffff } } -void m68000_device::not_w_adr32_dpm() // 4679 ffff +void m68000_mcu_device::not_w_adr32_dpm() // 4679 ffff { switch(m_inst_substate) { case 0: @@ -94429,7 +94429,7 @@ void m68000_device::not_w_adr32_dpm() // 4679 ffff } } -void m68000_device::not_l_ds_dpm() // 4680 fff8 +void m68000_mcu_device::not_l_ds_dpm() // 4680 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -94483,7 +94483,7 @@ void m68000_device::not_l_ds_dpm() // 4680 fff8 } } -void m68000_device::not_l_ais_dpm() // 4690 fff8 +void m68000_mcu_device::not_l_ais_dpm() // 4690 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -94628,7 +94628,7 @@ void m68000_device::not_l_ais_dpm() // 4690 fff8 } } -void m68000_device::not_l_aips_dpm() // 4698 fff8 +void m68000_mcu_device::not_l_aips_dpm() // 4698 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -94776,7 +94776,7 @@ void m68000_device::not_l_aips_dpm() // 4698 fff8 } } -void m68000_device::not_l_pais_dpm() // 46a0 fff8 +void m68000_mcu_device::not_l_pais_dpm() // 46a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -94925,7 +94925,7 @@ void m68000_device::not_l_pais_dpm() // 46a0 fff8 } } -void m68000_device::not_l_das_dpm() // 46a8 fff8 +void m68000_mcu_device::not_l_das_dpm() // 46a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -95094,7 +95094,7 @@ void m68000_device::not_l_das_dpm() // 46a8 fff8 } } -void m68000_device::not_l_dais_dpm() // 46b0 fff8 +void m68000_mcu_device::not_l_dais_dpm() // 46b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -95304,7 +95304,7 @@ adsl2: } } -void m68000_device::not_l_adr16_dpm() // 46b8 ffff +void m68000_mcu_device::not_l_adr16_dpm() // 46b8 ffff { switch(m_inst_substate) { case 0: @@ -95475,7 +95475,7 @@ void m68000_device::not_l_adr16_dpm() // 46b8 ffff } } -void m68000_device::not_l_adr32_dpm() // 46b9 ffff +void m68000_mcu_device::not_l_adr32_dpm() // 46b9 ffff { switch(m_inst_substate) { case 0: @@ -95670,7 +95670,7 @@ void m68000_device::not_l_adr32_dpm() // 46b9 ffff } } -void m68000_device::move_ds_sr_dpm() // 46c0 fff8 +void m68000_mcu_device::move_ds_sr_dpm() // 46c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -95754,7 +95754,7 @@ void m68000_device::move_ds_sr_dpm() // 46c0 fff8 } } -void m68000_device::move_ais_sr_dpm() // 46d0 fff8 +void m68000_mcu_device::move_ais_sr_dpm() // 46d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -95865,7 +95865,7 @@ void m68000_device::move_ais_sr_dpm() // 46d0 fff8 } } -void m68000_device::move_aips_sr_dpm() // 46d8 fff8 +void m68000_mcu_device::move_aips_sr_dpm() // 46d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -95980,7 +95980,7 @@ void m68000_device::move_aips_sr_dpm() // 46d8 fff8 } } -void m68000_device::move_pais_sr_dpm() // 46e0 fff8 +void m68000_mcu_device::move_pais_sr_dpm() // 46e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -96097,7 +96097,7 @@ void m68000_device::move_pais_sr_dpm() // 46e0 fff8 } } -void m68000_device::move_das_sr_dpm() // 46e8 fff8 +void m68000_mcu_device::move_das_sr_dpm() // 46e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -96233,7 +96233,7 @@ void m68000_device::move_das_sr_dpm() // 46e8 fff8 } } -void m68000_device::move_dais_sr_dpm() // 46f0 fff8 +void m68000_mcu_device::move_dais_sr_dpm() // 46f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -96410,7 +96410,7 @@ adsw2: } } -void m68000_device::move_adr16_sr_dpm() // 46f8 ffff +void m68000_mcu_device::move_adr16_sr_dpm() // 46f8 ffff { switch(m_inst_substate) { case 0: @@ -96545,7 +96545,7 @@ void m68000_device::move_adr16_sr_dpm() // 46f8 ffff } } -void m68000_device::move_adr32_sr_dpm() // 46f9 ffff +void m68000_mcu_device::move_adr32_sr_dpm() // 46f9 ffff { switch(m_inst_substate) { case 0: @@ -96704,7 +96704,7 @@ void m68000_device::move_adr32_sr_dpm() // 46f9 ffff } } -void m68000_device::move_dpc_sr_dpm() // 46fa ffff +void m68000_mcu_device::move_dpc_sr_dpm() // 46fa ffff { switch(m_inst_substate) { case 0: @@ -96839,7 +96839,7 @@ void m68000_device::move_dpc_sr_dpm() // 46fa ffff } } -void m68000_device::move_dpci_sr_dpm() // 46fb ffff +void m68000_mcu_device::move_dpci_sr_dpm() // 46fb ffff { switch(m_inst_substate) { case 0: @@ -97015,7 +97015,7 @@ adsw2: } } -void m68000_device::move_i16u_sr_dpm() // 46fc ffff +void m68000_mcu_device::move_i16u_sr_dpm() // 46fc ffff { switch(m_inst_substate) { case 0: @@ -97125,7 +97125,7 @@ void m68000_device::move_i16u_sr_dpm() // 46fc ffff } } -void m68000_device::nbcd_b_ds_dpm() // 4800 fff8 +void m68000_mcu_device::nbcd_b_ds_dpm() // 4800 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -97177,7 +97177,7 @@ void m68000_device::nbcd_b_ds_dpm() // 4800 fff8 } } -void m68000_device::nbcd_b_ais_dpm() // 4810 fff8 +void m68000_mcu_device::nbcd_b_ais_dpm() // 4810 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -97264,7 +97264,7 @@ void m68000_device::nbcd_b_ais_dpm() // 4810 fff8 } } -void m68000_device::nbcd_b_aips_dpm() // 4818 fff8 +void m68000_mcu_device::nbcd_b_aips_dpm() // 4818 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -97355,7 +97355,7 @@ void m68000_device::nbcd_b_aips_dpm() // 4818 fff8 } } -void m68000_device::nbcd_b_pais_dpm() // 4820 fff8 +void m68000_mcu_device::nbcd_b_pais_dpm() // 4820 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -97448,7 +97448,7 @@ void m68000_device::nbcd_b_pais_dpm() // 4820 fff8 } } -void m68000_device::nbcd_b_das_dpm() // 4828 fff8 +void m68000_mcu_device::nbcd_b_das_dpm() // 4828 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -97560,7 +97560,7 @@ void m68000_device::nbcd_b_das_dpm() // 4828 fff8 } } -void m68000_device::nbcd_b_dais_dpm() // 4830 fff8 +void m68000_mcu_device::nbcd_b_dais_dpm() // 4830 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -97713,7 +97713,7 @@ adsw2: } } -void m68000_device::nbcd_b_adr16_dpm() // 4838 ffff +void m68000_mcu_device::nbcd_b_adr16_dpm() // 4838 ffff { switch(m_inst_substate) { case 0: @@ -97824,7 +97824,7 @@ void m68000_device::nbcd_b_adr16_dpm() // 4838 ffff } } -void m68000_device::nbcd_b_adr32_dpm() // 4839 ffff +void m68000_mcu_device::nbcd_b_adr32_dpm() // 4839 ffff { switch(m_inst_substate) { case 0: @@ -97959,7 +97959,7 @@ void m68000_device::nbcd_b_adr32_dpm() // 4839 ffff } } -void m68000_device::swap_ds_dpm() // 4840 fff8 +void m68000_mcu_device::swap_ds_dpm() // 4840 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -98011,7 +98011,7 @@ void m68000_device::swap_ds_dpm() // 4840 fff8 } } -void m68000_device::pea_ais_dpm() // 4850 fff8 +void m68000_mcu_device::pea_ais_dpm() // 4850 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -98103,7 +98103,7 @@ void m68000_device::pea_ais_dpm() // 4850 fff8 } } -void m68000_device::pea_das_dpm() // 4868 fff8 +void m68000_mcu_device::pea_das_dpm() // 4868 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -98224,7 +98224,7 @@ void m68000_device::pea_das_dpm() // 4868 fff8 } } -void m68000_device::pea_dais_dpm() // 4870 fff8 +void m68000_mcu_device::pea_dais_dpm() // 4870 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -98384,7 +98384,7 @@ peax4: } } -void m68000_device::pea_adr16_dpm() // 4878 ffff +void m68000_mcu_device::pea_adr16_dpm() // 4878 ffff { switch(m_inst_substate) { case 0: @@ -98503,7 +98503,7 @@ void m68000_device::pea_adr16_dpm() // 4878 ffff } } -void m68000_device::pea_adr32_dpm() // 4879 ffff +void m68000_mcu_device::pea_adr32_dpm() // 4879 ffff { switch(m_inst_substate) { case 0: @@ -98646,7 +98646,7 @@ void m68000_device::pea_adr32_dpm() // 4879 ffff } } -void m68000_device::pea_dpc_dpm() // 487a ffff +void m68000_mcu_device::pea_dpc_dpm() // 487a ffff { switch(m_inst_substate) { case 0: @@ -98766,7 +98766,7 @@ void m68000_device::pea_dpc_dpm() // 487a ffff } } -void m68000_device::pea_dpci_dpm() // 487b ffff +void m68000_mcu_device::pea_dpci_dpm() // 487b ffff { switch(m_inst_substate) { case 0: @@ -98925,7 +98925,7 @@ peax4: } } -void m68000_device::ext_w_ds_dpm() // 4880 fff8 +void m68000_mcu_device::ext_w_ds_dpm() // 4880 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -98973,7 +98973,7 @@ void m68000_device::ext_w_ds_dpm() // 4880 fff8 } } -void m68000_device::movem_w_list_ais_dpm() // 4890 fff8 +void m68000_mcu_device::movem_w_list_ais_dpm() // 4890 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -99080,7 +99080,7 @@ mmrw2: } } -void m68000_device::movem_w_listp_pais_dpm() // 48a0 fff8 +void m68000_mcu_device::movem_w_listp_pais_dpm() // 48a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -99190,7 +99190,7 @@ push3: } } -void m68000_device::movem_w_list_das_dpm() // 48a8 fff8 +void m68000_mcu_device::movem_w_list_das_dpm() // 48a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -99323,7 +99323,7 @@ mmrw2: } } -void m68000_device::movem_w_list_dais_dpm() // 48b0 fff8 +void m68000_mcu_device::movem_w_list_dais_dpm() // 48b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -99497,7 +99497,7 @@ mmrw2: } } -void m68000_device::movem_w_list_adr16_dpm() // 48b8 ffff +void m68000_mcu_device::movem_w_list_adr16_dpm() // 48b8 ffff { switch(m_inst_substate) { case 0: @@ -99630,7 +99630,7 @@ mmrw2: } } -void m68000_device::movem_w_list_adr32_dpm() // 48b9 ffff +void m68000_mcu_device::movem_w_list_adr32_dpm() // 48b9 ffff { switch(m_inst_substate) { case 0: @@ -99787,7 +99787,7 @@ mmrw2: } } -void m68000_device::ext_l_ds_dpm() // 48c0 fff8 +void m68000_mcu_device::ext_l_ds_dpm() // 48c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -99835,7 +99835,7 @@ void m68000_device::ext_l_ds_dpm() // 48c0 fff8 } } -void m68000_device::movem_l_list_ais_dpm() // 48d0 fff8 +void m68000_mcu_device::movem_l_list_ais_dpm() // 48d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -99965,7 +99965,7 @@ mmrw2: } } -void m68000_device::movem_l_listp_pais_dpm() // 48e0 fff8 +void m68000_mcu_device::movem_l_listp_pais_dpm() // 48e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -100099,7 +100099,7 @@ push3: } } -void m68000_device::movem_l_list_das_dpm() // 48e8 fff8 +void m68000_mcu_device::movem_l_list_das_dpm() // 48e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -100255,7 +100255,7 @@ mmrw2: } } -void m68000_device::movem_l_list_dais_dpm() // 48f0 fff8 +void m68000_mcu_device::movem_l_list_dais_dpm() // 48f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -100452,7 +100452,7 @@ mmrw2: } } -void m68000_device::movem_l_list_adr16_dpm() // 48f8 ffff +void m68000_mcu_device::movem_l_list_adr16_dpm() // 48f8 ffff { switch(m_inst_substate) { case 0: @@ -100608,7 +100608,7 @@ mmrw2: } } -void m68000_device::movem_l_list_adr32_dpm() // 48f9 ffff +void m68000_mcu_device::movem_l_list_adr32_dpm() // 48f9 ffff { switch(m_inst_substate) { case 0: @@ -100788,7 +100788,7 @@ mmrw2: } } -void m68000_device::tst_b_ds_dpm() // 4a00 fff8 +void m68000_mcu_device::tst_b_ds_dpm() // 4a00 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -100836,7 +100836,7 @@ void m68000_device::tst_b_ds_dpm() // 4a00 fff8 } } -void m68000_device::tst_b_ais_dpm() // 4a10 fff8 +void m68000_mcu_device::tst_b_ais_dpm() // 4a10 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -100907,7 +100907,7 @@ void m68000_device::tst_b_ais_dpm() // 4a10 fff8 } } -void m68000_device::tst_b_aips_dpm() // 4a18 fff8 +void m68000_mcu_device::tst_b_aips_dpm() // 4a18 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -100983,7 +100983,7 @@ void m68000_device::tst_b_aips_dpm() // 4a18 fff8 } } -void m68000_device::tst_b_pais_dpm() // 4a20 fff8 +void m68000_mcu_device::tst_b_pais_dpm() // 4a20 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -101061,7 +101061,7 @@ void m68000_device::tst_b_pais_dpm() // 4a20 fff8 } } -void m68000_device::tst_b_das_dpm() // 4a28 fff8 +void m68000_mcu_device::tst_b_das_dpm() // 4a28 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -101158,7 +101158,7 @@ void m68000_device::tst_b_das_dpm() // 4a28 fff8 } } -void m68000_device::tst_b_dais_dpm() // 4a30 fff8 +void m68000_mcu_device::tst_b_dais_dpm() // 4a30 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -101298,7 +101298,7 @@ adsw2: } } -void m68000_device::tst_b_adr16_dpm() // 4a38 ffff +void m68000_mcu_device::tst_b_adr16_dpm() // 4a38 ffff { switch(m_inst_substate) { case 0: @@ -101394,7 +101394,7 @@ void m68000_device::tst_b_adr16_dpm() // 4a38 ffff } } -void m68000_device::tst_b_adr32_dpm() // 4a39 ffff +void m68000_mcu_device::tst_b_adr32_dpm() // 4a39 ffff { switch(m_inst_substate) { case 0: @@ -101515,7 +101515,7 @@ void m68000_device::tst_b_adr32_dpm() // 4a39 ffff } } -void m68000_device::tst_w_ds_dpm() // 4a40 fff8 +void m68000_mcu_device::tst_w_ds_dpm() // 4a40 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -101563,7 +101563,7 @@ void m68000_device::tst_w_ds_dpm() // 4a40 fff8 } } -void m68000_device::tst_w_ais_dpm() // 4a50 fff8 +void m68000_mcu_device::tst_w_ais_dpm() // 4a50 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -101638,7 +101638,7 @@ void m68000_device::tst_w_ais_dpm() // 4a50 fff8 } } -void m68000_device::tst_w_aips_dpm() // 4a58 fff8 +void m68000_mcu_device::tst_w_aips_dpm() // 4a58 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -101718,7 +101718,7 @@ void m68000_device::tst_w_aips_dpm() // 4a58 fff8 } } -void m68000_device::tst_w_pais_dpm() // 4a60 fff8 +void m68000_mcu_device::tst_w_pais_dpm() // 4a60 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -101800,7 +101800,7 @@ void m68000_device::tst_w_pais_dpm() // 4a60 fff8 } } -void m68000_device::tst_w_das_dpm() // 4a68 fff8 +void m68000_mcu_device::tst_w_das_dpm() // 4a68 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -101901,7 +101901,7 @@ void m68000_device::tst_w_das_dpm() // 4a68 fff8 } } -void m68000_device::tst_w_dais_dpm() // 4a70 fff8 +void m68000_mcu_device::tst_w_dais_dpm() // 4a70 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -102045,7 +102045,7 @@ adsw2: } } -void m68000_device::tst_w_adr16_dpm() // 4a78 ffff +void m68000_mcu_device::tst_w_adr16_dpm() // 4a78 ffff { switch(m_inst_substate) { case 0: @@ -102145,7 +102145,7 @@ void m68000_device::tst_w_adr16_dpm() // 4a78 ffff } } -void m68000_device::tst_w_adr32_dpm() // 4a79 ffff +void m68000_mcu_device::tst_w_adr32_dpm() // 4a79 ffff { switch(m_inst_substate) { case 0: @@ -102270,7 +102270,7 @@ void m68000_device::tst_w_adr32_dpm() // 4a79 ffff } } -void m68000_device::tst_l_ds_dpm() // 4a80 fff8 +void m68000_mcu_device::tst_l_ds_dpm() // 4a80 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -102320,7 +102320,7 @@ void m68000_device::tst_l_ds_dpm() // 4a80 fff8 } } -void m68000_device::tst_l_ais_dpm() // 4a90 fff8 +void m68000_mcu_device::tst_l_ais_dpm() // 4a90 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -102421,7 +102421,7 @@ void m68000_device::tst_l_ais_dpm() // 4a90 fff8 } } -void m68000_device::tst_l_aips_dpm() // 4a98 fff8 +void m68000_mcu_device::tst_l_aips_dpm() // 4a98 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -102526,7 +102526,7 @@ void m68000_device::tst_l_aips_dpm() // 4a98 fff8 } } -void m68000_device::tst_l_pais_dpm() // 4aa0 fff8 +void m68000_mcu_device::tst_l_pais_dpm() // 4aa0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -102632,7 +102632,7 @@ void m68000_device::tst_l_pais_dpm() // 4aa0 fff8 } } -void m68000_device::tst_l_das_dpm() // 4aa8 fff8 +void m68000_mcu_device::tst_l_das_dpm() // 4aa8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -102758,7 +102758,7 @@ void m68000_device::tst_l_das_dpm() // 4aa8 fff8 } } -void m68000_device::tst_l_dais_dpm() // 4ab0 fff8 +void m68000_mcu_device::tst_l_dais_dpm() // 4ab0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -102927,7 +102927,7 @@ adsl2: } } -void m68000_device::tst_l_adr16_dpm() // 4ab8 ffff +void m68000_mcu_device::tst_l_adr16_dpm() // 4ab8 ffff { switch(m_inst_substate) { case 0: @@ -103056,7 +103056,7 @@ void m68000_device::tst_l_adr16_dpm() // 4ab8 ffff } } -void m68000_device::tst_l_adr32_dpm() // 4ab9 ffff +void m68000_mcu_device::tst_l_adr32_dpm() // 4ab9 ffff { switch(m_inst_substate) { case 0: @@ -103210,7 +103210,7 @@ void m68000_device::tst_l_adr32_dpm() // 4ab9 ffff } } -void m68000_device::tas_ds_dpm() // 4ac0 fff8 +void m68000_mcu_device::tas_ds_dpm() // 4ac0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -103260,7 +103260,7 @@ void m68000_device::tas_ds_dpm() // 4ac0 fff8 } } -void m68000_device::tas_ais_dpm() // 4ad0 fff8 +void m68000_mcu_device::tas_ais_dpm() // 4ad0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -103355,7 +103355,7 @@ void m68000_device::tas_ais_dpm() // 4ad0 fff8 } } -void m68000_device::tas_aips_dpm() // 4ad8 fff8 +void m68000_mcu_device::tas_aips_dpm() // 4ad8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -103455,7 +103455,7 @@ void m68000_device::tas_aips_dpm() // 4ad8 fff8 } } -void m68000_device::tas_pais_dpm() // 4ae0 fff8 +void m68000_mcu_device::tas_pais_dpm() // 4ae0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -103557,7 +103557,7 @@ void m68000_device::tas_pais_dpm() // 4ae0 fff8 } } -void m68000_device::tas_das_dpm() // 4ae8 fff8 +void m68000_mcu_device::tas_das_dpm() // 4ae8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -103678,7 +103678,7 @@ void m68000_device::tas_das_dpm() // 4ae8 fff8 } } -void m68000_device::tas_dais_dpm() // 4af0 fff8 +void m68000_mcu_device::tas_dais_dpm() // 4af0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -103842,7 +103842,7 @@ adsw2: } } -void m68000_device::tas_adr16_dpm() // 4af8 ffff +void m68000_mcu_device::tas_adr16_dpm() // 4af8 ffff { switch(m_inst_substate) { case 0: @@ -103962,7 +103962,7 @@ void m68000_device::tas_adr16_dpm() // 4af8 ffff } } -void m68000_device::tas_adr32_dpm() // 4af9 ffff +void m68000_mcu_device::tas_adr32_dpm() // 4af9 ffff { switch(m_inst_substate) { case 0: @@ -104107,7 +104107,7 @@ void m68000_device::tas_adr32_dpm() // 4af9 ffff } } -void m68000_device::movem_w_ais_list_dpm() // 4c90 fff8 +void m68000_mcu_device::movem_w_ais_list_dpm() // 4c90 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -104239,7 +104239,7 @@ mmaw2: } } -void m68000_device::movem_w_aips_list_dpm() // 4c98 fff8 +void m68000_mcu_device::movem_w_aips_list_dpm() // 4c98 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -104372,7 +104372,7 @@ popm6: } } -void m68000_device::movem_w_das_list_dpm() // 4ca8 fff8 +void m68000_mcu_device::movem_w_das_list_dpm() // 4ca8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -104530,7 +104530,7 @@ mmaw2: } } -void m68000_device::movem_w_dais_list_dpm() // 4cb0 fff8 +void m68000_mcu_device::movem_w_dais_list_dpm() // 4cb0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -104728,7 +104728,7 @@ mmaw2: } } -void m68000_device::movem_w_adr16_list_dpm() // 4cb8 ffff +void m68000_mcu_device::movem_w_adr16_list_dpm() // 4cb8 ffff { switch(m_inst_substate) { case 0: @@ -104884,7 +104884,7 @@ mmaw2: } } -void m68000_device::movem_w_adr32_list_dpm() // 4cb9 ffff +void m68000_mcu_device::movem_w_adr32_list_dpm() // 4cb9 ffff { switch(m_inst_substate) { case 0: @@ -105067,7 +105067,7 @@ mmaw2: } } -void m68000_device::movem_w_dpc_list_dpm() // 4cba ffff +void m68000_mcu_device::movem_w_dpc_list_dpm() // 4cba ffff { switch(m_inst_substate) { case 0: @@ -105224,7 +105224,7 @@ mmaw2: } } -void m68000_device::movem_w_dpci_list_dpm() // 4cbb ffff +void m68000_mcu_device::movem_w_dpci_list_dpm() // 4cbb ffff { switch(m_inst_substate) { case 0: @@ -105421,7 +105421,7 @@ mmaw2: } } -void m68000_device::movem_l_ais_list_dpm() // 4cd0 fff8 +void m68000_mcu_device::movem_l_ais_list_dpm() // 4cd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -105577,7 +105577,7 @@ mmaw2: } } -void m68000_device::movem_l_aips_list_dpm() // 4cd8 fff8 +void m68000_mcu_device::movem_l_aips_list_dpm() // 4cd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -105734,7 +105734,7 @@ popm6: } } -void m68000_device::movem_l_das_list_dpm() // 4ce8 fff8 +void m68000_mcu_device::movem_l_das_list_dpm() // 4ce8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -105916,7 +105916,7 @@ mmaw2: } } -void m68000_device::movem_l_dais_list_dpm() // 4cf0 fff8 +void m68000_mcu_device::movem_l_dais_list_dpm() // 4cf0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -106138,7 +106138,7 @@ mmaw2: } } -void m68000_device::movem_l_adr16_list_dpm() // 4cf8 ffff +void m68000_mcu_device::movem_l_adr16_list_dpm() // 4cf8 ffff { switch(m_inst_substate) { case 0: @@ -106318,7 +106318,7 @@ mmaw2: } } -void m68000_device::movem_l_adr32_list_dpm() // 4cf9 ffff +void m68000_mcu_device::movem_l_adr32_list_dpm() // 4cf9 ffff { switch(m_inst_substate) { case 0: @@ -106525,7 +106525,7 @@ mmaw2: } } -void m68000_device::movem_l_dpc_list_dpm() // 4cfa ffff +void m68000_mcu_device::movem_l_dpc_list_dpm() // 4cfa ffff { switch(m_inst_substate) { case 0: @@ -106706,7 +106706,7 @@ mmaw2: } } -void m68000_device::movem_l_dpci_list_dpm() // 4cfb ffff +void m68000_mcu_device::movem_l_dpci_list_dpm() // 4cfb ffff { switch(m_inst_substate) { case 0: @@ -106927,7 +106927,7 @@ mmaw2: } } -void m68000_device::trap_imm4_dpm() // 4e40 fff0 +void m68000_mcu_device::trap_imm4_dpm() // 4e40 fff0 { switch(m_inst_substate) { case 0: @@ -107133,7 +107133,7 @@ void m68000_device::trap_imm4_dpm() // 4e40 fff0 } } -void m68000_device::link_as_imm16_dpm() // 4e50 fff8 +void m68000_mcu_device::link_as_imm16_dpm() // 4e50 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -107251,7 +107251,7 @@ void m68000_device::link_as_imm16_dpm() // 4e50 fff8 } } -void m68000_device::unlk_as_dpm() // 4e58 fff8 +void m68000_mcu_device::unlk_as_dpm() // 4e58 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -107345,7 +107345,7 @@ void m68000_device::unlk_as_dpm() // 4e58 fff8 } } -void m68000_device::move_as_usp_dpm() // 4e60 fff8 +void m68000_mcu_device::move_as_usp_dpm() // 4e60 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -107396,7 +107396,7 @@ void m68000_device::move_as_usp_dpm() // 4e60 fff8 } } -void m68000_device::move_usp_as_dpm() // 4e68 fff8 +void m68000_mcu_device::move_usp_as_dpm() // 4e68 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -107447,7 +107447,7 @@ void m68000_device::move_usp_as_dpm() // 4e68 fff8 } } -void m68000_device::reset_dpm() // 4e70 ffff +void m68000_mcu_device::reset_dpm() // 4e70 ffff { switch(m_inst_substate) { case 0: @@ -107519,7 +107519,7 @@ rset5: } } -void m68000_device::nop_dpm() // 4e71 ffff +void m68000_mcu_device::nop_dpm() // 4e71 ffff { switch(m_inst_substate) { case 0: @@ -107561,7 +107561,7 @@ void m68000_device::nop_dpm() // 4e71 ffff } } -void m68000_device::stop_i16u_dpm() // 4e72 ffff +void m68000_mcu_device::stop_i16u_dpm() // 4e72 ffff { switch(m_inst_substate) { case 0: @@ -107594,7 +107594,7 @@ void m68000_device::stop_i16u_dpm() // 4e72 ffff } } -void m68000_device::rte_dpm() // 4e73 ffff +void m68000_mcu_device::rte_dpm() // 4e73 ffff { switch(m_inst_substate) { case 0: @@ -107745,7 +107745,7 @@ void m68000_device::rte_dpm() // 4e73 ffff } } -void m68000_device::rts_dpm() // 4e75 ffff +void m68000_mcu_device::rts_dpm() // 4e75 ffff { switch(m_inst_substate) { case 0: @@ -107860,7 +107860,7 @@ void m68000_device::rts_dpm() // 4e75 ffff } } -void m68000_device::trapv_dpm() // 4e76 ffff +void m68000_mcu_device::trapv_dpm() // 4e76 ffff { switch(m_inst_substate) { case 0: @@ -108125,7 +108125,7 @@ trpv3: } } -void m68000_device::rtr_dpm() // 4e77 ffff +void m68000_mcu_device::rtr_dpm() // 4e77 ffff { switch(m_inst_substate) { case 0: @@ -108269,7 +108269,7 @@ void m68000_device::rtr_dpm() // 4e77 ffff } } -void m68000_device::jsr_ais_dpm() // 4e90 fff8 +void m68000_mcu_device::jsr_ais_dpm() // 4e90 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -108384,7 +108384,7 @@ void m68000_device::jsr_ais_dpm() // 4e90 fff8 } } -void m68000_device::jsr_das_dpm() // 4ea8 fff8 +void m68000_mcu_device::jsr_das_dpm() // 4ea8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -108505,7 +108505,7 @@ void m68000_device::jsr_das_dpm() // 4ea8 fff8 } } -void m68000_device::jsr_dais_dpm() // 4eb0 fff8 +void m68000_mcu_device::jsr_dais_dpm() // 4eb0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -108646,7 +108646,7 @@ jsrd2: } } -void m68000_device::jsr_adr16_dpm() // 4eb8 ffff +void m68000_mcu_device::jsr_adr16_dpm() // 4eb8 ffff { switch(m_inst_substate) { case 0: @@ -108763,7 +108763,7 @@ void m68000_device::jsr_adr16_dpm() // 4eb8 ffff } } -void m68000_device::jsr_adr32_dpm() // 4eb9 ffff +void m68000_mcu_device::jsr_adr32_dpm() // 4eb9 ffff { switch(m_inst_substate) { case 0: @@ -108902,7 +108902,7 @@ void m68000_device::jsr_adr32_dpm() // 4eb9 ffff } } -void m68000_device::jsr_dpc_dpm() // 4eba ffff +void m68000_mcu_device::jsr_dpc_dpm() // 4eba ffff { switch(m_inst_substate) { case 0: @@ -109022,7 +109022,7 @@ void m68000_device::jsr_dpc_dpm() // 4eba ffff } } -void m68000_device::jsr_dpci_dpm() // 4ebb ffff +void m68000_mcu_device::jsr_dpci_dpm() // 4ebb ffff { switch(m_inst_substate) { case 0: @@ -109162,7 +109162,7 @@ jsrd2: } } -void m68000_device::jmp_ais_dpm() // 4ed0 fff8 +void m68000_mcu_device::jmp_ais_dpm() // 4ed0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -109228,7 +109228,7 @@ void m68000_device::jmp_ais_dpm() // 4ed0 fff8 } } -void m68000_device::jmp_das_dpm() // 4ee8 fff8 +void m68000_mcu_device::jmp_das_dpm() // 4ee8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -109298,7 +109298,7 @@ void m68000_device::jmp_das_dpm() // 4ee8 fff8 } } -void m68000_device::jmp_dais_dpm() // 4ef0 fff8 +void m68000_mcu_device::jmp_dais_dpm() // 4ef0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -109388,7 +109388,7 @@ bbci3: } } -void m68000_device::jmp_adr16_dpm() // 4ef8 ffff +void m68000_mcu_device::jmp_adr16_dpm() // 4ef8 ffff { switch(m_inst_substate) { case 0: @@ -109456,7 +109456,7 @@ void m68000_device::jmp_adr16_dpm() // 4ef8 ffff } } -void m68000_device::jmp_adr32_dpm() // 4ef9 ffff +void m68000_mcu_device::jmp_adr32_dpm() // 4ef9 ffff { switch(m_inst_substate) { case 0: @@ -109545,7 +109545,7 @@ void m68000_device::jmp_adr32_dpm() // 4ef9 ffff } } -void m68000_device::jmp_dpc_dpm() // 4efa ffff +void m68000_mcu_device::jmp_dpc_dpm() // 4efa ffff { switch(m_inst_substate) { case 0: @@ -109614,7 +109614,7 @@ void m68000_device::jmp_dpc_dpm() // 4efa ffff } } -void m68000_device::jmp_dpci_dpm() // 4efb ffff +void m68000_mcu_device::jmp_dpci_dpm() // 4efb ffff { switch(m_inst_substate) { case 0: @@ -109703,7 +109703,7 @@ bbci3: } } -void m68000_device::addq_b_imm3_ds_dpm() // 5000 f1f8 +void m68000_mcu_device::addq_b_imm3_ds_dpm() // 5000 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -109751,7 +109751,7 @@ void m68000_device::addq_b_imm3_ds_dpm() // 5000 f1f8 } } -void m68000_device::addq_b_imm3_ais_dpm() // 5010 f1f8 +void m68000_mcu_device::addq_b_imm3_ais_dpm() // 5010 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -109837,7 +109837,7 @@ void m68000_device::addq_b_imm3_ais_dpm() // 5010 f1f8 } } -void m68000_device::addq_b_imm3_aips_dpm() // 5018 f1f8 +void m68000_mcu_device::addq_b_imm3_aips_dpm() // 5018 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -109927,7 +109927,7 @@ void m68000_device::addq_b_imm3_aips_dpm() // 5018 f1f8 } } -void m68000_device::addq_b_imm3_pais_dpm() // 5020 f1f8 +void m68000_mcu_device::addq_b_imm3_pais_dpm() // 5020 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -110019,7 +110019,7 @@ void m68000_device::addq_b_imm3_pais_dpm() // 5020 f1f8 } } -void m68000_device::addq_b_imm3_das_dpm() // 5028 f1f8 +void m68000_mcu_device::addq_b_imm3_das_dpm() // 5028 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -110130,7 +110130,7 @@ void m68000_device::addq_b_imm3_das_dpm() // 5028 f1f8 } } -void m68000_device::addq_b_imm3_dais_dpm() // 5030 f1f8 +void m68000_mcu_device::addq_b_imm3_dais_dpm() // 5030 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -110282,7 +110282,7 @@ adsw2: } } -void m68000_device::addq_b_imm3_adr16_dpm() // 5038 f1ff +void m68000_mcu_device::addq_b_imm3_adr16_dpm() // 5038 f1ff { switch(m_inst_substate) { case 0: @@ -110392,7 +110392,7 @@ void m68000_device::addq_b_imm3_adr16_dpm() // 5038 f1ff } } -void m68000_device::addq_b_imm3_adr32_dpm() // 5039 f1ff +void m68000_mcu_device::addq_b_imm3_adr32_dpm() // 5039 f1ff { switch(m_inst_substate) { case 0: @@ -110526,7 +110526,7 @@ void m68000_device::addq_b_imm3_adr32_dpm() // 5039 f1ff } } -void m68000_device::addq_w_imm3_ds_dpm() // 5040 f1f8 +void m68000_mcu_device::addq_w_imm3_ds_dpm() // 5040 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -110574,7 +110574,7 @@ void m68000_device::addq_w_imm3_ds_dpm() // 5040 f1f8 } } -void m68000_device::addq_w_imm3_as_dpm() // 5048 f1f8 +void m68000_mcu_device::addq_w_imm3_as_dpm() // 5048 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -110628,7 +110628,7 @@ void m68000_device::addq_w_imm3_as_dpm() // 5048 f1f8 } } -void m68000_device::addq_w_imm3_ais_dpm() // 5050 f1f8 +void m68000_mcu_device::addq_w_imm3_ais_dpm() // 5050 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -110724,7 +110724,7 @@ void m68000_device::addq_w_imm3_ais_dpm() // 5050 f1f8 } } -void m68000_device::addq_w_imm3_aips_dpm() // 5058 f1f8 +void m68000_mcu_device::addq_w_imm3_aips_dpm() // 5058 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -110824,7 +110824,7 @@ void m68000_device::addq_w_imm3_aips_dpm() // 5058 f1f8 } } -void m68000_device::addq_w_imm3_pais_dpm() // 5060 f1f8 +void m68000_mcu_device::addq_w_imm3_pais_dpm() // 5060 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -110926,7 +110926,7 @@ void m68000_device::addq_w_imm3_pais_dpm() // 5060 f1f8 } } -void m68000_device::addq_w_imm3_das_dpm() // 5068 f1f8 +void m68000_mcu_device::addq_w_imm3_das_dpm() // 5068 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -111047,7 +111047,7 @@ void m68000_device::addq_w_imm3_das_dpm() // 5068 f1f8 } } -void m68000_device::addq_w_imm3_dais_dpm() // 5070 f1f8 +void m68000_mcu_device::addq_w_imm3_dais_dpm() // 5070 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -111209,7 +111209,7 @@ adsw2: } } -void m68000_device::addq_w_imm3_adr16_dpm() // 5078 f1ff +void m68000_mcu_device::addq_w_imm3_adr16_dpm() // 5078 f1ff { switch(m_inst_substate) { case 0: @@ -111329,7 +111329,7 @@ void m68000_device::addq_w_imm3_adr16_dpm() // 5078 f1ff } } -void m68000_device::addq_w_imm3_adr32_dpm() // 5079 f1ff +void m68000_mcu_device::addq_w_imm3_adr32_dpm() // 5079 f1ff { switch(m_inst_substate) { case 0: @@ -111473,7 +111473,7 @@ void m68000_device::addq_w_imm3_adr32_dpm() // 5079 f1ff } } -void m68000_device::addq_l_imm3_ds_dpm() // 5080 f1f8 +void m68000_mcu_device::addq_l_imm3_ds_dpm() // 5080 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -111529,7 +111529,7 @@ void m68000_device::addq_l_imm3_ds_dpm() // 5080 f1f8 } } -void m68000_device::addq_l_imm3_as_dpm() // 5088 f1f8 +void m68000_mcu_device::addq_l_imm3_as_dpm() // 5088 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -111583,7 +111583,7 @@ void m68000_device::addq_l_imm3_as_dpm() // 5088 f1f8 } } -void m68000_device::addq_l_imm3_ais_dpm() // 5090 f1f8 +void m68000_mcu_device::addq_l_imm3_ais_dpm() // 5090 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -111729,7 +111729,7 @@ void m68000_device::addq_l_imm3_ais_dpm() // 5090 f1f8 } } -void m68000_device::addq_l_imm3_aips_dpm() // 5098 f1f8 +void m68000_mcu_device::addq_l_imm3_aips_dpm() // 5098 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -111878,7 +111878,7 @@ void m68000_device::addq_l_imm3_aips_dpm() // 5098 f1f8 } } -void m68000_device::addq_l_imm3_pais_dpm() // 50a0 f1f8 +void m68000_mcu_device::addq_l_imm3_pais_dpm() // 50a0 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -112028,7 +112028,7 @@ void m68000_device::addq_l_imm3_pais_dpm() // 50a0 f1f8 } } -void m68000_device::addq_l_imm3_das_dpm() // 50a8 f1f8 +void m68000_mcu_device::addq_l_imm3_das_dpm() // 50a8 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -112198,7 +112198,7 @@ void m68000_device::addq_l_imm3_das_dpm() // 50a8 f1f8 } } -void m68000_device::addq_l_imm3_dais_dpm() // 50b0 f1f8 +void m68000_mcu_device::addq_l_imm3_dais_dpm() // 50b0 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -112409,7 +112409,7 @@ adsl2: } } -void m68000_device::addq_l_imm3_adr16_dpm() // 50b8 f1ff +void m68000_mcu_device::addq_l_imm3_adr16_dpm() // 50b8 f1ff { switch(m_inst_substate) { case 0: @@ -112581,7 +112581,7 @@ void m68000_device::addq_l_imm3_adr16_dpm() // 50b8 f1ff } } -void m68000_device::addq_l_imm3_adr32_dpm() // 50b9 f1ff +void m68000_mcu_device::addq_l_imm3_adr32_dpm() // 50b9 f1ff { switch(m_inst_substate) { case 0: @@ -112777,7 +112777,7 @@ void m68000_device::addq_l_imm3_adr32_dpm() // 50b9 f1ff } } -void m68000_device::st_ds_dpm() // 50c0 fff8 +void m68000_mcu_device::st_ds_dpm() // 50c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -112869,7 +112869,7 @@ sccr2: } } -void m68000_device::dbt_ds_rel16_dpm() // 50c8 fff8 +void m68000_mcu_device::dbt_ds_rel16_dpm() // 50c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -113068,7 +113068,7 @@ dbcc5: } } -void m68000_device::st_ais_dpm() // 50d0 fff8 +void m68000_mcu_device::st_ais_dpm() // 50d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -113193,7 +113193,7 @@ morw2: } } -void m68000_device::st_aips_dpm() // 50d8 fff8 +void m68000_mcu_device::st_aips_dpm() // 50d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -113323,7 +113323,7 @@ morw2: } } -void m68000_device::st_pais_dpm() // 50e0 fff8 +void m68000_mcu_device::st_pais_dpm() // 50e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -113455,7 +113455,7 @@ morw2: } } -void m68000_device::st_das_dpm() // 50e8 fff8 +void m68000_mcu_device::st_das_dpm() // 50e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -113606,7 +113606,7 @@ morw2: } } -void m68000_device::st_dais_dpm() // 50f0 fff8 +void m68000_mcu_device::st_dais_dpm() // 50f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -113800,7 +113800,7 @@ morw2: } } -void m68000_device::st_adr16_dpm() // 50f8 ffff +void m68000_mcu_device::st_adr16_dpm() // 50f8 ffff { switch(m_inst_substate) { case 0: @@ -113950,7 +113950,7 @@ morw2: } } -void m68000_device::st_adr32_dpm() // 50f9 ffff +void m68000_mcu_device::st_adr32_dpm() // 50f9 ffff { switch(m_inst_substate) { case 0: @@ -114125,7 +114125,7 @@ morw2: } } -void m68000_device::subq_b_imm3_ds_dpm() // 5100 f1f8 +void m68000_mcu_device::subq_b_imm3_ds_dpm() // 5100 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -114173,7 +114173,7 @@ void m68000_device::subq_b_imm3_ds_dpm() // 5100 f1f8 } } -void m68000_device::subq_b_imm3_ais_dpm() // 5110 f1f8 +void m68000_mcu_device::subq_b_imm3_ais_dpm() // 5110 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -114259,7 +114259,7 @@ void m68000_device::subq_b_imm3_ais_dpm() // 5110 f1f8 } } -void m68000_device::subq_b_imm3_aips_dpm() // 5118 f1f8 +void m68000_mcu_device::subq_b_imm3_aips_dpm() // 5118 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -114349,7 +114349,7 @@ void m68000_device::subq_b_imm3_aips_dpm() // 5118 f1f8 } } -void m68000_device::subq_b_imm3_pais_dpm() // 5120 f1f8 +void m68000_mcu_device::subq_b_imm3_pais_dpm() // 5120 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -114441,7 +114441,7 @@ void m68000_device::subq_b_imm3_pais_dpm() // 5120 f1f8 } } -void m68000_device::subq_b_imm3_das_dpm() // 5128 f1f8 +void m68000_mcu_device::subq_b_imm3_das_dpm() // 5128 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -114552,7 +114552,7 @@ void m68000_device::subq_b_imm3_das_dpm() // 5128 f1f8 } } -void m68000_device::subq_b_imm3_dais_dpm() // 5130 f1f8 +void m68000_mcu_device::subq_b_imm3_dais_dpm() // 5130 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -114704,7 +114704,7 @@ adsw2: } } -void m68000_device::subq_b_imm3_adr16_dpm() // 5138 f1ff +void m68000_mcu_device::subq_b_imm3_adr16_dpm() // 5138 f1ff { switch(m_inst_substate) { case 0: @@ -114814,7 +114814,7 @@ void m68000_device::subq_b_imm3_adr16_dpm() // 5138 f1ff } } -void m68000_device::subq_b_imm3_adr32_dpm() // 5139 f1ff +void m68000_mcu_device::subq_b_imm3_adr32_dpm() // 5139 f1ff { switch(m_inst_substate) { case 0: @@ -114948,7 +114948,7 @@ void m68000_device::subq_b_imm3_adr32_dpm() // 5139 f1ff } } -void m68000_device::subq_w_imm3_ds_dpm() // 5140 f1f8 +void m68000_mcu_device::subq_w_imm3_ds_dpm() // 5140 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -114996,7 +114996,7 @@ void m68000_device::subq_w_imm3_ds_dpm() // 5140 f1f8 } } -void m68000_device::subq_w_imm3_as_dpm() // 5148 f1f8 +void m68000_mcu_device::subq_w_imm3_as_dpm() // 5148 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -115050,7 +115050,7 @@ void m68000_device::subq_w_imm3_as_dpm() // 5148 f1f8 } } -void m68000_device::subq_w_imm3_ais_dpm() // 5150 f1f8 +void m68000_mcu_device::subq_w_imm3_ais_dpm() // 5150 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -115146,7 +115146,7 @@ void m68000_device::subq_w_imm3_ais_dpm() // 5150 f1f8 } } -void m68000_device::subq_w_imm3_aips_dpm() // 5158 f1f8 +void m68000_mcu_device::subq_w_imm3_aips_dpm() // 5158 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -115246,7 +115246,7 @@ void m68000_device::subq_w_imm3_aips_dpm() // 5158 f1f8 } } -void m68000_device::subq_w_imm3_pais_dpm() // 5160 f1f8 +void m68000_mcu_device::subq_w_imm3_pais_dpm() // 5160 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -115348,7 +115348,7 @@ void m68000_device::subq_w_imm3_pais_dpm() // 5160 f1f8 } } -void m68000_device::subq_w_imm3_das_dpm() // 5168 f1f8 +void m68000_mcu_device::subq_w_imm3_das_dpm() // 5168 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -115469,7 +115469,7 @@ void m68000_device::subq_w_imm3_das_dpm() // 5168 f1f8 } } -void m68000_device::subq_w_imm3_dais_dpm() // 5170 f1f8 +void m68000_mcu_device::subq_w_imm3_dais_dpm() // 5170 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -115631,7 +115631,7 @@ adsw2: } } -void m68000_device::subq_w_imm3_adr16_dpm() // 5178 f1ff +void m68000_mcu_device::subq_w_imm3_adr16_dpm() // 5178 f1ff { switch(m_inst_substate) { case 0: @@ -115751,7 +115751,7 @@ void m68000_device::subq_w_imm3_adr16_dpm() // 5178 f1ff } } -void m68000_device::subq_w_imm3_adr32_dpm() // 5179 f1ff +void m68000_mcu_device::subq_w_imm3_adr32_dpm() // 5179 f1ff { switch(m_inst_substate) { case 0: @@ -115895,7 +115895,7 @@ void m68000_device::subq_w_imm3_adr32_dpm() // 5179 f1ff } } -void m68000_device::subq_l_imm3_ds_dpm() // 5180 f1f8 +void m68000_mcu_device::subq_l_imm3_ds_dpm() // 5180 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -115951,7 +115951,7 @@ void m68000_device::subq_l_imm3_ds_dpm() // 5180 f1f8 } } -void m68000_device::subq_l_imm3_as_dpm() // 5188 f1f8 +void m68000_mcu_device::subq_l_imm3_as_dpm() // 5188 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -116005,7 +116005,7 @@ void m68000_device::subq_l_imm3_as_dpm() // 5188 f1f8 } } -void m68000_device::subq_l_imm3_ais_dpm() // 5190 f1f8 +void m68000_mcu_device::subq_l_imm3_ais_dpm() // 5190 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -116151,7 +116151,7 @@ void m68000_device::subq_l_imm3_ais_dpm() // 5190 f1f8 } } -void m68000_device::subq_l_imm3_aips_dpm() // 5198 f1f8 +void m68000_mcu_device::subq_l_imm3_aips_dpm() // 5198 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -116300,7 +116300,7 @@ void m68000_device::subq_l_imm3_aips_dpm() // 5198 f1f8 } } -void m68000_device::subq_l_imm3_pais_dpm() // 51a0 f1f8 +void m68000_mcu_device::subq_l_imm3_pais_dpm() // 51a0 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -116450,7 +116450,7 @@ void m68000_device::subq_l_imm3_pais_dpm() // 51a0 f1f8 } } -void m68000_device::subq_l_imm3_das_dpm() // 51a8 f1f8 +void m68000_mcu_device::subq_l_imm3_das_dpm() // 51a8 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -116620,7 +116620,7 @@ void m68000_device::subq_l_imm3_das_dpm() // 51a8 f1f8 } } -void m68000_device::subq_l_imm3_dais_dpm() // 51b0 f1f8 +void m68000_mcu_device::subq_l_imm3_dais_dpm() // 51b0 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -116831,7 +116831,7 @@ adsl2: } } -void m68000_device::subq_l_imm3_adr16_dpm() // 51b8 f1ff +void m68000_mcu_device::subq_l_imm3_adr16_dpm() // 51b8 f1ff { switch(m_inst_substate) { case 0: @@ -117003,7 +117003,7 @@ void m68000_device::subq_l_imm3_adr16_dpm() // 51b8 f1ff } } -void m68000_device::subq_l_imm3_adr32_dpm() // 51b9 f1ff +void m68000_mcu_device::subq_l_imm3_adr32_dpm() // 51b9 f1ff { switch(m_inst_substate) { case 0: @@ -117199,7 +117199,7 @@ void m68000_device::subq_l_imm3_adr32_dpm() // 51b9 f1ff } } -void m68000_device::sf_ds_dpm() // 51c0 fff8 +void m68000_mcu_device::sf_ds_dpm() // 51c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -117291,7 +117291,7 @@ sccr2: } } -void m68000_device::dbra_ds_rel16_dpm() // 51c8 fff8 +void m68000_mcu_device::dbra_ds_rel16_dpm() // 51c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -117490,7 +117490,7 @@ dbcc5: } } -void m68000_device::sf_ais_dpm() // 51d0 fff8 +void m68000_mcu_device::sf_ais_dpm() // 51d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -117615,7 +117615,7 @@ morw2: } } -void m68000_device::sf_aips_dpm() // 51d8 fff8 +void m68000_mcu_device::sf_aips_dpm() // 51d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -117745,7 +117745,7 @@ morw2: } } -void m68000_device::sf_pais_dpm() // 51e0 fff8 +void m68000_mcu_device::sf_pais_dpm() // 51e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -117877,7 +117877,7 @@ morw2: } } -void m68000_device::sf_das_dpm() // 51e8 fff8 +void m68000_mcu_device::sf_das_dpm() // 51e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -118028,7 +118028,7 @@ morw2: } } -void m68000_device::sf_dais_dpm() // 51f0 fff8 +void m68000_mcu_device::sf_dais_dpm() // 51f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -118222,7 +118222,7 @@ morw2: } } -void m68000_device::sf_adr16_dpm() // 51f8 ffff +void m68000_mcu_device::sf_adr16_dpm() // 51f8 ffff { switch(m_inst_substate) { case 0: @@ -118372,7 +118372,7 @@ morw2: } } -void m68000_device::sf_adr32_dpm() // 51f9 ffff +void m68000_mcu_device::sf_adr32_dpm() // 51f9 ffff { switch(m_inst_substate) { case 0: @@ -118547,7 +118547,7 @@ morw2: } } -void m68000_device::shi_ds_dpm() // 52c0 fff8 +void m68000_mcu_device::shi_ds_dpm() // 52c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -118639,7 +118639,7 @@ sccr2: } } -void m68000_device::dbhi_ds_rel16_dpm() // 52c8 fff8 +void m68000_mcu_device::dbhi_ds_rel16_dpm() // 52c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -118838,7 +118838,7 @@ dbcc5: } } -void m68000_device::shi_ais_dpm() // 52d0 fff8 +void m68000_mcu_device::shi_ais_dpm() // 52d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -118963,7 +118963,7 @@ morw2: } } -void m68000_device::shi_aips_dpm() // 52d8 fff8 +void m68000_mcu_device::shi_aips_dpm() // 52d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -119093,7 +119093,7 @@ morw2: } } -void m68000_device::shi_pais_dpm() // 52e0 fff8 +void m68000_mcu_device::shi_pais_dpm() // 52e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -119225,7 +119225,7 @@ morw2: } } -void m68000_device::shi_das_dpm() // 52e8 fff8 +void m68000_mcu_device::shi_das_dpm() // 52e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -119376,7 +119376,7 @@ morw2: } } -void m68000_device::shi_dais_dpm() // 52f0 fff8 +void m68000_mcu_device::shi_dais_dpm() // 52f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -119570,7 +119570,7 @@ morw2: } } -void m68000_device::shi_adr16_dpm() // 52f8 ffff +void m68000_mcu_device::shi_adr16_dpm() // 52f8 ffff { switch(m_inst_substate) { case 0: @@ -119720,7 +119720,7 @@ morw2: } } -void m68000_device::shi_adr32_dpm() // 52f9 ffff +void m68000_mcu_device::shi_adr32_dpm() // 52f9 ffff { switch(m_inst_substate) { case 0: @@ -119895,7 +119895,7 @@ morw2: } } -void m68000_device::sls_ds_dpm() // 53c0 fff8 +void m68000_mcu_device::sls_ds_dpm() // 53c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -119987,7 +119987,7 @@ sccr2: } } -void m68000_device::dbls_ds_rel16_dpm() // 53c8 fff8 +void m68000_mcu_device::dbls_ds_rel16_dpm() // 53c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -120186,7 +120186,7 @@ dbcc5: } } -void m68000_device::sls_ais_dpm() // 53d0 fff8 +void m68000_mcu_device::sls_ais_dpm() // 53d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -120311,7 +120311,7 @@ morw2: } } -void m68000_device::sls_aips_dpm() // 53d8 fff8 +void m68000_mcu_device::sls_aips_dpm() // 53d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -120441,7 +120441,7 @@ morw2: } } -void m68000_device::sls_pais_dpm() // 53e0 fff8 +void m68000_mcu_device::sls_pais_dpm() // 53e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -120573,7 +120573,7 @@ morw2: } } -void m68000_device::sls_das_dpm() // 53e8 fff8 +void m68000_mcu_device::sls_das_dpm() // 53e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -120724,7 +120724,7 @@ morw2: } } -void m68000_device::sls_dais_dpm() // 53f0 fff8 +void m68000_mcu_device::sls_dais_dpm() // 53f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -120918,7 +120918,7 @@ morw2: } } -void m68000_device::sls_adr16_dpm() // 53f8 ffff +void m68000_mcu_device::sls_adr16_dpm() // 53f8 ffff { switch(m_inst_substate) { case 0: @@ -121068,7 +121068,7 @@ morw2: } } -void m68000_device::sls_adr32_dpm() // 53f9 ffff +void m68000_mcu_device::sls_adr32_dpm() // 53f9 ffff { switch(m_inst_substate) { case 0: @@ -121243,7 +121243,7 @@ morw2: } } -void m68000_device::scc_ds_dpm() // 54c0 fff8 +void m68000_mcu_device::scc_ds_dpm() // 54c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -121335,7 +121335,7 @@ sccr2: } } -void m68000_device::dbcc_ds_rel16_dpm() // 54c8 fff8 +void m68000_mcu_device::dbcc_ds_rel16_dpm() // 54c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -121534,7 +121534,7 @@ dbcc5: } } -void m68000_device::scc_ais_dpm() // 54d0 fff8 +void m68000_mcu_device::scc_ais_dpm() // 54d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -121659,7 +121659,7 @@ morw2: } } -void m68000_device::scc_aips_dpm() // 54d8 fff8 +void m68000_mcu_device::scc_aips_dpm() // 54d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -121789,7 +121789,7 @@ morw2: } } -void m68000_device::scc_pais_dpm() // 54e0 fff8 +void m68000_mcu_device::scc_pais_dpm() // 54e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -121921,7 +121921,7 @@ morw2: } } -void m68000_device::scc_das_dpm() // 54e8 fff8 +void m68000_mcu_device::scc_das_dpm() // 54e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -122072,7 +122072,7 @@ morw2: } } -void m68000_device::scc_dais_dpm() // 54f0 fff8 +void m68000_mcu_device::scc_dais_dpm() // 54f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -122266,7 +122266,7 @@ morw2: } } -void m68000_device::scc_adr16_dpm() // 54f8 ffff +void m68000_mcu_device::scc_adr16_dpm() // 54f8 ffff { switch(m_inst_substate) { case 0: @@ -122416,7 +122416,7 @@ morw2: } } -void m68000_device::scc_adr32_dpm() // 54f9 ffff +void m68000_mcu_device::scc_adr32_dpm() // 54f9 ffff { switch(m_inst_substate) { case 0: @@ -122591,7 +122591,7 @@ morw2: } } -void m68000_device::scs_ds_dpm() // 55c0 fff8 +void m68000_mcu_device::scs_ds_dpm() // 55c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -122683,7 +122683,7 @@ sccr2: } } -void m68000_device::dbcs_ds_rel16_dpm() // 55c8 fff8 +void m68000_mcu_device::dbcs_ds_rel16_dpm() // 55c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -122882,7 +122882,7 @@ dbcc5: } } -void m68000_device::scs_ais_dpm() // 55d0 fff8 +void m68000_mcu_device::scs_ais_dpm() // 55d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -123007,7 +123007,7 @@ morw2: } } -void m68000_device::scs_aips_dpm() // 55d8 fff8 +void m68000_mcu_device::scs_aips_dpm() // 55d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -123137,7 +123137,7 @@ morw2: } } -void m68000_device::scs_pais_dpm() // 55e0 fff8 +void m68000_mcu_device::scs_pais_dpm() // 55e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -123269,7 +123269,7 @@ morw2: } } -void m68000_device::scs_das_dpm() // 55e8 fff8 +void m68000_mcu_device::scs_das_dpm() // 55e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -123420,7 +123420,7 @@ morw2: } } -void m68000_device::scs_dais_dpm() // 55f0 fff8 +void m68000_mcu_device::scs_dais_dpm() // 55f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -123614,7 +123614,7 @@ morw2: } } -void m68000_device::scs_adr16_dpm() // 55f8 ffff +void m68000_mcu_device::scs_adr16_dpm() // 55f8 ffff { switch(m_inst_substate) { case 0: @@ -123764,7 +123764,7 @@ morw2: } } -void m68000_device::scs_adr32_dpm() // 55f9 ffff +void m68000_mcu_device::scs_adr32_dpm() // 55f9 ffff { switch(m_inst_substate) { case 0: @@ -123939,7 +123939,7 @@ morw2: } } -void m68000_device::sne_ds_dpm() // 56c0 fff8 +void m68000_mcu_device::sne_ds_dpm() // 56c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -124031,7 +124031,7 @@ sccr2: } } -void m68000_device::dbne_ds_rel16_dpm() // 56c8 fff8 +void m68000_mcu_device::dbne_ds_rel16_dpm() // 56c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -124230,7 +124230,7 @@ dbcc5: } } -void m68000_device::sne_ais_dpm() // 56d0 fff8 +void m68000_mcu_device::sne_ais_dpm() // 56d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -124355,7 +124355,7 @@ morw2: } } -void m68000_device::sne_aips_dpm() // 56d8 fff8 +void m68000_mcu_device::sne_aips_dpm() // 56d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -124485,7 +124485,7 @@ morw2: } } -void m68000_device::sne_pais_dpm() // 56e0 fff8 +void m68000_mcu_device::sne_pais_dpm() // 56e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -124617,7 +124617,7 @@ morw2: } } -void m68000_device::sne_das_dpm() // 56e8 fff8 +void m68000_mcu_device::sne_das_dpm() // 56e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -124768,7 +124768,7 @@ morw2: } } -void m68000_device::sne_dais_dpm() // 56f0 fff8 +void m68000_mcu_device::sne_dais_dpm() // 56f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -124962,7 +124962,7 @@ morw2: } } -void m68000_device::sne_adr16_dpm() // 56f8 ffff +void m68000_mcu_device::sne_adr16_dpm() // 56f8 ffff { switch(m_inst_substate) { case 0: @@ -125112,7 +125112,7 @@ morw2: } } -void m68000_device::sne_adr32_dpm() // 56f9 ffff +void m68000_mcu_device::sne_adr32_dpm() // 56f9 ffff { switch(m_inst_substate) { case 0: @@ -125287,7 +125287,7 @@ morw2: } } -void m68000_device::seq_ds_dpm() // 57c0 fff8 +void m68000_mcu_device::seq_ds_dpm() // 57c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -125379,7 +125379,7 @@ sccr2: } } -void m68000_device::dbeq_ds_rel16_dpm() // 57c8 fff8 +void m68000_mcu_device::dbeq_ds_rel16_dpm() // 57c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -125578,7 +125578,7 @@ dbcc5: } } -void m68000_device::seq_ais_dpm() // 57d0 fff8 +void m68000_mcu_device::seq_ais_dpm() // 57d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -125703,7 +125703,7 @@ morw2: } } -void m68000_device::seq_aips_dpm() // 57d8 fff8 +void m68000_mcu_device::seq_aips_dpm() // 57d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -125833,7 +125833,7 @@ morw2: } } -void m68000_device::seq_pais_dpm() // 57e0 fff8 +void m68000_mcu_device::seq_pais_dpm() // 57e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -125965,7 +125965,7 @@ morw2: } } -void m68000_device::seq_das_dpm() // 57e8 fff8 +void m68000_mcu_device::seq_das_dpm() // 57e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -126116,7 +126116,7 @@ morw2: } } -void m68000_device::seq_dais_dpm() // 57f0 fff8 +void m68000_mcu_device::seq_dais_dpm() // 57f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -126310,7 +126310,7 @@ morw2: } } -void m68000_device::seq_adr16_dpm() // 57f8 ffff +void m68000_mcu_device::seq_adr16_dpm() // 57f8 ffff { switch(m_inst_substate) { case 0: @@ -126460,7 +126460,7 @@ morw2: } } -void m68000_device::seq_adr32_dpm() // 57f9 ffff +void m68000_mcu_device::seq_adr32_dpm() // 57f9 ffff { switch(m_inst_substate) { case 0: @@ -126635,7 +126635,7 @@ morw2: } } -void m68000_device::svc_ds_dpm() // 58c0 fff8 +void m68000_mcu_device::svc_ds_dpm() // 58c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -126727,7 +126727,7 @@ sccr2: } } -void m68000_device::dbvc_ds_rel16_dpm() // 58c8 fff8 +void m68000_mcu_device::dbvc_ds_rel16_dpm() // 58c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -126926,7 +126926,7 @@ dbcc5: } } -void m68000_device::svc_ais_dpm() // 58d0 fff8 +void m68000_mcu_device::svc_ais_dpm() // 58d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -127051,7 +127051,7 @@ morw2: } } -void m68000_device::svc_aips_dpm() // 58d8 fff8 +void m68000_mcu_device::svc_aips_dpm() // 58d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -127181,7 +127181,7 @@ morw2: } } -void m68000_device::svc_pais_dpm() // 58e0 fff8 +void m68000_mcu_device::svc_pais_dpm() // 58e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -127313,7 +127313,7 @@ morw2: } } -void m68000_device::svc_das_dpm() // 58e8 fff8 +void m68000_mcu_device::svc_das_dpm() // 58e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -127464,7 +127464,7 @@ morw2: } } -void m68000_device::svc_dais_dpm() // 58f0 fff8 +void m68000_mcu_device::svc_dais_dpm() // 58f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -127658,7 +127658,7 @@ morw2: } } -void m68000_device::svc_adr16_dpm() // 58f8 ffff +void m68000_mcu_device::svc_adr16_dpm() // 58f8 ffff { switch(m_inst_substate) { case 0: @@ -127808,7 +127808,7 @@ morw2: } } -void m68000_device::svc_adr32_dpm() // 58f9 ffff +void m68000_mcu_device::svc_adr32_dpm() // 58f9 ffff { switch(m_inst_substate) { case 0: @@ -127983,7 +127983,7 @@ morw2: } } -void m68000_device::svs_ds_dpm() // 59c0 fff8 +void m68000_mcu_device::svs_ds_dpm() // 59c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -128075,7 +128075,7 @@ sccr2: } } -void m68000_device::dbvs_ds_rel16_dpm() // 59c8 fff8 +void m68000_mcu_device::dbvs_ds_rel16_dpm() // 59c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -128274,7 +128274,7 @@ dbcc5: } } -void m68000_device::svs_ais_dpm() // 59d0 fff8 +void m68000_mcu_device::svs_ais_dpm() // 59d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -128399,7 +128399,7 @@ morw2: } } -void m68000_device::svs_aips_dpm() // 59d8 fff8 +void m68000_mcu_device::svs_aips_dpm() // 59d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -128529,7 +128529,7 @@ morw2: } } -void m68000_device::svs_pais_dpm() // 59e0 fff8 +void m68000_mcu_device::svs_pais_dpm() // 59e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -128661,7 +128661,7 @@ morw2: } } -void m68000_device::svs_das_dpm() // 59e8 fff8 +void m68000_mcu_device::svs_das_dpm() // 59e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -128812,7 +128812,7 @@ morw2: } } -void m68000_device::svs_dais_dpm() // 59f0 fff8 +void m68000_mcu_device::svs_dais_dpm() // 59f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -129006,7 +129006,7 @@ morw2: } } -void m68000_device::svs_adr16_dpm() // 59f8 ffff +void m68000_mcu_device::svs_adr16_dpm() // 59f8 ffff { switch(m_inst_substate) { case 0: @@ -129156,7 +129156,7 @@ morw2: } } -void m68000_device::svs_adr32_dpm() // 59f9 ffff +void m68000_mcu_device::svs_adr32_dpm() // 59f9 ffff { switch(m_inst_substate) { case 0: @@ -129331,7 +129331,7 @@ morw2: } } -void m68000_device::spl_ds_dpm() // 5ac0 fff8 +void m68000_mcu_device::spl_ds_dpm() // 5ac0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -129423,7 +129423,7 @@ sccr2: } } -void m68000_device::dbpl_ds_rel16_dpm() // 5ac8 fff8 +void m68000_mcu_device::dbpl_ds_rel16_dpm() // 5ac8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -129622,7 +129622,7 @@ dbcc5: } } -void m68000_device::spl_ais_dpm() // 5ad0 fff8 +void m68000_mcu_device::spl_ais_dpm() // 5ad0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -129747,7 +129747,7 @@ morw2: } } -void m68000_device::spl_aips_dpm() // 5ad8 fff8 +void m68000_mcu_device::spl_aips_dpm() // 5ad8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -129877,7 +129877,7 @@ morw2: } } -void m68000_device::spl_pais_dpm() // 5ae0 fff8 +void m68000_mcu_device::spl_pais_dpm() // 5ae0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -130009,7 +130009,7 @@ morw2: } } -void m68000_device::spl_das_dpm() // 5ae8 fff8 +void m68000_mcu_device::spl_das_dpm() // 5ae8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -130160,7 +130160,7 @@ morw2: } } -void m68000_device::spl_dais_dpm() // 5af0 fff8 +void m68000_mcu_device::spl_dais_dpm() // 5af0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -130354,7 +130354,7 @@ morw2: } } -void m68000_device::spl_adr16_dpm() // 5af8 ffff +void m68000_mcu_device::spl_adr16_dpm() // 5af8 ffff { switch(m_inst_substate) { case 0: @@ -130504,7 +130504,7 @@ morw2: } } -void m68000_device::spl_adr32_dpm() // 5af9 ffff +void m68000_mcu_device::spl_adr32_dpm() // 5af9 ffff { switch(m_inst_substate) { case 0: @@ -130679,7 +130679,7 @@ morw2: } } -void m68000_device::smi_ds_dpm() // 5bc0 fff8 +void m68000_mcu_device::smi_ds_dpm() // 5bc0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -130771,7 +130771,7 @@ sccr2: } } -void m68000_device::dbmi_ds_rel16_dpm() // 5bc8 fff8 +void m68000_mcu_device::dbmi_ds_rel16_dpm() // 5bc8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -130970,7 +130970,7 @@ dbcc5: } } -void m68000_device::smi_ais_dpm() // 5bd0 fff8 +void m68000_mcu_device::smi_ais_dpm() // 5bd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -131095,7 +131095,7 @@ morw2: } } -void m68000_device::smi_aips_dpm() // 5bd8 fff8 +void m68000_mcu_device::smi_aips_dpm() // 5bd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -131225,7 +131225,7 @@ morw2: } } -void m68000_device::smi_pais_dpm() // 5be0 fff8 +void m68000_mcu_device::smi_pais_dpm() // 5be0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -131357,7 +131357,7 @@ morw2: } } -void m68000_device::smi_das_dpm() // 5be8 fff8 +void m68000_mcu_device::smi_das_dpm() // 5be8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -131508,7 +131508,7 @@ morw2: } } -void m68000_device::smi_dais_dpm() // 5bf0 fff8 +void m68000_mcu_device::smi_dais_dpm() // 5bf0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -131702,7 +131702,7 @@ morw2: } } -void m68000_device::smi_adr16_dpm() // 5bf8 ffff +void m68000_mcu_device::smi_adr16_dpm() // 5bf8 ffff { switch(m_inst_substate) { case 0: @@ -131852,7 +131852,7 @@ morw2: } } -void m68000_device::smi_adr32_dpm() // 5bf9 ffff +void m68000_mcu_device::smi_adr32_dpm() // 5bf9 ffff { switch(m_inst_substate) { case 0: @@ -132027,7 +132027,7 @@ morw2: } } -void m68000_device::sge_ds_dpm() // 5cc0 fff8 +void m68000_mcu_device::sge_ds_dpm() // 5cc0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -132119,7 +132119,7 @@ sccr2: } } -void m68000_device::dbge_ds_rel16_dpm() // 5cc8 fff8 +void m68000_mcu_device::dbge_ds_rel16_dpm() // 5cc8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -132318,7 +132318,7 @@ dbcc5: } } -void m68000_device::sge_ais_dpm() // 5cd0 fff8 +void m68000_mcu_device::sge_ais_dpm() // 5cd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -132443,7 +132443,7 @@ morw2: } } -void m68000_device::sge_aips_dpm() // 5cd8 fff8 +void m68000_mcu_device::sge_aips_dpm() // 5cd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -132573,7 +132573,7 @@ morw2: } } -void m68000_device::sge_pais_dpm() // 5ce0 fff8 +void m68000_mcu_device::sge_pais_dpm() // 5ce0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -132705,7 +132705,7 @@ morw2: } } -void m68000_device::sge_das_dpm() // 5ce8 fff8 +void m68000_mcu_device::sge_das_dpm() // 5ce8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -132856,7 +132856,7 @@ morw2: } } -void m68000_device::sge_dais_dpm() // 5cf0 fff8 +void m68000_mcu_device::sge_dais_dpm() // 5cf0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -133050,7 +133050,7 @@ morw2: } } -void m68000_device::sge_adr16_dpm() // 5cf8 ffff +void m68000_mcu_device::sge_adr16_dpm() // 5cf8 ffff { switch(m_inst_substate) { case 0: @@ -133200,7 +133200,7 @@ morw2: } } -void m68000_device::sge_adr32_dpm() // 5cf9 ffff +void m68000_mcu_device::sge_adr32_dpm() // 5cf9 ffff { switch(m_inst_substate) { case 0: @@ -133375,7 +133375,7 @@ morw2: } } -void m68000_device::slt_ds_dpm() // 5dc0 fff8 +void m68000_mcu_device::slt_ds_dpm() // 5dc0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -133467,7 +133467,7 @@ sccr2: } } -void m68000_device::dblt_ds_rel16_dpm() // 5dc8 fff8 +void m68000_mcu_device::dblt_ds_rel16_dpm() // 5dc8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -133666,7 +133666,7 @@ dbcc5: } } -void m68000_device::slt_ais_dpm() // 5dd0 fff8 +void m68000_mcu_device::slt_ais_dpm() // 5dd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -133791,7 +133791,7 @@ morw2: } } -void m68000_device::slt_aips_dpm() // 5dd8 fff8 +void m68000_mcu_device::slt_aips_dpm() // 5dd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -133921,7 +133921,7 @@ morw2: } } -void m68000_device::slt_pais_dpm() // 5de0 fff8 +void m68000_mcu_device::slt_pais_dpm() // 5de0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -134053,7 +134053,7 @@ morw2: } } -void m68000_device::slt_das_dpm() // 5de8 fff8 +void m68000_mcu_device::slt_das_dpm() // 5de8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -134204,7 +134204,7 @@ morw2: } } -void m68000_device::slt_dais_dpm() // 5df0 fff8 +void m68000_mcu_device::slt_dais_dpm() // 5df0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -134398,7 +134398,7 @@ morw2: } } -void m68000_device::slt_adr16_dpm() // 5df8 ffff +void m68000_mcu_device::slt_adr16_dpm() // 5df8 ffff { switch(m_inst_substate) { case 0: @@ -134548,7 +134548,7 @@ morw2: } } -void m68000_device::slt_adr32_dpm() // 5df9 ffff +void m68000_mcu_device::slt_adr32_dpm() // 5df9 ffff { switch(m_inst_substate) { case 0: @@ -134723,7 +134723,7 @@ morw2: } } -void m68000_device::sgt_ds_dpm() // 5ec0 fff8 +void m68000_mcu_device::sgt_ds_dpm() // 5ec0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -134815,7 +134815,7 @@ sccr2: } } -void m68000_device::dbgt_ds_rel16_dpm() // 5ec8 fff8 +void m68000_mcu_device::dbgt_ds_rel16_dpm() // 5ec8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -135014,7 +135014,7 @@ dbcc5: } } -void m68000_device::sgt_ais_dpm() // 5ed0 fff8 +void m68000_mcu_device::sgt_ais_dpm() // 5ed0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -135139,7 +135139,7 @@ morw2: } } -void m68000_device::sgt_aips_dpm() // 5ed8 fff8 +void m68000_mcu_device::sgt_aips_dpm() // 5ed8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -135269,7 +135269,7 @@ morw2: } } -void m68000_device::sgt_pais_dpm() // 5ee0 fff8 +void m68000_mcu_device::sgt_pais_dpm() // 5ee0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -135401,7 +135401,7 @@ morw2: } } -void m68000_device::sgt_das_dpm() // 5ee8 fff8 +void m68000_mcu_device::sgt_das_dpm() // 5ee8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -135552,7 +135552,7 @@ morw2: } } -void m68000_device::sgt_dais_dpm() // 5ef0 fff8 +void m68000_mcu_device::sgt_dais_dpm() // 5ef0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -135746,7 +135746,7 @@ morw2: } } -void m68000_device::sgt_adr16_dpm() // 5ef8 ffff +void m68000_mcu_device::sgt_adr16_dpm() // 5ef8 ffff { switch(m_inst_substate) { case 0: @@ -135896,7 +135896,7 @@ morw2: } } -void m68000_device::sgt_adr32_dpm() // 5ef9 ffff +void m68000_mcu_device::sgt_adr32_dpm() // 5ef9 ffff { switch(m_inst_substate) { case 0: @@ -136071,7 +136071,7 @@ morw2: } } -void m68000_device::sle_ds_dpm() // 5fc0 fff8 +void m68000_mcu_device::sle_ds_dpm() // 5fc0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -136163,7 +136163,7 @@ sccr2: } } -void m68000_device::dble_ds_rel16_dpm() // 5fc8 fff8 +void m68000_mcu_device::dble_ds_rel16_dpm() // 5fc8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -136362,7 +136362,7 @@ dbcc5: } } -void m68000_device::sle_ais_dpm() // 5fd0 fff8 +void m68000_mcu_device::sle_ais_dpm() // 5fd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -136487,7 +136487,7 @@ morw2: } } -void m68000_device::sle_aips_dpm() // 5fd8 fff8 +void m68000_mcu_device::sle_aips_dpm() // 5fd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -136617,7 +136617,7 @@ morw2: } } -void m68000_device::sle_pais_dpm() // 5fe0 fff8 +void m68000_mcu_device::sle_pais_dpm() // 5fe0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -136749,7 +136749,7 @@ morw2: } } -void m68000_device::sle_das_dpm() // 5fe8 fff8 +void m68000_mcu_device::sle_das_dpm() // 5fe8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -136900,7 +136900,7 @@ morw2: } } -void m68000_device::sle_dais_dpm() // 5ff0 fff8 +void m68000_mcu_device::sle_dais_dpm() // 5ff0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -137094,7 +137094,7 @@ morw2: } } -void m68000_device::sle_adr16_dpm() // 5ff8 ffff +void m68000_mcu_device::sle_adr16_dpm() // 5ff8 ffff { switch(m_inst_substate) { case 0: @@ -137244,7 +137244,7 @@ morw2: } } -void m68000_device::sle_adr32_dpm() // 5ff9 ffff +void m68000_mcu_device::sle_adr32_dpm() // 5ff9 ffff { switch(m_inst_substate) { case 0: @@ -137419,7 +137419,7 @@ morw2: } } -void m68000_device::bra_rel16_dpm() // 6000 ffff +void m68000_mcu_device::bra_rel16_dpm() // 6000 ffff { switch(m_inst_substate) { case 0: @@ -137533,7 +137533,7 @@ b: } } -void m68000_device::bra_rel8_dpm() // 6000 ff00 +void m68000_mcu_device::bra_rel8_dpm() // 6000 ff00 { switch(m_inst_substate) { case 0: @@ -137620,7 +137620,7 @@ b: } } -void m68000_device::bsr_rel16_dpm() // 6100 ffff +void m68000_mcu_device::bsr_rel16_dpm() // 6100 ffff { switch(m_inst_substate) { case 0: @@ -137742,7 +137742,7 @@ void m68000_device::bsr_rel16_dpm() // 6100 ffff } } -void m68000_device::bsr_rel8_dpm() // 6100 ff00 +void m68000_mcu_device::bsr_rel8_dpm() // 6100 ff00 { switch(m_inst_substate) { case 0: @@ -137864,7 +137864,7 @@ void m68000_device::bsr_rel8_dpm() // 6100 ff00 } } -void m68000_device::bhi_rel16_dpm() // 6200 ffff +void m68000_mcu_device::bhi_rel16_dpm() // 6200 ffff { switch(m_inst_substate) { case 0: @@ -137978,7 +137978,7 @@ b: } } -void m68000_device::bhi_rel8_dpm() // 6200 ff00 +void m68000_mcu_device::bhi_rel8_dpm() // 6200 ff00 { switch(m_inst_substate) { case 0: @@ -138065,7 +138065,7 @@ b: } } -void m68000_device::bls_rel16_dpm() // 6300 ffff +void m68000_mcu_device::bls_rel16_dpm() // 6300 ffff { switch(m_inst_substate) { case 0: @@ -138179,7 +138179,7 @@ b: } } -void m68000_device::bls_rel8_dpm() // 6300 ff00 +void m68000_mcu_device::bls_rel8_dpm() // 6300 ff00 { switch(m_inst_substate) { case 0: @@ -138266,7 +138266,7 @@ b: } } -void m68000_device::bcc_rel16_dpm() // 6400 ffff +void m68000_mcu_device::bcc_rel16_dpm() // 6400 ffff { switch(m_inst_substate) { case 0: @@ -138380,7 +138380,7 @@ b: } } -void m68000_device::bcc_rel8_dpm() // 6400 ff00 +void m68000_mcu_device::bcc_rel8_dpm() // 6400 ff00 { switch(m_inst_substate) { case 0: @@ -138467,7 +138467,7 @@ b: } } -void m68000_device::bcs_rel16_dpm() // 6500 ffff +void m68000_mcu_device::bcs_rel16_dpm() // 6500 ffff { switch(m_inst_substate) { case 0: @@ -138581,7 +138581,7 @@ b: } } -void m68000_device::bcs_rel8_dpm() // 6500 ff00 +void m68000_mcu_device::bcs_rel8_dpm() // 6500 ff00 { switch(m_inst_substate) { case 0: @@ -138668,7 +138668,7 @@ b: } } -void m68000_device::bne_rel16_dpm() // 6600 ffff +void m68000_mcu_device::bne_rel16_dpm() // 6600 ffff { switch(m_inst_substate) { case 0: @@ -138782,7 +138782,7 @@ b: } } -void m68000_device::bne_rel8_dpm() // 6600 ff00 +void m68000_mcu_device::bne_rel8_dpm() // 6600 ff00 { switch(m_inst_substate) { case 0: @@ -138869,7 +138869,7 @@ b: } } -void m68000_device::beq_rel16_dpm() // 6700 ffff +void m68000_mcu_device::beq_rel16_dpm() // 6700 ffff { switch(m_inst_substate) { case 0: @@ -138983,7 +138983,7 @@ b: } } -void m68000_device::beq_rel8_dpm() // 6700 ff00 +void m68000_mcu_device::beq_rel8_dpm() // 6700 ff00 { switch(m_inst_substate) { case 0: @@ -139070,7 +139070,7 @@ b: } } -void m68000_device::bvc_rel16_dpm() // 6800 ffff +void m68000_mcu_device::bvc_rel16_dpm() // 6800 ffff { switch(m_inst_substate) { case 0: @@ -139184,7 +139184,7 @@ b: } } -void m68000_device::bvc_rel8_dpm() // 6800 ff00 +void m68000_mcu_device::bvc_rel8_dpm() // 6800 ff00 { switch(m_inst_substate) { case 0: @@ -139271,7 +139271,7 @@ b: } } -void m68000_device::bvs_rel16_dpm() // 6900 ffff +void m68000_mcu_device::bvs_rel16_dpm() // 6900 ffff { switch(m_inst_substate) { case 0: @@ -139385,7 +139385,7 @@ b: } } -void m68000_device::bvs_rel8_dpm() // 6900 ff00 +void m68000_mcu_device::bvs_rel8_dpm() // 6900 ff00 { switch(m_inst_substate) { case 0: @@ -139472,7 +139472,7 @@ b: } } -void m68000_device::bpl_rel16_dpm() // 6a00 ffff +void m68000_mcu_device::bpl_rel16_dpm() // 6a00 ffff { switch(m_inst_substate) { case 0: @@ -139586,7 +139586,7 @@ b: } } -void m68000_device::bpl_rel8_dpm() // 6a00 ff00 +void m68000_mcu_device::bpl_rel8_dpm() // 6a00 ff00 { switch(m_inst_substate) { case 0: @@ -139673,7 +139673,7 @@ b: } } -void m68000_device::bmi_rel16_dpm() // 6b00 ffff +void m68000_mcu_device::bmi_rel16_dpm() // 6b00 ffff { switch(m_inst_substate) { case 0: @@ -139787,7 +139787,7 @@ b: } } -void m68000_device::bmi_rel8_dpm() // 6b00 ff00 +void m68000_mcu_device::bmi_rel8_dpm() // 6b00 ff00 { switch(m_inst_substate) { case 0: @@ -139874,7 +139874,7 @@ b: } } -void m68000_device::bge_rel16_dpm() // 6c00 ffff +void m68000_mcu_device::bge_rel16_dpm() // 6c00 ffff { switch(m_inst_substate) { case 0: @@ -139988,7 +139988,7 @@ b: } } -void m68000_device::bge_rel8_dpm() // 6c00 ff00 +void m68000_mcu_device::bge_rel8_dpm() // 6c00 ff00 { switch(m_inst_substate) { case 0: @@ -140075,7 +140075,7 @@ b: } } -void m68000_device::blt_rel16_dpm() // 6d00 ffff +void m68000_mcu_device::blt_rel16_dpm() // 6d00 ffff { switch(m_inst_substate) { case 0: @@ -140189,7 +140189,7 @@ b: } } -void m68000_device::blt_rel8_dpm() // 6d00 ff00 +void m68000_mcu_device::blt_rel8_dpm() // 6d00 ff00 { switch(m_inst_substate) { case 0: @@ -140276,7 +140276,7 @@ b: } } -void m68000_device::bgt_rel16_dpm() // 6e00 ffff +void m68000_mcu_device::bgt_rel16_dpm() // 6e00 ffff { switch(m_inst_substate) { case 0: @@ -140390,7 +140390,7 @@ b: } } -void m68000_device::bgt_rel8_dpm() // 6e00 ff00 +void m68000_mcu_device::bgt_rel8_dpm() // 6e00 ff00 { switch(m_inst_substate) { case 0: @@ -140477,7 +140477,7 @@ b: } } -void m68000_device::ble_rel16_dpm() // 6f00 ffff +void m68000_mcu_device::ble_rel16_dpm() // 6f00 ffff { switch(m_inst_substate) { case 0: @@ -140591,7 +140591,7 @@ b: } } -void m68000_device::ble_rel8_dpm() // 6f00 ff00 +void m68000_mcu_device::ble_rel8_dpm() // 6f00 ff00 { switch(m_inst_substate) { case 0: @@ -140678,7 +140678,7 @@ b: } } -void m68000_device::moveq_imm8o_dd_dpm() // 7000 f100 +void m68000_mcu_device::moveq_imm8o_dd_dpm() // 7000 f100 { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -140725,7 +140725,7 @@ void m68000_device::moveq_imm8o_dd_dpm() // 7000 f100 } } -void m68000_device::or_b_ds_dd_dpm() // 8000 f1f8 +void m68000_mcu_device::or_b_ds_dd_dpm() // 8000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -140775,7 +140775,7 @@ void m68000_device::or_b_ds_dd_dpm() // 8000 f1f8 } } -void m68000_device::or_b_ais_dd_dpm() // 8010 f1f8 +void m68000_mcu_device::or_b_ais_dd_dpm() // 8010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -140849,7 +140849,7 @@ void m68000_device::or_b_ais_dd_dpm() // 8010 f1f8 } } -void m68000_device::or_b_aips_dd_dpm() // 8018 f1f8 +void m68000_mcu_device::or_b_aips_dd_dpm() // 8018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -140928,7 +140928,7 @@ void m68000_device::or_b_aips_dd_dpm() // 8018 f1f8 } } -void m68000_device::or_b_pais_dd_dpm() // 8020 f1f8 +void m68000_mcu_device::or_b_pais_dd_dpm() // 8020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141009,7 +141009,7 @@ void m68000_device::or_b_pais_dd_dpm() // 8020 f1f8 } } -void m68000_device::or_b_das_dd_dpm() // 8028 f1f8 +void m68000_mcu_device::or_b_das_dd_dpm() // 8028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141109,7 +141109,7 @@ void m68000_device::or_b_das_dd_dpm() // 8028 f1f8 } } -void m68000_device::or_b_dais_dd_dpm() // 8030 f1f8 +void m68000_mcu_device::or_b_dais_dd_dpm() // 8030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141252,7 +141252,7 @@ adsw2: } } -void m68000_device::or_b_adr16_dd_dpm() // 8038 f1ff +void m68000_mcu_device::or_b_adr16_dd_dpm() // 8038 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -141351,7 +141351,7 @@ void m68000_device::or_b_adr16_dd_dpm() // 8038 f1ff } } -void m68000_device::or_b_adr32_dd_dpm() // 8039 f1ff +void m68000_mcu_device::or_b_adr32_dd_dpm() // 8039 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -141475,7 +141475,7 @@ void m68000_device::or_b_adr32_dd_dpm() // 8039 f1ff } } -void m68000_device::or_b_dpc_dd_dpm() // 803a f1ff +void m68000_mcu_device::or_b_dpc_dd_dpm() // 803a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -141574,7 +141574,7 @@ void m68000_device::or_b_dpc_dd_dpm() // 803a f1ff } } -void m68000_device::or_b_dpci_dd_dpm() // 803b f1ff +void m68000_mcu_device::or_b_dpci_dd_dpm() // 803b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -141716,7 +141716,7 @@ adsw2: } } -void m68000_device::or_b_imm8_dd_dpm() // 803c f1ff +void m68000_mcu_device::or_b_imm8_dd_dpm() // 803c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -141793,7 +141793,7 @@ void m68000_device::or_b_imm8_dd_dpm() // 803c f1ff } } -void m68000_device::or_w_ds_dd_dpm() // 8040 f1f8 +void m68000_mcu_device::or_w_ds_dd_dpm() // 8040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -141843,7 +141843,7 @@ void m68000_device::or_w_ds_dd_dpm() // 8040 f1f8 } } -void m68000_device::or_w_ais_dd_dpm() // 8050 f1f8 +void m68000_mcu_device::or_w_ais_dd_dpm() // 8050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141921,7 +141921,7 @@ void m68000_device::or_w_ais_dd_dpm() // 8050 f1f8 } } -void m68000_device::or_w_aips_dd_dpm() // 8058 f1f8 +void m68000_mcu_device::or_w_aips_dd_dpm() // 8058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142004,7 +142004,7 @@ void m68000_device::or_w_aips_dd_dpm() // 8058 f1f8 } } -void m68000_device::or_w_pais_dd_dpm() // 8060 f1f8 +void m68000_mcu_device::or_w_pais_dd_dpm() // 8060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142089,7 +142089,7 @@ void m68000_device::or_w_pais_dd_dpm() // 8060 f1f8 } } -void m68000_device::or_w_das_dd_dpm() // 8068 f1f8 +void m68000_mcu_device::or_w_das_dd_dpm() // 8068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142193,7 +142193,7 @@ void m68000_device::or_w_das_dd_dpm() // 8068 f1f8 } } -void m68000_device::or_w_dais_dd_dpm() // 8070 f1f8 +void m68000_mcu_device::or_w_dais_dd_dpm() // 8070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142340,7 +142340,7 @@ adsw2: } } -void m68000_device::or_w_adr16_dd_dpm() // 8078 f1ff +void m68000_mcu_device::or_w_adr16_dd_dpm() // 8078 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -142443,7 +142443,7 @@ void m68000_device::or_w_adr16_dd_dpm() // 8078 f1ff } } -void m68000_device::or_w_adr32_dd_dpm() // 8079 f1ff +void m68000_mcu_device::or_w_adr32_dd_dpm() // 8079 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -142571,7 +142571,7 @@ void m68000_device::or_w_adr32_dd_dpm() // 8079 f1ff } } -void m68000_device::or_w_dpc_dd_dpm() // 807a f1ff +void m68000_mcu_device::or_w_dpc_dd_dpm() // 807a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -142674,7 +142674,7 @@ void m68000_device::or_w_dpc_dd_dpm() // 807a f1ff } } -void m68000_device::or_w_dpci_dd_dpm() // 807b f1ff +void m68000_mcu_device::or_w_dpci_dd_dpm() // 807b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -142820,7 +142820,7 @@ adsw2: } } -void m68000_device::or_w_imm16_dd_dpm() // 807c f1ff +void m68000_mcu_device::or_w_imm16_dd_dpm() // 807c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -142897,7 +142897,7 @@ void m68000_device::or_w_imm16_dd_dpm() // 807c f1ff } } -void m68000_device::or_l_ds_dd_dpm() // 8080 f1f8 +void m68000_mcu_device::or_l_ds_dd_dpm() // 8080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -142956,7 +142956,7 @@ void m68000_device::or_l_ds_dd_dpm() // 8080 f1f8 } } -void m68000_device::or_l_ais_dd_dpm() // 8090 f1f8 +void m68000_mcu_device::or_l_ais_dd_dpm() // 8090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -143064,7 +143064,7 @@ void m68000_device::or_l_ais_dd_dpm() // 8090 f1f8 } } -void m68000_device::or_l_aips_dd_dpm() // 8098 f1f8 +void m68000_mcu_device::or_l_aips_dd_dpm() // 8098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -143176,7 +143176,7 @@ void m68000_device::or_l_aips_dd_dpm() // 8098 f1f8 } } -void m68000_device::or_l_pais_dd_dpm() // 80a0 f1f8 +void m68000_mcu_device::or_l_pais_dd_dpm() // 80a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -143289,7 +143289,7 @@ void m68000_device::or_l_pais_dd_dpm() // 80a0 f1f8 } } -void m68000_device::or_l_das_dd_dpm() // 80a8 f1f8 +void m68000_mcu_device::or_l_das_dd_dpm() // 80a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -143422,7 +143422,7 @@ void m68000_device::or_l_das_dd_dpm() // 80a8 f1f8 } } -void m68000_device::or_l_dais_dd_dpm() // 80b0 f1f8 +void m68000_mcu_device::or_l_dais_dd_dpm() // 80b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -143598,7 +143598,7 @@ adsl2: } } -void m68000_device::or_l_adr16_dd_dpm() // 80b8 f1ff +void m68000_mcu_device::or_l_adr16_dd_dpm() // 80b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -143734,7 +143734,7 @@ void m68000_device::or_l_adr16_dd_dpm() // 80b8 f1ff } } -void m68000_device::or_l_adr32_dd_dpm() // 80b9 f1ff +void m68000_mcu_device::or_l_adr32_dd_dpm() // 80b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -143895,7 +143895,7 @@ void m68000_device::or_l_adr32_dd_dpm() // 80b9 f1ff } } -void m68000_device::or_l_dpc_dd_dpm() // 80ba f1ff +void m68000_mcu_device::or_l_dpc_dd_dpm() // 80ba f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -144027,7 +144027,7 @@ void m68000_device::or_l_dpc_dd_dpm() // 80ba f1ff } } -void m68000_device::or_l_dpci_dd_dpm() // 80bb f1ff +void m68000_mcu_device::or_l_dpci_dd_dpm() // 80bb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -144202,7 +144202,7 @@ adsl2: } } -void m68000_device::or_l_imm32_dd_dpm() // 80bc f1ff +void m68000_mcu_device::or_l_imm32_dd_dpm() // 80bc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -144313,7 +144313,7 @@ void m68000_device::or_l_imm32_dd_dpm() // 80bc f1ff } } -void m68000_device::divu_w_ds_dd_dpm() // 80c0 f1f8 +void m68000_mcu_device::divu_w_ds_dd_dpm() // 80c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -144726,7 +144726,7 @@ dvum0: } } -void m68000_device::divu_w_ais_dd_dpm() // 80d0 f1f8 +void m68000_mcu_device::divu_w_ais_dd_dpm() // 80d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145166,7 +145166,7 @@ dvum0: } } -void m68000_device::divu_w_aips_dd_dpm() // 80d8 f1f8 +void m68000_mcu_device::divu_w_aips_dd_dpm() // 80d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145610,7 +145610,7 @@ dvum0: } } -void m68000_device::divu_w_pais_dd_dpm() // 80e0 f1f8 +void m68000_mcu_device::divu_w_pais_dd_dpm() // 80e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -146056,7 +146056,7 @@ dvum0: } } -void m68000_device::divu_w_das_dd_dpm() // 80e8 f1f8 +void m68000_mcu_device::divu_w_das_dd_dpm() // 80e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -146521,7 +146521,7 @@ dvum0: } } -void m68000_device::divu_w_dais_dd_dpm() // 80f0 f1f8 +void m68000_mcu_device::divu_w_dais_dd_dpm() // 80f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -147027,7 +147027,7 @@ dvum0: } } -void m68000_device::divu_w_adr16_dd_dpm() // 80f8 f1ff +void m68000_mcu_device::divu_w_adr16_dd_dpm() // 80f8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -147491,7 +147491,7 @@ dvum0: } } -void m68000_device::divu_w_adr32_dd_dpm() // 80f9 f1ff +void m68000_mcu_device::divu_w_adr32_dd_dpm() // 80f9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -147979,7 +147979,7 @@ dvum0: } } -void m68000_device::divu_w_dpc_dd_dpm() // 80fa f1ff +void m68000_mcu_device::divu_w_dpc_dd_dpm() // 80fa f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -148443,7 +148443,7 @@ dvum0: } } -void m68000_device::divu_w_dpci_dd_dpm() // 80fb f1ff +void m68000_mcu_device::divu_w_dpci_dd_dpm() // 80fb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -148948,7 +148948,7 @@ dvum0: } } -void m68000_device::divu_w_imm16_dd_dpm() // 80fc f1ff +void m68000_mcu_device::divu_w_imm16_dd_dpm() // 80fc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -149387,7 +149387,7 @@ dvum0: } } -void m68000_device::sbcd_ds_dd_dpm() // 8100 f1f8 +void m68000_mcu_device::sbcd_ds_dd_dpm() // 8100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -149440,7 +149440,7 @@ void m68000_device::sbcd_ds_dd_dpm() // 8100 f1f8 } } -void m68000_device::sbcd_pais_paid_dpm() // 8108 f1f8 +void m68000_mcu_device::sbcd_pais_paid_dpm() // 8108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -149554,7 +149554,7 @@ void m68000_device::sbcd_pais_paid_dpm() // 8108 f1f8 } } -void m68000_device::or_b_dd_ais_dpm() // 8110 f1f8 +void m68000_mcu_device::or_b_dd_ais_dpm() // 8110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149642,7 +149642,7 @@ void m68000_device::or_b_dd_ais_dpm() // 8110 f1f8 } } -void m68000_device::or_b_dd_aips_dpm() // 8118 f1f8 +void m68000_mcu_device::or_b_dd_aips_dpm() // 8118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149735,7 +149735,7 @@ void m68000_device::or_b_dd_aips_dpm() // 8118 f1f8 } } -void m68000_device::or_b_dd_pais_dpm() // 8120 f1f8 +void m68000_mcu_device::or_b_dd_pais_dpm() // 8120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149830,7 +149830,7 @@ void m68000_device::or_b_dd_pais_dpm() // 8120 f1f8 } } -void m68000_device::or_b_dd_das_dpm() // 8128 f1f8 +void m68000_mcu_device::or_b_dd_das_dpm() // 8128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149944,7 +149944,7 @@ void m68000_device::or_b_dd_das_dpm() // 8128 f1f8 } } -void m68000_device::or_b_dd_dais_dpm() // 8130 f1f8 +void m68000_mcu_device::or_b_dd_dais_dpm() // 8130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150101,7 +150101,7 @@ adsw2: } } -void m68000_device::or_b_dd_adr16_dpm() // 8138 f1ff +void m68000_mcu_device::or_b_dd_adr16_dpm() // 8138 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -150214,7 +150214,7 @@ void m68000_device::or_b_dd_adr16_dpm() // 8138 f1ff } } -void m68000_device::or_b_dd_adr32_dpm() // 8139 f1ff +void m68000_mcu_device::or_b_dd_adr32_dpm() // 8139 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -150352,7 +150352,7 @@ void m68000_device::or_b_dd_adr32_dpm() // 8139 f1ff } } -void m68000_device::or_w_dd_ais_dpm() // 8150 f1f8 +void m68000_mcu_device::or_w_dd_ais_dpm() // 8150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150450,7 +150450,7 @@ void m68000_device::or_w_dd_ais_dpm() // 8150 f1f8 } } -void m68000_device::or_w_dd_aips_dpm() // 8158 f1f8 +void m68000_mcu_device::or_w_dd_aips_dpm() // 8158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150553,7 +150553,7 @@ void m68000_device::or_w_dd_aips_dpm() // 8158 f1f8 } } -void m68000_device::or_w_dd_pais_dpm() // 8160 f1f8 +void m68000_mcu_device::or_w_dd_pais_dpm() // 8160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150658,7 +150658,7 @@ void m68000_device::or_w_dd_pais_dpm() // 8160 f1f8 } } -void m68000_device::or_w_dd_das_dpm() // 8168 f1f8 +void m68000_mcu_device::or_w_dd_das_dpm() // 8168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150782,7 +150782,7 @@ void m68000_device::or_w_dd_das_dpm() // 8168 f1f8 } } -void m68000_device::or_w_dd_dais_dpm() // 8170 f1f8 +void m68000_mcu_device::or_w_dd_dais_dpm() // 8170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150949,7 +150949,7 @@ adsw2: } } -void m68000_device::or_w_dd_adr16_dpm() // 8178 f1ff +void m68000_mcu_device::or_w_dd_adr16_dpm() // 8178 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -151072,7 +151072,7 @@ void m68000_device::or_w_dd_adr16_dpm() // 8178 f1ff } } -void m68000_device::or_w_dd_adr32_dpm() // 8179 f1ff +void m68000_mcu_device::or_w_dd_adr32_dpm() // 8179 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -151220,7 +151220,7 @@ void m68000_device::or_w_dd_adr32_dpm() // 8179 f1ff } } -void m68000_device::or_l_dd_ais_dpm() // 8190 f1f8 +void m68000_mcu_device::or_l_dd_ais_dpm() // 8190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -151368,7 +151368,7 @@ void m68000_device::or_l_dd_ais_dpm() // 8190 f1f8 } } -void m68000_device::or_l_dd_aips_dpm() // 8198 f1f8 +void m68000_mcu_device::or_l_dd_aips_dpm() // 8198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -151520,7 +151520,7 @@ void m68000_device::or_l_dd_aips_dpm() // 8198 f1f8 } } -void m68000_device::or_l_dd_pais_dpm() // 81a0 f1f8 +void m68000_mcu_device::or_l_dd_pais_dpm() // 81a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -151673,7 +151673,7 @@ void m68000_device::or_l_dd_pais_dpm() // 81a0 f1f8 } } -void m68000_device::or_l_dd_das_dpm() // 81a8 f1f8 +void m68000_mcu_device::or_l_dd_das_dpm() // 81a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -151846,7 +151846,7 @@ void m68000_device::or_l_dd_das_dpm() // 81a8 f1f8 } } -void m68000_device::or_l_dd_dais_dpm() // 81b0 f1f8 +void m68000_mcu_device::or_l_dd_dais_dpm() // 81b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -152062,7 +152062,7 @@ adsl2: } } -void m68000_device::or_l_dd_adr16_dpm() // 81b8 f1ff +void m68000_mcu_device::or_l_dd_adr16_dpm() // 81b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -152238,7 +152238,7 @@ void m68000_device::or_l_dd_adr16_dpm() // 81b8 f1ff } } -void m68000_device::or_l_dd_adr32_dpm() // 81b9 f1ff +void m68000_mcu_device::or_l_dd_adr32_dpm() // 81b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -152439,7 +152439,7 @@ void m68000_device::or_l_dd_adr32_dpm() // 81b9 f1ff } } -void m68000_device::divs_w_ds_dd_dpm() // 81c0 f1f8 +void m68000_mcu_device::divs_w_ds_dd_dpm() // 81c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -152985,7 +152985,7 @@ dvs1c: } } -void m68000_device::divs_w_ais_dd_dpm() // 81d0 f1f8 +void m68000_mcu_device::divs_w_ais_dd_dpm() // 81d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -153558,7 +153558,7 @@ dvs1c: } } -void m68000_device::divs_w_aips_dd_dpm() // 81d8 f1f8 +void m68000_mcu_device::divs_w_aips_dd_dpm() // 81d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -154135,7 +154135,7 @@ dvs1c: } } -void m68000_device::divs_w_pais_dd_dpm() // 81e0 f1f8 +void m68000_mcu_device::divs_w_pais_dd_dpm() // 81e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -154714,7 +154714,7 @@ dvs1c: } } -void m68000_device::divs_w_das_dd_dpm() // 81e8 f1f8 +void m68000_mcu_device::divs_w_das_dd_dpm() // 81e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -155312,7 +155312,7 @@ dvs1c: } } -void m68000_device::divs_w_dais_dd_dpm() // 81f0 f1f8 +void m68000_mcu_device::divs_w_dais_dd_dpm() // 81f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -155951,7 +155951,7 @@ dvs1c: } } -void m68000_device::divs_w_adr16_dd_dpm() // 81f8 f1ff +void m68000_mcu_device::divs_w_adr16_dd_dpm() // 81f8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -156548,7 +156548,7 @@ dvs1c: } } -void m68000_device::divs_w_adr32_dd_dpm() // 81f9 f1ff +void m68000_mcu_device::divs_w_adr32_dd_dpm() // 81f9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -157169,7 +157169,7 @@ dvs1c: } } -void m68000_device::divs_w_dpc_dd_dpm() // 81fa f1ff +void m68000_mcu_device::divs_w_dpc_dd_dpm() // 81fa f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -157766,7 +157766,7 @@ dvs1c: } } -void m68000_device::divs_w_dpci_dd_dpm() // 81fb f1ff +void m68000_mcu_device::divs_w_dpci_dd_dpm() // 81fb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -158404,7 +158404,7 @@ dvs1c: } } -void m68000_device::divs_w_imm16_dd_dpm() // 81fc f1ff +void m68000_mcu_device::divs_w_imm16_dd_dpm() // 81fc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -158976,7 +158976,7 @@ dvs1c: } } -void m68000_device::sub_b_ds_dd_dpm() // 9000 f1f8 +void m68000_mcu_device::sub_b_ds_dd_dpm() // 9000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -159025,7 +159025,7 @@ void m68000_device::sub_b_ds_dd_dpm() // 9000 f1f8 } } -void m68000_device::sub_b_ais_dd_dpm() // 9010 f1f8 +void m68000_mcu_device::sub_b_ais_dd_dpm() // 9010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159097,7 +159097,7 @@ void m68000_device::sub_b_ais_dd_dpm() // 9010 f1f8 } } -void m68000_device::sub_b_aips_dd_dpm() // 9018 f1f8 +void m68000_mcu_device::sub_b_aips_dd_dpm() // 9018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159173,7 +159173,7 @@ void m68000_device::sub_b_aips_dd_dpm() // 9018 f1f8 } } -void m68000_device::sub_b_pais_dd_dpm() // 9020 f1f8 +void m68000_mcu_device::sub_b_pais_dd_dpm() // 9020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159251,7 +159251,7 @@ void m68000_device::sub_b_pais_dd_dpm() // 9020 f1f8 } } -void m68000_device::sub_b_das_dd_dpm() // 9028 f1f8 +void m68000_mcu_device::sub_b_das_dd_dpm() // 9028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159348,7 +159348,7 @@ void m68000_device::sub_b_das_dd_dpm() // 9028 f1f8 } } -void m68000_device::sub_b_dais_dd_dpm() // 9030 f1f8 +void m68000_mcu_device::sub_b_dais_dd_dpm() // 9030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159486,7 +159486,7 @@ adsw2: } } -void m68000_device::sub_b_adr16_dd_dpm() // 9038 f1ff +void m68000_mcu_device::sub_b_adr16_dd_dpm() // 9038 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -159582,7 +159582,7 @@ void m68000_device::sub_b_adr16_dd_dpm() // 9038 f1ff } } -void m68000_device::sub_b_adr32_dd_dpm() // 9039 f1ff +void m68000_mcu_device::sub_b_adr32_dd_dpm() // 9039 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -159702,7 +159702,7 @@ void m68000_device::sub_b_adr32_dd_dpm() // 9039 f1ff } } -void m68000_device::sub_b_dpc_dd_dpm() // 903a f1ff +void m68000_mcu_device::sub_b_dpc_dd_dpm() // 903a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -159798,7 +159798,7 @@ void m68000_device::sub_b_dpc_dd_dpm() // 903a f1ff } } -void m68000_device::sub_b_dpci_dd_dpm() // 903b f1ff +void m68000_mcu_device::sub_b_dpci_dd_dpm() // 903b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -159935,7 +159935,7 @@ adsw2: } } -void m68000_device::sub_b_imm8_dd_dpm() // 903c f1ff +void m68000_mcu_device::sub_b_imm8_dd_dpm() // 903c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -160010,7 +160010,7 @@ void m68000_device::sub_b_imm8_dd_dpm() // 903c f1ff } } -void m68000_device::sub_w_ds_dd_dpm() // 9040 f1f8 +void m68000_mcu_device::sub_w_ds_dd_dpm() // 9040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -160059,7 +160059,7 @@ void m68000_device::sub_w_ds_dd_dpm() // 9040 f1f8 } } -void m68000_device::sub_w_as_dd_dpm() // 9048 f1f8 +void m68000_mcu_device::sub_w_as_dd_dpm() // 9048 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160108,7 +160108,7 @@ void m68000_device::sub_w_as_dd_dpm() // 9048 f1f8 } } -void m68000_device::sub_w_ais_dd_dpm() // 9050 f1f8 +void m68000_mcu_device::sub_w_ais_dd_dpm() // 9050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160184,7 +160184,7 @@ void m68000_device::sub_w_ais_dd_dpm() // 9050 f1f8 } } -void m68000_device::sub_w_aips_dd_dpm() // 9058 f1f8 +void m68000_mcu_device::sub_w_aips_dd_dpm() // 9058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160264,7 +160264,7 @@ void m68000_device::sub_w_aips_dd_dpm() // 9058 f1f8 } } -void m68000_device::sub_w_pais_dd_dpm() // 9060 f1f8 +void m68000_mcu_device::sub_w_pais_dd_dpm() // 9060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160346,7 +160346,7 @@ void m68000_device::sub_w_pais_dd_dpm() // 9060 f1f8 } } -void m68000_device::sub_w_das_dd_dpm() // 9068 f1f8 +void m68000_mcu_device::sub_w_das_dd_dpm() // 9068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160447,7 +160447,7 @@ void m68000_device::sub_w_das_dd_dpm() // 9068 f1f8 } } -void m68000_device::sub_w_dais_dd_dpm() // 9070 f1f8 +void m68000_mcu_device::sub_w_dais_dd_dpm() // 9070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160589,7 +160589,7 @@ adsw2: } } -void m68000_device::sub_w_adr16_dd_dpm() // 9078 f1ff +void m68000_mcu_device::sub_w_adr16_dd_dpm() // 9078 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -160689,7 +160689,7 @@ void m68000_device::sub_w_adr16_dd_dpm() // 9078 f1ff } } -void m68000_device::sub_w_adr32_dd_dpm() // 9079 f1ff +void m68000_mcu_device::sub_w_adr32_dd_dpm() // 9079 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -160813,7 +160813,7 @@ void m68000_device::sub_w_adr32_dd_dpm() // 9079 f1ff } } -void m68000_device::sub_w_dpc_dd_dpm() // 907a f1ff +void m68000_mcu_device::sub_w_dpc_dd_dpm() // 907a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -160913,7 +160913,7 @@ void m68000_device::sub_w_dpc_dd_dpm() // 907a f1ff } } -void m68000_device::sub_w_dpci_dd_dpm() // 907b f1ff +void m68000_mcu_device::sub_w_dpci_dd_dpm() // 907b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -161054,7 +161054,7 @@ adsw2: } } -void m68000_device::sub_w_imm16_dd_dpm() // 907c f1ff +void m68000_mcu_device::sub_w_imm16_dd_dpm() // 907c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -161129,7 +161129,7 @@ void m68000_device::sub_w_imm16_dd_dpm() // 907c f1ff } } -void m68000_device::sub_l_ds_dd_dpm() // 9080 f1f8 +void m68000_mcu_device::sub_l_ds_dd_dpm() // 9080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -161186,7 +161186,7 @@ void m68000_device::sub_l_ds_dd_dpm() // 9080 f1f8 } } -void m68000_device::sub_l_as_dd_dpm() // 9088 f1f8 +void m68000_mcu_device::sub_l_as_dd_dpm() // 9088 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -161243,7 +161243,7 @@ void m68000_device::sub_l_as_dd_dpm() // 9088 f1f8 } } -void m68000_device::sub_l_ais_dd_dpm() // 9090 f1f8 +void m68000_mcu_device::sub_l_ais_dd_dpm() // 9090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -161349,7 +161349,7 @@ void m68000_device::sub_l_ais_dd_dpm() // 9090 f1f8 } } -void m68000_device::sub_l_aips_dd_dpm() // 9098 f1f8 +void m68000_mcu_device::sub_l_aips_dd_dpm() // 9098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -161458,7 +161458,7 @@ void m68000_device::sub_l_aips_dd_dpm() // 9098 f1f8 } } -void m68000_device::sub_l_pais_dd_dpm() // 90a0 f1f8 +void m68000_mcu_device::sub_l_pais_dd_dpm() // 90a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -161568,7 +161568,7 @@ void m68000_device::sub_l_pais_dd_dpm() // 90a0 f1f8 } } -void m68000_device::sub_l_das_dd_dpm() // 90a8 f1f8 +void m68000_mcu_device::sub_l_das_dd_dpm() // 90a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -161698,7 +161698,7 @@ void m68000_device::sub_l_das_dd_dpm() // 90a8 f1f8 } } -void m68000_device::sub_l_dais_dd_dpm() // 90b0 f1f8 +void m68000_mcu_device::sub_l_dais_dd_dpm() // 90b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -161869,7 +161869,7 @@ adsl2: } } -void m68000_device::sub_l_adr16_dd_dpm() // 90b8 f1ff +void m68000_mcu_device::sub_l_adr16_dd_dpm() // 90b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -162001,7 +162001,7 @@ void m68000_device::sub_l_adr16_dd_dpm() // 90b8 f1ff } } -void m68000_device::sub_l_adr32_dd_dpm() // 90b9 f1ff +void m68000_mcu_device::sub_l_adr32_dd_dpm() // 90b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -162157,7 +162157,7 @@ void m68000_device::sub_l_adr32_dd_dpm() // 90b9 f1ff } } -void m68000_device::sub_l_dpc_dd_dpm() // 90ba f1ff +void m68000_mcu_device::sub_l_dpc_dd_dpm() // 90ba f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -162286,7 +162286,7 @@ void m68000_device::sub_l_dpc_dd_dpm() // 90ba f1ff } } -void m68000_device::sub_l_dpci_dd_dpm() // 90bb f1ff +void m68000_mcu_device::sub_l_dpci_dd_dpm() // 90bb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -162456,7 +162456,7 @@ adsl2: } } -void m68000_device::sub_l_imm32_dd_dpm() // 90bc f1ff +void m68000_mcu_device::sub_l_imm32_dd_dpm() // 90bc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -162563,7 +162563,7 @@ void m68000_device::sub_l_imm32_dd_dpm() // 90bc f1ff } } -void m68000_device::suba_w_ds_ad_dpm() // 90c0 f1f8 +void m68000_mcu_device::suba_w_ds_ad_dpm() // 90c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -162618,7 +162618,7 @@ void m68000_device::suba_w_ds_ad_dpm() // 90c0 f1f8 } } -void m68000_device::suba_w_as_ad_dpm() // 90c8 f1f8 +void m68000_mcu_device::suba_w_as_ad_dpm() // 90c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -162673,7 +162673,7 @@ void m68000_device::suba_w_as_ad_dpm() // 90c8 f1f8 } } -void m68000_device::suba_w_ais_ad_dpm() // 90d0 f1f8 +void m68000_mcu_device::suba_w_ais_ad_dpm() // 90d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -162755,7 +162755,7 @@ void m68000_device::suba_w_ais_ad_dpm() // 90d0 f1f8 } } -void m68000_device::suba_w_aips_ad_dpm() // 90d8 f1f8 +void m68000_mcu_device::suba_w_aips_ad_dpm() // 90d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -162841,7 +162841,7 @@ void m68000_device::suba_w_aips_ad_dpm() // 90d8 f1f8 } } -void m68000_device::suba_w_pais_ad_dpm() // 90e0 f1f8 +void m68000_mcu_device::suba_w_pais_ad_dpm() // 90e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -162929,7 +162929,7 @@ void m68000_device::suba_w_pais_ad_dpm() // 90e0 f1f8 } } -void m68000_device::suba_w_das_ad_dpm() // 90e8 f1f8 +void m68000_mcu_device::suba_w_das_ad_dpm() // 90e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -163036,7 +163036,7 @@ void m68000_device::suba_w_das_ad_dpm() // 90e8 f1f8 } } -void m68000_device::suba_w_dais_ad_dpm() // 90f0 f1f8 +void m68000_mcu_device::suba_w_dais_ad_dpm() // 90f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -163184,7 +163184,7 @@ adsw2: } } -void m68000_device::suba_w_adr16_ad_dpm() // 90f8 f1ff +void m68000_mcu_device::suba_w_adr16_ad_dpm() // 90f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -163290,7 +163290,7 @@ void m68000_device::suba_w_adr16_ad_dpm() // 90f8 f1ff } } -void m68000_device::suba_w_adr32_ad_dpm() // 90f9 f1ff +void m68000_mcu_device::suba_w_adr32_ad_dpm() // 90f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -163420,7 +163420,7 @@ void m68000_device::suba_w_adr32_ad_dpm() // 90f9 f1ff } } -void m68000_device::suba_w_dpc_ad_dpm() // 90fa f1ff +void m68000_mcu_device::suba_w_dpc_ad_dpm() // 90fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -163526,7 +163526,7 @@ void m68000_device::suba_w_dpc_ad_dpm() // 90fa f1ff } } -void m68000_device::suba_w_dpci_ad_dpm() // 90fb f1ff +void m68000_mcu_device::suba_w_dpci_ad_dpm() // 90fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -163673,7 +163673,7 @@ adsw2: } } -void m68000_device::suba_w_imm16_ad_dpm() // 90fc f1ff +void m68000_mcu_device::suba_w_imm16_ad_dpm() // 90fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -163754,7 +163754,7 @@ void m68000_device::suba_w_imm16_ad_dpm() // 90fc f1ff } } -void m68000_device::subx_b_ds_dd_dpm() // 9100 f1f8 +void m68000_mcu_device::subx_b_ds_dd_dpm() // 9100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -163803,7 +163803,7 @@ void m68000_device::subx_b_ds_dd_dpm() // 9100 f1f8 } } -void m68000_device::subx_b_pais_paid_dpm() // 9108 f1f8 +void m68000_mcu_device::subx_b_pais_paid_dpm() // 9108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -163915,7 +163915,7 @@ void m68000_device::subx_b_pais_paid_dpm() // 9108 f1f8 } } -void m68000_device::sub_b_dd_ais_dpm() // 9110 f1f8 +void m68000_mcu_device::sub_b_dd_ais_dpm() // 9110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164001,7 +164001,7 @@ void m68000_device::sub_b_dd_ais_dpm() // 9110 f1f8 } } -void m68000_device::sub_b_dd_aips_dpm() // 9118 f1f8 +void m68000_mcu_device::sub_b_dd_aips_dpm() // 9118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164091,7 +164091,7 @@ void m68000_device::sub_b_dd_aips_dpm() // 9118 f1f8 } } -void m68000_device::sub_b_dd_pais_dpm() // 9120 f1f8 +void m68000_mcu_device::sub_b_dd_pais_dpm() // 9120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164183,7 +164183,7 @@ void m68000_device::sub_b_dd_pais_dpm() // 9120 f1f8 } } -void m68000_device::sub_b_dd_das_dpm() // 9128 f1f8 +void m68000_mcu_device::sub_b_dd_das_dpm() // 9128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164294,7 +164294,7 @@ void m68000_device::sub_b_dd_das_dpm() // 9128 f1f8 } } -void m68000_device::sub_b_dd_dais_dpm() // 9130 f1f8 +void m68000_mcu_device::sub_b_dd_dais_dpm() // 9130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164446,7 +164446,7 @@ adsw2: } } -void m68000_device::sub_b_dd_adr16_dpm() // 9138 f1ff +void m68000_mcu_device::sub_b_dd_adr16_dpm() // 9138 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -164556,7 +164556,7 @@ void m68000_device::sub_b_dd_adr16_dpm() // 9138 f1ff } } -void m68000_device::sub_b_dd_adr32_dpm() // 9139 f1ff +void m68000_mcu_device::sub_b_dd_adr32_dpm() // 9139 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -164690,7 +164690,7 @@ void m68000_device::sub_b_dd_adr32_dpm() // 9139 f1ff } } -void m68000_device::subx_w_ds_dd_dpm() // 9140 f1f8 +void m68000_mcu_device::subx_w_ds_dd_dpm() // 9140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -164739,7 +164739,7 @@ void m68000_device::subx_w_ds_dd_dpm() // 9140 f1f8 } } -void m68000_device::subx_w_pais_paid_dpm() // 9148 f1f8 +void m68000_mcu_device::subx_w_pais_paid_dpm() // 9148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -164865,7 +164865,7 @@ void m68000_device::subx_w_pais_paid_dpm() // 9148 f1f8 } } -void m68000_device::sub_w_dd_ais_dpm() // 9150 f1f8 +void m68000_mcu_device::sub_w_dd_ais_dpm() // 9150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164961,7 +164961,7 @@ void m68000_device::sub_w_dd_ais_dpm() // 9150 f1f8 } } -void m68000_device::sub_w_dd_aips_dpm() // 9158 f1f8 +void m68000_mcu_device::sub_w_dd_aips_dpm() // 9158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -165061,7 +165061,7 @@ void m68000_device::sub_w_dd_aips_dpm() // 9158 f1f8 } } -void m68000_device::sub_w_dd_pais_dpm() // 9160 f1f8 +void m68000_mcu_device::sub_w_dd_pais_dpm() // 9160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -165163,7 +165163,7 @@ void m68000_device::sub_w_dd_pais_dpm() // 9160 f1f8 } } -void m68000_device::sub_w_dd_das_dpm() // 9168 f1f8 +void m68000_mcu_device::sub_w_dd_das_dpm() // 9168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -165284,7 +165284,7 @@ void m68000_device::sub_w_dd_das_dpm() // 9168 f1f8 } } -void m68000_device::sub_w_dd_dais_dpm() // 9170 f1f8 +void m68000_mcu_device::sub_w_dd_dais_dpm() // 9170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -165446,7 +165446,7 @@ adsw2: } } -void m68000_device::sub_w_dd_adr16_dpm() // 9178 f1ff +void m68000_mcu_device::sub_w_dd_adr16_dpm() // 9178 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -165566,7 +165566,7 @@ void m68000_device::sub_w_dd_adr16_dpm() // 9178 f1ff } } -void m68000_device::sub_w_dd_adr32_dpm() // 9179 f1ff +void m68000_mcu_device::sub_w_dd_adr32_dpm() // 9179 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -165710,7 +165710,7 @@ void m68000_device::sub_w_dd_adr32_dpm() // 9179 f1ff } } -void m68000_device::subx_l_ds_dd_dpm() // 9180 f1f8 +void m68000_mcu_device::subx_l_ds_dd_dpm() // 9180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -165767,7 +165767,7 @@ void m68000_device::subx_l_ds_dd_dpm() // 9180 f1f8 } } -void m68000_device::subx_l_pais_paid_dpm() // 9188 f1f8 +void m68000_mcu_device::subx_l_pais_paid_dpm() // 9188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -165967,7 +165967,7 @@ void m68000_device::subx_l_pais_paid_dpm() // 9188 f1f8 } } -void m68000_device::sub_l_dd_ais_dpm() // 9190 f1f8 +void m68000_mcu_device::sub_l_dd_ais_dpm() // 9190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166113,7 +166113,7 @@ void m68000_device::sub_l_dd_ais_dpm() // 9190 f1f8 } } -void m68000_device::sub_l_dd_aips_dpm() // 9198 f1f8 +void m68000_mcu_device::sub_l_dd_aips_dpm() // 9198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166262,7 +166262,7 @@ void m68000_device::sub_l_dd_aips_dpm() // 9198 f1f8 } } -void m68000_device::sub_l_dd_pais_dpm() // 91a0 f1f8 +void m68000_mcu_device::sub_l_dd_pais_dpm() // 91a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166412,7 +166412,7 @@ void m68000_device::sub_l_dd_pais_dpm() // 91a0 f1f8 } } -void m68000_device::sub_l_dd_das_dpm() // 91a8 f1f8 +void m68000_mcu_device::sub_l_dd_das_dpm() // 91a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166582,7 +166582,7 @@ void m68000_device::sub_l_dd_das_dpm() // 91a8 f1f8 } } -void m68000_device::sub_l_dd_dais_dpm() // 91b0 f1f8 +void m68000_mcu_device::sub_l_dd_dais_dpm() // 91b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166793,7 +166793,7 @@ adsl2: } } -void m68000_device::sub_l_dd_adr16_dpm() // 91b8 f1ff +void m68000_mcu_device::sub_l_dd_adr16_dpm() // 91b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -166965,7 +166965,7 @@ void m68000_device::sub_l_dd_adr16_dpm() // 91b8 f1ff } } -void m68000_device::sub_l_dd_adr32_dpm() // 91b9 f1ff +void m68000_mcu_device::sub_l_dd_adr32_dpm() // 91b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -167161,7 +167161,7 @@ void m68000_device::sub_l_dd_adr32_dpm() // 91b9 f1ff } } -void m68000_device::suba_l_ds_ad_dpm() // 91c0 f1f8 +void m68000_mcu_device::suba_l_ds_ad_dpm() // 91c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -167216,7 +167216,7 @@ void m68000_device::suba_l_ds_ad_dpm() // 91c0 f1f8 } } -void m68000_device::suba_l_as_ad_dpm() // 91c8 f1f8 +void m68000_mcu_device::suba_l_as_ad_dpm() // 91c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -167271,7 +167271,7 @@ void m68000_device::suba_l_as_ad_dpm() // 91c8 f1f8 } } -void m68000_device::suba_l_ais_ad_dpm() // 91d0 f1f8 +void m68000_mcu_device::suba_l_ais_ad_dpm() // 91d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -167375,7 +167375,7 @@ void m68000_device::suba_l_ais_ad_dpm() // 91d0 f1f8 } } -void m68000_device::suba_l_aips_ad_dpm() // 91d8 f1f8 +void m68000_mcu_device::suba_l_aips_ad_dpm() // 91d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -167482,7 +167482,7 @@ void m68000_device::suba_l_aips_ad_dpm() // 91d8 f1f8 } } -void m68000_device::suba_l_pais_ad_dpm() // 91e0 f1f8 +void m68000_mcu_device::suba_l_pais_ad_dpm() // 91e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -167590,7 +167590,7 @@ void m68000_device::suba_l_pais_ad_dpm() // 91e0 f1f8 } } -void m68000_device::suba_l_das_ad_dpm() // 91e8 f1f8 +void m68000_mcu_device::suba_l_das_ad_dpm() // 91e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -167718,7 +167718,7 @@ void m68000_device::suba_l_das_ad_dpm() // 91e8 f1f8 } } -void m68000_device::suba_l_dais_ad_dpm() // 91f0 f1f8 +void m68000_mcu_device::suba_l_dais_ad_dpm() // 91f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -167887,7 +167887,7 @@ adsl2: } } -void m68000_device::suba_l_adr16_ad_dpm() // 91f8 f1ff +void m68000_mcu_device::suba_l_adr16_ad_dpm() // 91f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -168017,7 +168017,7 @@ void m68000_device::suba_l_adr16_ad_dpm() // 91f8 f1ff } } -void m68000_device::suba_l_adr32_ad_dpm() // 91f9 f1ff +void m68000_mcu_device::suba_l_adr32_ad_dpm() // 91f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -168171,7 +168171,7 @@ void m68000_device::suba_l_adr32_ad_dpm() // 91f9 f1ff } } -void m68000_device::suba_l_dpc_ad_dpm() // 91fa f1ff +void m68000_mcu_device::suba_l_dpc_ad_dpm() // 91fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -168298,7 +168298,7 @@ void m68000_device::suba_l_dpc_ad_dpm() // 91fa f1ff } } -void m68000_device::suba_l_dpci_ad_dpm() // 91fb f1ff +void m68000_mcu_device::suba_l_dpci_ad_dpm() // 91fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -168466,7 +168466,7 @@ adsl2: } } -void m68000_device::suba_l_imm32_ad_dpm() // 91fc f1ff +void m68000_mcu_device::suba_l_imm32_ad_dpm() // 91fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -168571,7 +168571,7 @@ void m68000_device::suba_l_imm32_ad_dpm() // 91fc f1ff } } -void m68000_device::cmp_b_ds_dd_dpm() // b000 f1f8 +void m68000_mcu_device::cmp_b_ds_dd_dpm() // b000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -168619,7 +168619,7 @@ void m68000_device::cmp_b_ds_dd_dpm() // b000 f1f8 } } -void m68000_device::cmp_b_ais_dd_dpm() // b010 f1f8 +void m68000_mcu_device::cmp_b_ais_dd_dpm() // b010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168690,7 +168690,7 @@ void m68000_device::cmp_b_ais_dd_dpm() // b010 f1f8 } } -void m68000_device::cmp_b_aips_dd_dpm() // b018 f1f8 +void m68000_mcu_device::cmp_b_aips_dd_dpm() // b018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168765,7 +168765,7 @@ void m68000_device::cmp_b_aips_dd_dpm() // b018 f1f8 } } -void m68000_device::cmp_b_pais_dd_dpm() // b020 f1f8 +void m68000_mcu_device::cmp_b_pais_dd_dpm() // b020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168842,7 +168842,7 @@ void m68000_device::cmp_b_pais_dd_dpm() // b020 f1f8 } } -void m68000_device::cmp_b_das_dd_dpm() // b028 f1f8 +void m68000_mcu_device::cmp_b_das_dd_dpm() // b028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168938,7 +168938,7 @@ void m68000_device::cmp_b_das_dd_dpm() // b028 f1f8 } } -void m68000_device::cmp_b_dais_dd_dpm() // b030 f1f8 +void m68000_mcu_device::cmp_b_dais_dd_dpm() // b030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -169075,7 +169075,7 @@ adsw2: } } -void m68000_device::cmp_b_adr16_dd_dpm() // b038 f1ff +void m68000_mcu_device::cmp_b_adr16_dd_dpm() // b038 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -169170,7 +169170,7 @@ void m68000_device::cmp_b_adr16_dd_dpm() // b038 f1ff } } -void m68000_device::cmp_b_adr32_dd_dpm() // b039 f1ff +void m68000_mcu_device::cmp_b_adr32_dd_dpm() // b039 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -169289,7 +169289,7 @@ void m68000_device::cmp_b_adr32_dd_dpm() // b039 f1ff } } -void m68000_device::cmp_b_dpc_dd_dpm() // b03a f1ff +void m68000_mcu_device::cmp_b_dpc_dd_dpm() // b03a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -169384,7 +169384,7 @@ void m68000_device::cmp_b_dpc_dd_dpm() // b03a f1ff } } -void m68000_device::cmp_b_dpci_dd_dpm() // b03b f1ff +void m68000_mcu_device::cmp_b_dpci_dd_dpm() // b03b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -169520,7 +169520,7 @@ adsw2: } } -void m68000_device::cmp_b_imm8_dd_dpm() // b03c f1ff +void m68000_mcu_device::cmp_b_imm8_dd_dpm() // b03c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -169594,7 +169594,7 @@ void m68000_device::cmp_b_imm8_dd_dpm() // b03c f1ff } } -void m68000_device::cmp_w_ds_dd_dpm() // b040 f1f8 +void m68000_mcu_device::cmp_w_ds_dd_dpm() // b040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -169642,7 +169642,7 @@ void m68000_device::cmp_w_ds_dd_dpm() // b040 f1f8 } } -void m68000_device::cmp_w_as_dd_dpm() // b048 f1f8 +void m68000_mcu_device::cmp_w_as_dd_dpm() // b048 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -169690,7 +169690,7 @@ void m68000_device::cmp_w_as_dd_dpm() // b048 f1f8 } } -void m68000_device::cmp_w_ais_dd_dpm() // b050 f1f8 +void m68000_mcu_device::cmp_w_ais_dd_dpm() // b050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -169765,7 +169765,7 @@ void m68000_device::cmp_w_ais_dd_dpm() // b050 f1f8 } } -void m68000_device::cmp_w_aips_dd_dpm() // b058 f1f8 +void m68000_mcu_device::cmp_w_aips_dd_dpm() // b058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -169844,7 +169844,7 @@ void m68000_device::cmp_w_aips_dd_dpm() // b058 f1f8 } } -void m68000_device::cmp_w_pais_dd_dpm() // b060 f1f8 +void m68000_mcu_device::cmp_w_pais_dd_dpm() // b060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -169925,7 +169925,7 @@ void m68000_device::cmp_w_pais_dd_dpm() // b060 f1f8 } } -void m68000_device::cmp_w_das_dd_dpm() // b068 f1f8 +void m68000_mcu_device::cmp_w_das_dd_dpm() // b068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170025,7 +170025,7 @@ void m68000_device::cmp_w_das_dd_dpm() // b068 f1f8 } } -void m68000_device::cmp_w_dais_dd_dpm() // b070 f1f8 +void m68000_mcu_device::cmp_w_dais_dd_dpm() // b070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170166,7 +170166,7 @@ adsw2: } } -void m68000_device::cmp_w_adr16_dd_dpm() // b078 f1ff +void m68000_mcu_device::cmp_w_adr16_dd_dpm() // b078 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -170265,7 +170265,7 @@ void m68000_device::cmp_w_adr16_dd_dpm() // b078 f1ff } } -void m68000_device::cmp_w_adr32_dd_dpm() // b079 f1ff +void m68000_mcu_device::cmp_w_adr32_dd_dpm() // b079 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -170388,7 +170388,7 @@ void m68000_device::cmp_w_adr32_dd_dpm() // b079 f1ff } } -void m68000_device::cmp_w_dpc_dd_dpm() // b07a f1ff +void m68000_mcu_device::cmp_w_dpc_dd_dpm() // b07a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -170487,7 +170487,7 @@ void m68000_device::cmp_w_dpc_dd_dpm() // b07a f1ff } } -void m68000_device::cmp_w_dpci_dd_dpm() // b07b f1ff +void m68000_mcu_device::cmp_w_dpci_dd_dpm() // b07b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -170627,7 +170627,7 @@ adsw2: } } -void m68000_device::cmp_w_imm16_dd_dpm() // b07c f1ff +void m68000_mcu_device::cmp_w_imm16_dd_dpm() // b07c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -170701,7 +170701,7 @@ void m68000_device::cmp_w_imm16_dd_dpm() // b07c f1ff } } -void m68000_device::cmp_l_ds_dd_dpm() // b080 f1f8 +void m68000_mcu_device::cmp_l_ds_dd_dpm() // b080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -170754,7 +170754,7 @@ void m68000_device::cmp_l_ds_dd_dpm() // b080 f1f8 } } -void m68000_device::cmp_l_as_dd_dpm() // b088 f1f8 +void m68000_mcu_device::cmp_l_as_dd_dpm() // b088 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170807,7 +170807,7 @@ void m68000_device::cmp_l_as_dd_dpm() // b088 f1f8 } } -void m68000_device::cmp_l_ais_dd_dpm() // b090 f1f8 +void m68000_mcu_device::cmp_l_ais_dd_dpm() // b090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170911,7 +170911,7 @@ void m68000_device::cmp_l_ais_dd_dpm() // b090 f1f8 } } -void m68000_device::cmp_l_aips_dd_dpm() // b098 f1f8 +void m68000_mcu_device::cmp_l_aips_dd_dpm() // b098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171018,7 +171018,7 @@ void m68000_device::cmp_l_aips_dd_dpm() // b098 f1f8 } } -void m68000_device::cmp_l_pais_dd_dpm() // b0a0 f1f8 +void m68000_mcu_device::cmp_l_pais_dd_dpm() // b0a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171126,7 +171126,7 @@ void m68000_device::cmp_l_pais_dd_dpm() // b0a0 f1f8 } } -void m68000_device::cmp_l_das_dd_dpm() // b0a8 f1f8 +void m68000_mcu_device::cmp_l_das_dd_dpm() // b0a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171254,7 +171254,7 @@ void m68000_device::cmp_l_das_dd_dpm() // b0a8 f1f8 } } -void m68000_device::cmp_l_dais_dd_dpm() // b0b0 f1f8 +void m68000_mcu_device::cmp_l_dais_dd_dpm() // b0b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171423,7 +171423,7 @@ adsl2: } } -void m68000_device::cmp_l_adr16_dd_dpm() // b0b8 f1ff +void m68000_mcu_device::cmp_l_adr16_dd_dpm() // b0b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -171553,7 +171553,7 @@ void m68000_device::cmp_l_adr16_dd_dpm() // b0b8 f1ff } } -void m68000_device::cmp_l_adr32_dd_dpm() // b0b9 f1ff +void m68000_mcu_device::cmp_l_adr32_dd_dpm() // b0b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -171707,7 +171707,7 @@ void m68000_device::cmp_l_adr32_dd_dpm() // b0b9 f1ff } } -void m68000_device::cmp_l_dpc_dd_dpm() // b0ba f1ff +void m68000_mcu_device::cmp_l_dpc_dd_dpm() // b0ba f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -171834,7 +171834,7 @@ void m68000_device::cmp_l_dpc_dd_dpm() // b0ba f1ff } } -void m68000_device::cmp_l_dpci_dd_dpm() // b0bb f1ff +void m68000_mcu_device::cmp_l_dpci_dd_dpm() // b0bb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -172002,7 +172002,7 @@ adsl2: } } -void m68000_device::cmp_l_imm32_dd_dpm() // b0bc f1ff +void m68000_mcu_device::cmp_l_imm32_dd_dpm() // b0bc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -172105,7 +172105,7 @@ void m68000_device::cmp_l_imm32_dd_dpm() // b0bc f1ff } } -void m68000_device::cmpa_w_ds_ad_dpm() // b0c0 f1f8 +void m68000_mcu_device::cmpa_w_ds_ad_dpm() // b0c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -172158,7 +172158,7 @@ void m68000_device::cmpa_w_ds_ad_dpm() // b0c0 f1f8 } } -void m68000_device::cmpa_w_as_ad_dpm() // b0c8 f1f8 +void m68000_mcu_device::cmpa_w_as_ad_dpm() // b0c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -172211,7 +172211,7 @@ void m68000_device::cmpa_w_as_ad_dpm() // b0c8 f1f8 } } -void m68000_device::cmpa_w_ais_ad_dpm() // b0d0 f1f8 +void m68000_mcu_device::cmpa_w_ais_ad_dpm() // b0d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -172291,7 +172291,7 @@ void m68000_device::cmpa_w_ais_ad_dpm() // b0d0 f1f8 } } -void m68000_device::cmpa_w_aips_ad_dpm() // b0d8 f1f8 +void m68000_mcu_device::cmpa_w_aips_ad_dpm() // b0d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -172375,7 +172375,7 @@ void m68000_device::cmpa_w_aips_ad_dpm() // b0d8 f1f8 } } -void m68000_device::cmpa_w_pais_ad_dpm() // b0e0 f1f8 +void m68000_mcu_device::cmpa_w_pais_ad_dpm() // b0e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -172461,7 +172461,7 @@ void m68000_device::cmpa_w_pais_ad_dpm() // b0e0 f1f8 } } -void m68000_device::cmpa_w_das_ad_dpm() // b0e8 f1f8 +void m68000_mcu_device::cmpa_w_das_ad_dpm() // b0e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -172566,7 +172566,7 @@ void m68000_device::cmpa_w_das_ad_dpm() // b0e8 f1f8 } } -void m68000_device::cmpa_w_dais_ad_dpm() // b0f0 f1f8 +void m68000_mcu_device::cmpa_w_dais_ad_dpm() // b0f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -172712,7 +172712,7 @@ adsw2: } } -void m68000_device::cmpa_w_adr16_ad_dpm() // b0f8 f1ff +void m68000_mcu_device::cmpa_w_adr16_ad_dpm() // b0f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -172816,7 +172816,7 @@ void m68000_device::cmpa_w_adr16_ad_dpm() // b0f8 f1ff } } -void m68000_device::cmpa_w_adr32_ad_dpm() // b0f9 f1ff +void m68000_mcu_device::cmpa_w_adr32_ad_dpm() // b0f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -172944,7 +172944,7 @@ void m68000_device::cmpa_w_adr32_ad_dpm() // b0f9 f1ff } } -void m68000_device::cmpa_w_dpc_ad_dpm() // b0fa f1ff +void m68000_mcu_device::cmpa_w_dpc_ad_dpm() // b0fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -173048,7 +173048,7 @@ void m68000_device::cmpa_w_dpc_ad_dpm() // b0fa f1ff } } -void m68000_device::cmpa_w_dpci_ad_dpm() // b0fb f1ff +void m68000_mcu_device::cmpa_w_dpci_ad_dpm() // b0fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -173193,7 +173193,7 @@ adsw2: } } -void m68000_device::cmpa_w_imm16_ad_dpm() // b0fc f1ff +void m68000_mcu_device::cmpa_w_imm16_ad_dpm() // b0fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -173272,7 +173272,7 @@ void m68000_device::cmpa_w_imm16_ad_dpm() // b0fc f1ff } } -void m68000_device::eor_b_dd_ds_dpm() // b100 f1f8 +void m68000_mcu_device::eor_b_dd_ds_dpm() // b100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -173321,7 +173321,7 @@ void m68000_device::eor_b_dd_ds_dpm() // b100 f1f8 } } -void m68000_device::cmpm_b_aips_aipd_dpm() // b108 f1f8 +void m68000_mcu_device::cmpm_b_aips_aipd_dpm() // b108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -173412,7 +173412,7 @@ void m68000_device::cmpm_b_aips_aipd_dpm() // b108 f1f8 } } -void m68000_device::eor_b_dd_ais_dpm() // b110 f1f8 +void m68000_mcu_device::eor_b_dd_ais_dpm() // b110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -173500,7 +173500,7 @@ void m68000_device::eor_b_dd_ais_dpm() // b110 f1f8 } } -void m68000_device::eor_b_dd_aips_dpm() // b118 f1f8 +void m68000_mcu_device::eor_b_dd_aips_dpm() // b118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -173593,7 +173593,7 @@ void m68000_device::eor_b_dd_aips_dpm() // b118 f1f8 } } -void m68000_device::eor_b_dd_pais_dpm() // b120 f1f8 +void m68000_mcu_device::eor_b_dd_pais_dpm() // b120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -173688,7 +173688,7 @@ void m68000_device::eor_b_dd_pais_dpm() // b120 f1f8 } } -void m68000_device::eor_b_dd_das_dpm() // b128 f1f8 +void m68000_mcu_device::eor_b_dd_das_dpm() // b128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -173802,7 +173802,7 @@ void m68000_device::eor_b_dd_das_dpm() // b128 f1f8 } } -void m68000_device::eor_b_dd_dais_dpm() // b130 f1f8 +void m68000_mcu_device::eor_b_dd_dais_dpm() // b130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -173959,7 +173959,7 @@ adsw2: } } -void m68000_device::eor_b_dd_adr16_dpm() // b138 f1ff +void m68000_mcu_device::eor_b_dd_adr16_dpm() // b138 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -174072,7 +174072,7 @@ void m68000_device::eor_b_dd_adr16_dpm() // b138 f1ff } } -void m68000_device::eor_b_dd_adr32_dpm() // b139 f1ff +void m68000_mcu_device::eor_b_dd_adr32_dpm() // b139 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -174210,7 +174210,7 @@ void m68000_device::eor_b_dd_adr32_dpm() // b139 f1ff } } -void m68000_device::eor_w_dd_ds_dpm() // b140 f1f8 +void m68000_mcu_device::eor_w_dd_ds_dpm() // b140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -174259,7 +174259,7 @@ void m68000_device::eor_w_dd_ds_dpm() // b140 f1f8 } } -void m68000_device::cmpm_w_aips_aipd_dpm() // b148 f1f8 +void m68000_mcu_device::cmpm_w_aips_aipd_dpm() // b148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -174358,7 +174358,7 @@ void m68000_device::cmpm_w_aips_aipd_dpm() // b148 f1f8 } } -void m68000_device::eor_w_dd_ais_dpm() // b150 f1f8 +void m68000_mcu_device::eor_w_dd_ais_dpm() // b150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -174456,7 +174456,7 @@ void m68000_device::eor_w_dd_ais_dpm() // b150 f1f8 } } -void m68000_device::eor_w_dd_aips_dpm() // b158 f1f8 +void m68000_mcu_device::eor_w_dd_aips_dpm() // b158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -174559,7 +174559,7 @@ void m68000_device::eor_w_dd_aips_dpm() // b158 f1f8 } } -void m68000_device::eor_w_dd_pais_dpm() // b160 f1f8 +void m68000_mcu_device::eor_w_dd_pais_dpm() // b160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -174664,7 +174664,7 @@ void m68000_device::eor_w_dd_pais_dpm() // b160 f1f8 } } -void m68000_device::eor_w_dd_das_dpm() // b168 f1f8 +void m68000_mcu_device::eor_w_dd_das_dpm() // b168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -174788,7 +174788,7 @@ void m68000_device::eor_w_dd_das_dpm() // b168 f1f8 } } -void m68000_device::eor_w_dd_dais_dpm() // b170 f1f8 +void m68000_mcu_device::eor_w_dd_dais_dpm() // b170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -174955,7 +174955,7 @@ adsw2: } } -void m68000_device::eor_w_dd_adr16_dpm() // b178 f1ff +void m68000_mcu_device::eor_w_dd_adr16_dpm() // b178 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -175078,7 +175078,7 @@ void m68000_device::eor_w_dd_adr16_dpm() // b178 f1ff } } -void m68000_device::eor_w_dd_adr32_dpm() // b179 f1ff +void m68000_mcu_device::eor_w_dd_adr32_dpm() // b179 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -175226,7 +175226,7 @@ void m68000_device::eor_w_dd_adr32_dpm() // b179 f1ff } } -void m68000_device::eor_l_dd_ds_dpm() // b180 f1f8 +void m68000_mcu_device::eor_l_dd_ds_dpm() // b180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -175284,7 +175284,7 @@ void m68000_device::eor_l_dd_ds_dpm() // b180 f1f8 } } -void m68000_device::cmpm_l_aips_aipd_dpm() // b188 f1f8 +void m68000_mcu_device::cmpm_l_aips_aipd_dpm() // b188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -175435,7 +175435,7 @@ void m68000_device::cmpm_l_aips_aipd_dpm() // b188 f1f8 } } -void m68000_device::eor_l_dd_ais_dpm() // b190 f1f8 +void m68000_mcu_device::eor_l_dd_ais_dpm() // b190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -175583,7 +175583,7 @@ void m68000_device::eor_l_dd_ais_dpm() // b190 f1f8 } } -void m68000_device::eor_l_dd_aips_dpm() // b198 f1f8 +void m68000_mcu_device::eor_l_dd_aips_dpm() // b198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -175735,7 +175735,7 @@ void m68000_device::eor_l_dd_aips_dpm() // b198 f1f8 } } -void m68000_device::eor_l_dd_pais_dpm() // b1a0 f1f8 +void m68000_mcu_device::eor_l_dd_pais_dpm() // b1a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -175888,7 +175888,7 @@ void m68000_device::eor_l_dd_pais_dpm() // b1a0 f1f8 } } -void m68000_device::eor_l_dd_das_dpm() // b1a8 f1f8 +void m68000_mcu_device::eor_l_dd_das_dpm() // b1a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -176061,7 +176061,7 @@ void m68000_device::eor_l_dd_das_dpm() // b1a8 f1f8 } } -void m68000_device::eor_l_dd_dais_dpm() // b1b0 f1f8 +void m68000_mcu_device::eor_l_dd_dais_dpm() // b1b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -176277,7 +176277,7 @@ adsl2: } } -void m68000_device::eor_l_dd_adr16_dpm() // b1b8 f1ff +void m68000_mcu_device::eor_l_dd_adr16_dpm() // b1b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -176453,7 +176453,7 @@ void m68000_device::eor_l_dd_adr16_dpm() // b1b8 f1ff } } -void m68000_device::eor_l_dd_adr32_dpm() // b1b9 f1ff +void m68000_mcu_device::eor_l_dd_adr32_dpm() // b1b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -176654,7 +176654,7 @@ void m68000_device::eor_l_dd_adr32_dpm() // b1b9 f1ff } } -void m68000_device::cmpa_l_ds_ad_dpm() // b1c0 f1f8 +void m68000_mcu_device::cmpa_l_ds_ad_dpm() // b1c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -176707,7 +176707,7 @@ void m68000_device::cmpa_l_ds_ad_dpm() // b1c0 f1f8 } } -void m68000_device::cmpa_l_as_ad_dpm() // b1c8 f1f8 +void m68000_mcu_device::cmpa_l_as_ad_dpm() // b1c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -176760,7 +176760,7 @@ void m68000_device::cmpa_l_as_ad_dpm() // b1c8 f1f8 } } -void m68000_device::cmpa_l_ais_ad_dpm() // b1d0 f1f8 +void m68000_mcu_device::cmpa_l_ais_ad_dpm() // b1d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -176864,7 +176864,7 @@ void m68000_device::cmpa_l_ais_ad_dpm() // b1d0 f1f8 } } -void m68000_device::cmpa_l_aips_ad_dpm() // b1d8 f1f8 +void m68000_mcu_device::cmpa_l_aips_ad_dpm() // b1d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -176971,7 +176971,7 @@ void m68000_device::cmpa_l_aips_ad_dpm() // b1d8 f1f8 } } -void m68000_device::cmpa_l_pais_ad_dpm() // b1e0 f1f8 +void m68000_mcu_device::cmpa_l_pais_ad_dpm() // b1e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -177079,7 +177079,7 @@ void m68000_device::cmpa_l_pais_ad_dpm() // b1e0 f1f8 } } -void m68000_device::cmpa_l_das_ad_dpm() // b1e8 f1f8 +void m68000_mcu_device::cmpa_l_das_ad_dpm() // b1e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -177207,7 +177207,7 @@ void m68000_device::cmpa_l_das_ad_dpm() // b1e8 f1f8 } } -void m68000_device::cmpa_l_dais_ad_dpm() // b1f0 f1f8 +void m68000_mcu_device::cmpa_l_dais_ad_dpm() // b1f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -177376,7 +177376,7 @@ adsl2: } } -void m68000_device::cmpa_l_adr16_ad_dpm() // b1f8 f1ff +void m68000_mcu_device::cmpa_l_adr16_ad_dpm() // b1f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -177506,7 +177506,7 @@ void m68000_device::cmpa_l_adr16_ad_dpm() // b1f8 f1ff } } -void m68000_device::cmpa_l_adr32_ad_dpm() // b1f9 f1ff +void m68000_mcu_device::cmpa_l_adr32_ad_dpm() // b1f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -177660,7 +177660,7 @@ void m68000_device::cmpa_l_adr32_ad_dpm() // b1f9 f1ff } } -void m68000_device::cmpa_l_dpc_ad_dpm() // b1fa f1ff +void m68000_mcu_device::cmpa_l_dpc_ad_dpm() // b1fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -177787,7 +177787,7 @@ void m68000_device::cmpa_l_dpc_ad_dpm() // b1fa f1ff } } -void m68000_device::cmpa_l_dpci_ad_dpm() // b1fb f1ff +void m68000_mcu_device::cmpa_l_dpci_ad_dpm() // b1fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -177955,7 +177955,7 @@ adsl2: } } -void m68000_device::cmpa_l_imm32_ad_dpm() // b1fc f1ff +void m68000_mcu_device::cmpa_l_imm32_ad_dpm() // b1fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -178058,7 +178058,7 @@ void m68000_device::cmpa_l_imm32_ad_dpm() // b1fc f1ff } } -void m68000_device::and_b_ds_dd_dpm() // c000 f1f8 +void m68000_mcu_device::and_b_ds_dd_dpm() // c000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -178108,7 +178108,7 @@ void m68000_device::and_b_ds_dd_dpm() // c000 f1f8 } } -void m68000_device::and_b_ais_dd_dpm() // c010 f1f8 +void m68000_mcu_device::and_b_ais_dd_dpm() // c010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178182,7 +178182,7 @@ void m68000_device::and_b_ais_dd_dpm() // c010 f1f8 } } -void m68000_device::and_b_aips_dd_dpm() // c018 f1f8 +void m68000_mcu_device::and_b_aips_dd_dpm() // c018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178261,7 +178261,7 @@ void m68000_device::and_b_aips_dd_dpm() // c018 f1f8 } } -void m68000_device::and_b_pais_dd_dpm() // c020 f1f8 +void m68000_mcu_device::and_b_pais_dd_dpm() // c020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178342,7 +178342,7 @@ void m68000_device::and_b_pais_dd_dpm() // c020 f1f8 } } -void m68000_device::and_b_das_dd_dpm() // c028 f1f8 +void m68000_mcu_device::and_b_das_dd_dpm() // c028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178442,7 +178442,7 @@ void m68000_device::and_b_das_dd_dpm() // c028 f1f8 } } -void m68000_device::and_b_dais_dd_dpm() // c030 f1f8 +void m68000_mcu_device::and_b_dais_dd_dpm() // c030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178585,7 +178585,7 @@ adsw2: } } -void m68000_device::and_b_adr16_dd_dpm() // c038 f1ff +void m68000_mcu_device::and_b_adr16_dd_dpm() // c038 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -178684,7 +178684,7 @@ void m68000_device::and_b_adr16_dd_dpm() // c038 f1ff } } -void m68000_device::and_b_adr32_dd_dpm() // c039 f1ff +void m68000_mcu_device::and_b_adr32_dd_dpm() // c039 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -178808,7 +178808,7 @@ void m68000_device::and_b_adr32_dd_dpm() // c039 f1ff } } -void m68000_device::and_b_dpc_dd_dpm() // c03a f1ff +void m68000_mcu_device::and_b_dpc_dd_dpm() // c03a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -178907,7 +178907,7 @@ void m68000_device::and_b_dpc_dd_dpm() // c03a f1ff } } -void m68000_device::and_b_dpci_dd_dpm() // c03b f1ff +void m68000_mcu_device::and_b_dpci_dd_dpm() // c03b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -179049,7 +179049,7 @@ adsw2: } } -void m68000_device::and_b_imm8_dd_dpm() // c03c f1ff +void m68000_mcu_device::and_b_imm8_dd_dpm() // c03c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -179126,7 +179126,7 @@ void m68000_device::and_b_imm8_dd_dpm() // c03c f1ff } } -void m68000_device::and_w_ds_dd_dpm() // c040 f1f8 +void m68000_mcu_device::and_w_ds_dd_dpm() // c040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -179176,7 +179176,7 @@ void m68000_device::and_w_ds_dd_dpm() // c040 f1f8 } } -void m68000_device::and_w_ais_dd_dpm() // c050 f1f8 +void m68000_mcu_device::and_w_ais_dd_dpm() // c050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179254,7 +179254,7 @@ void m68000_device::and_w_ais_dd_dpm() // c050 f1f8 } } -void m68000_device::and_w_aips_dd_dpm() // c058 f1f8 +void m68000_mcu_device::and_w_aips_dd_dpm() // c058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179337,7 +179337,7 @@ void m68000_device::and_w_aips_dd_dpm() // c058 f1f8 } } -void m68000_device::and_w_pais_dd_dpm() // c060 f1f8 +void m68000_mcu_device::and_w_pais_dd_dpm() // c060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179422,7 +179422,7 @@ void m68000_device::and_w_pais_dd_dpm() // c060 f1f8 } } -void m68000_device::and_w_das_dd_dpm() // c068 f1f8 +void m68000_mcu_device::and_w_das_dd_dpm() // c068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179526,7 +179526,7 @@ void m68000_device::and_w_das_dd_dpm() // c068 f1f8 } } -void m68000_device::and_w_dais_dd_dpm() // c070 f1f8 +void m68000_mcu_device::and_w_dais_dd_dpm() // c070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179673,7 +179673,7 @@ adsw2: } } -void m68000_device::and_w_adr16_dd_dpm() // c078 f1ff +void m68000_mcu_device::and_w_adr16_dd_dpm() // c078 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -179776,7 +179776,7 @@ void m68000_device::and_w_adr16_dd_dpm() // c078 f1ff } } -void m68000_device::and_w_adr32_dd_dpm() // c079 f1ff +void m68000_mcu_device::and_w_adr32_dd_dpm() // c079 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -179904,7 +179904,7 @@ void m68000_device::and_w_adr32_dd_dpm() // c079 f1ff } } -void m68000_device::and_w_dpc_dd_dpm() // c07a f1ff +void m68000_mcu_device::and_w_dpc_dd_dpm() // c07a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -180007,7 +180007,7 @@ void m68000_device::and_w_dpc_dd_dpm() // c07a f1ff } } -void m68000_device::and_w_dpci_dd_dpm() // c07b f1ff +void m68000_mcu_device::and_w_dpci_dd_dpm() // c07b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -180153,7 +180153,7 @@ adsw2: } } -void m68000_device::and_w_imm16_dd_dpm() // c07c f1ff +void m68000_mcu_device::and_w_imm16_dd_dpm() // c07c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -180230,7 +180230,7 @@ void m68000_device::and_w_imm16_dd_dpm() // c07c f1ff } } -void m68000_device::and_l_ds_dd_dpm() // c080 f1f8 +void m68000_mcu_device::and_l_ds_dd_dpm() // c080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -180289,7 +180289,7 @@ void m68000_device::and_l_ds_dd_dpm() // c080 f1f8 } } -void m68000_device::and_l_ais_dd_dpm() // c090 f1f8 +void m68000_mcu_device::and_l_ais_dd_dpm() // c090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180397,7 +180397,7 @@ void m68000_device::and_l_ais_dd_dpm() // c090 f1f8 } } -void m68000_device::and_l_aips_dd_dpm() // c098 f1f8 +void m68000_mcu_device::and_l_aips_dd_dpm() // c098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180509,7 +180509,7 @@ void m68000_device::and_l_aips_dd_dpm() // c098 f1f8 } } -void m68000_device::and_l_pais_dd_dpm() // c0a0 f1f8 +void m68000_mcu_device::and_l_pais_dd_dpm() // c0a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180622,7 +180622,7 @@ void m68000_device::and_l_pais_dd_dpm() // c0a0 f1f8 } } -void m68000_device::and_l_das_dd_dpm() // c0a8 f1f8 +void m68000_mcu_device::and_l_das_dd_dpm() // c0a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180755,7 +180755,7 @@ void m68000_device::and_l_das_dd_dpm() // c0a8 f1f8 } } -void m68000_device::and_l_dais_dd_dpm() // c0b0 f1f8 +void m68000_mcu_device::and_l_dais_dd_dpm() // c0b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180931,7 +180931,7 @@ adsl2: } } -void m68000_device::and_l_adr16_dd_dpm() // c0b8 f1ff +void m68000_mcu_device::and_l_adr16_dd_dpm() // c0b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -181067,7 +181067,7 @@ void m68000_device::and_l_adr16_dd_dpm() // c0b8 f1ff } } -void m68000_device::and_l_adr32_dd_dpm() // c0b9 f1ff +void m68000_mcu_device::and_l_adr32_dd_dpm() // c0b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -181228,7 +181228,7 @@ void m68000_device::and_l_adr32_dd_dpm() // c0b9 f1ff } } -void m68000_device::and_l_dpc_dd_dpm() // c0ba f1ff +void m68000_mcu_device::and_l_dpc_dd_dpm() // c0ba f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -181360,7 +181360,7 @@ void m68000_device::and_l_dpc_dd_dpm() // c0ba f1ff } } -void m68000_device::and_l_dpci_dd_dpm() // c0bb f1ff +void m68000_mcu_device::and_l_dpci_dd_dpm() // c0bb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -181535,7 +181535,7 @@ adsl2: } } -void m68000_device::and_l_imm32_dd_dpm() // c0bc f1ff +void m68000_mcu_device::and_l_imm32_dd_dpm() // c0bc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -181646,7 +181646,7 @@ void m68000_device::and_l_imm32_dd_dpm() // c0bc f1ff } } -void m68000_device::mulu_w_ds_dd_dpm() // c0c0 f1f8 +void m68000_mcu_device::mulu_w_ds_dd_dpm() // c0c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -181732,7 +181732,7 @@ mulm6: } } -void m68000_device::mulu_w_ais_dd_dpm() // c0d0 f1f8 +void m68000_mcu_device::mulu_w_ais_dd_dpm() // c0d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181845,7 +181845,7 @@ mulm6: } } -void m68000_device::mulu_w_aips_dd_dpm() // c0d8 f1f8 +void m68000_mcu_device::mulu_w_aips_dd_dpm() // c0d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181962,7 +181962,7 @@ mulm6: } } -void m68000_device::mulu_w_pais_dd_dpm() // c0e0 f1f8 +void m68000_mcu_device::mulu_w_pais_dd_dpm() // c0e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182081,7 +182081,7 @@ mulm6: } } -void m68000_device::mulu_w_das_dd_dpm() // c0e8 f1f8 +void m68000_mcu_device::mulu_w_das_dd_dpm() // c0e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182219,7 +182219,7 @@ mulm6: } } -void m68000_device::mulu_w_dais_dd_dpm() // c0f0 f1f8 +void m68000_mcu_device::mulu_w_dais_dd_dpm() // c0f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182398,7 +182398,7 @@ mulm6: } } -void m68000_device::mulu_w_adr16_dd_dpm() // c0f8 f1ff +void m68000_mcu_device::mulu_w_adr16_dd_dpm() // c0f8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -182535,7 +182535,7 @@ mulm6: } } -void m68000_device::mulu_w_adr32_dd_dpm() // c0f9 f1ff +void m68000_mcu_device::mulu_w_adr32_dd_dpm() // c0f9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -182696,7 +182696,7 @@ mulm6: } } -void m68000_device::mulu_w_dpc_dd_dpm() // c0fa f1ff +void m68000_mcu_device::mulu_w_dpc_dd_dpm() // c0fa f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -182833,7 +182833,7 @@ mulm6: } } -void m68000_device::mulu_w_dpci_dd_dpm() // c0fb f1ff +void m68000_mcu_device::mulu_w_dpci_dd_dpm() // c0fb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -183011,7 +183011,7 @@ mulm6: } } -void m68000_device::mulu_w_imm16_dd_dpm() // c0fc f1ff +void m68000_mcu_device::mulu_w_imm16_dd_dpm() // c0fc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -183123,7 +183123,7 @@ mulm6: } } -void m68000_device::abcd_ds_dd_dpm() // c100 f1f8 +void m68000_mcu_device::abcd_ds_dd_dpm() // c100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -183176,7 +183176,7 @@ void m68000_device::abcd_ds_dd_dpm() // c100 f1f8 } } -void m68000_device::abcd_pais_paid_dpm() // c108 f1f8 +void m68000_mcu_device::abcd_pais_paid_dpm() // c108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -183290,7 +183290,7 @@ void m68000_device::abcd_pais_paid_dpm() // c108 f1f8 } } -void m68000_device::and_b_dd_ais_dpm() // c110 f1f8 +void m68000_mcu_device::and_b_dd_ais_dpm() // c110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183378,7 +183378,7 @@ void m68000_device::and_b_dd_ais_dpm() // c110 f1f8 } } -void m68000_device::and_b_dd_aips_dpm() // c118 f1f8 +void m68000_mcu_device::and_b_dd_aips_dpm() // c118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183471,7 +183471,7 @@ void m68000_device::and_b_dd_aips_dpm() // c118 f1f8 } } -void m68000_device::and_b_dd_pais_dpm() // c120 f1f8 +void m68000_mcu_device::and_b_dd_pais_dpm() // c120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183566,7 +183566,7 @@ void m68000_device::and_b_dd_pais_dpm() // c120 f1f8 } } -void m68000_device::and_b_dd_das_dpm() // c128 f1f8 +void m68000_mcu_device::and_b_dd_das_dpm() // c128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183680,7 +183680,7 @@ void m68000_device::and_b_dd_das_dpm() // c128 f1f8 } } -void m68000_device::and_b_dd_dais_dpm() // c130 f1f8 +void m68000_mcu_device::and_b_dd_dais_dpm() // c130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183837,7 +183837,7 @@ adsw2: } } -void m68000_device::and_b_dd_adr16_dpm() // c138 f1ff +void m68000_mcu_device::and_b_dd_adr16_dpm() // c138 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -183950,7 +183950,7 @@ void m68000_device::and_b_dd_adr16_dpm() // c138 f1ff } } -void m68000_device::and_b_dd_adr32_dpm() // c139 f1ff +void m68000_mcu_device::and_b_dd_adr32_dpm() // c139 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -184088,7 +184088,7 @@ void m68000_device::and_b_dd_adr32_dpm() // c139 f1ff } } -void m68000_device::exg_dd_ds_dpm() // c140 f1f8 +void m68000_mcu_device::exg_dd_ds_dpm() // c140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -184139,7 +184139,7 @@ void m68000_device::exg_dd_ds_dpm() // c140 f1f8 } } -void m68000_device::exg_ad_as_dpm() // c148 f1f8 +void m68000_mcu_device::exg_ad_as_dpm() // c148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -184190,7 +184190,7 @@ void m68000_device::exg_ad_as_dpm() // c148 f1f8 } } -void m68000_device::and_w_dd_ais_dpm() // c150 f1f8 +void m68000_mcu_device::and_w_dd_ais_dpm() // c150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -184288,7 +184288,7 @@ void m68000_device::and_w_dd_ais_dpm() // c150 f1f8 } } -void m68000_device::and_w_dd_aips_dpm() // c158 f1f8 +void m68000_mcu_device::and_w_dd_aips_dpm() // c158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -184391,7 +184391,7 @@ void m68000_device::and_w_dd_aips_dpm() // c158 f1f8 } } -void m68000_device::and_w_dd_pais_dpm() // c160 f1f8 +void m68000_mcu_device::and_w_dd_pais_dpm() // c160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -184496,7 +184496,7 @@ void m68000_device::and_w_dd_pais_dpm() // c160 f1f8 } } -void m68000_device::and_w_dd_das_dpm() // c168 f1f8 +void m68000_mcu_device::and_w_dd_das_dpm() // c168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -184620,7 +184620,7 @@ void m68000_device::and_w_dd_das_dpm() // c168 f1f8 } } -void m68000_device::and_w_dd_dais_dpm() // c170 f1f8 +void m68000_mcu_device::and_w_dd_dais_dpm() // c170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -184787,7 +184787,7 @@ adsw2: } } -void m68000_device::and_w_dd_adr16_dpm() // c178 f1ff +void m68000_mcu_device::and_w_dd_adr16_dpm() // c178 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -184910,7 +184910,7 @@ void m68000_device::and_w_dd_adr16_dpm() // c178 f1ff } } -void m68000_device::and_w_dd_adr32_dpm() // c179 f1ff +void m68000_mcu_device::and_w_dd_adr32_dpm() // c179 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -185058,7 +185058,7 @@ void m68000_device::and_w_dd_adr32_dpm() // c179 f1ff } } -void m68000_device::exg_dd_as_dpm() // c188 f1f8 +void m68000_mcu_device::exg_dd_as_dpm() // c188 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -185109,7 +185109,7 @@ void m68000_device::exg_dd_as_dpm() // c188 f1f8 } } -void m68000_device::and_l_dd_ais_dpm() // c190 f1f8 +void m68000_mcu_device::and_l_dd_ais_dpm() // c190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -185257,7 +185257,7 @@ void m68000_device::and_l_dd_ais_dpm() // c190 f1f8 } } -void m68000_device::and_l_dd_aips_dpm() // c198 f1f8 +void m68000_mcu_device::and_l_dd_aips_dpm() // c198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -185409,7 +185409,7 @@ void m68000_device::and_l_dd_aips_dpm() // c198 f1f8 } } -void m68000_device::and_l_dd_pais_dpm() // c1a0 f1f8 +void m68000_mcu_device::and_l_dd_pais_dpm() // c1a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -185562,7 +185562,7 @@ void m68000_device::and_l_dd_pais_dpm() // c1a0 f1f8 } } -void m68000_device::and_l_dd_das_dpm() // c1a8 f1f8 +void m68000_mcu_device::and_l_dd_das_dpm() // c1a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -185735,7 +185735,7 @@ void m68000_device::and_l_dd_das_dpm() // c1a8 f1f8 } } -void m68000_device::and_l_dd_dais_dpm() // c1b0 f1f8 +void m68000_mcu_device::and_l_dd_dais_dpm() // c1b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -185951,7 +185951,7 @@ adsl2: } } -void m68000_device::and_l_dd_adr16_dpm() // c1b8 f1ff +void m68000_mcu_device::and_l_dd_adr16_dpm() // c1b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -186127,7 +186127,7 @@ void m68000_device::and_l_dd_adr16_dpm() // c1b8 f1ff } } -void m68000_device::and_l_dd_adr32_dpm() // c1b9 f1ff +void m68000_mcu_device::and_l_dd_adr32_dpm() // c1b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -186328,7 +186328,7 @@ void m68000_device::and_l_dd_adr32_dpm() // c1b9 f1ff } } -void m68000_device::muls_w_ds_dd_dpm() // c1c0 f1f8 +void m68000_mcu_device::muls_w_ds_dd_dpm() // c1c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -186423,7 +186423,7 @@ mulm3: } } -void m68000_device::muls_w_ais_dd_dpm() // c1d0 f1f8 +void m68000_mcu_device::muls_w_ais_dd_dpm() // c1d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -186545,7 +186545,7 @@ mulm3: } } -void m68000_device::muls_w_aips_dd_dpm() // c1d8 f1f8 +void m68000_mcu_device::muls_w_aips_dd_dpm() // c1d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -186671,7 +186671,7 @@ mulm3: } } -void m68000_device::muls_w_pais_dd_dpm() // c1e0 f1f8 +void m68000_mcu_device::muls_w_pais_dd_dpm() // c1e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -186799,7 +186799,7 @@ mulm3: } } -void m68000_device::muls_w_das_dd_dpm() // c1e8 f1f8 +void m68000_mcu_device::muls_w_das_dd_dpm() // c1e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -186946,7 +186946,7 @@ mulm3: } } -void m68000_device::muls_w_dais_dd_dpm() // c1f0 f1f8 +void m68000_mcu_device::muls_w_dais_dd_dpm() // c1f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -187134,7 +187134,7 @@ mulm3: } } -void m68000_device::muls_w_adr16_dd_dpm() // c1f8 f1ff +void m68000_mcu_device::muls_w_adr16_dd_dpm() // c1f8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -187280,7 +187280,7 @@ mulm3: } } -void m68000_device::muls_w_adr32_dd_dpm() // c1f9 f1ff +void m68000_mcu_device::muls_w_adr32_dd_dpm() // c1f9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -187450,7 +187450,7 @@ mulm3: } } -void m68000_device::muls_w_dpc_dd_dpm() // c1fa f1ff +void m68000_mcu_device::muls_w_dpc_dd_dpm() // c1fa f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -187596,7 +187596,7 @@ mulm3: } } -void m68000_device::muls_w_dpci_dd_dpm() // c1fb f1ff +void m68000_mcu_device::muls_w_dpci_dd_dpm() // c1fb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -187783,7 +187783,7 @@ mulm3: } } -void m68000_device::muls_w_imm16_dd_dpm() // c1fc f1ff +void m68000_mcu_device::muls_w_imm16_dd_dpm() // c1fc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -187904,7 +187904,7 @@ mulm3: } } -void m68000_device::add_b_ds_dd_dpm() // d000 f1f8 +void m68000_mcu_device::add_b_ds_dd_dpm() // d000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -187953,7 +187953,7 @@ void m68000_device::add_b_ds_dd_dpm() // d000 f1f8 } } -void m68000_device::add_b_ais_dd_dpm() // d010 f1f8 +void m68000_mcu_device::add_b_ais_dd_dpm() // d010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -188025,7 +188025,7 @@ void m68000_device::add_b_ais_dd_dpm() // d010 f1f8 } } -void m68000_device::add_b_aips_dd_dpm() // d018 f1f8 +void m68000_mcu_device::add_b_aips_dd_dpm() // d018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -188101,7 +188101,7 @@ void m68000_device::add_b_aips_dd_dpm() // d018 f1f8 } } -void m68000_device::add_b_pais_dd_dpm() // d020 f1f8 +void m68000_mcu_device::add_b_pais_dd_dpm() // d020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -188179,7 +188179,7 @@ void m68000_device::add_b_pais_dd_dpm() // d020 f1f8 } } -void m68000_device::add_b_das_dd_dpm() // d028 f1f8 +void m68000_mcu_device::add_b_das_dd_dpm() // d028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -188276,7 +188276,7 @@ void m68000_device::add_b_das_dd_dpm() // d028 f1f8 } } -void m68000_device::add_b_dais_dd_dpm() // d030 f1f8 +void m68000_mcu_device::add_b_dais_dd_dpm() // d030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -188414,7 +188414,7 @@ adsw2: } } -void m68000_device::add_b_adr16_dd_dpm() // d038 f1ff +void m68000_mcu_device::add_b_adr16_dd_dpm() // d038 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -188510,7 +188510,7 @@ void m68000_device::add_b_adr16_dd_dpm() // d038 f1ff } } -void m68000_device::add_b_adr32_dd_dpm() // d039 f1ff +void m68000_mcu_device::add_b_adr32_dd_dpm() // d039 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -188630,7 +188630,7 @@ void m68000_device::add_b_adr32_dd_dpm() // d039 f1ff } } -void m68000_device::add_b_dpc_dd_dpm() // d03a f1ff +void m68000_mcu_device::add_b_dpc_dd_dpm() // d03a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -188726,7 +188726,7 @@ void m68000_device::add_b_dpc_dd_dpm() // d03a f1ff } } -void m68000_device::add_b_dpci_dd_dpm() // d03b f1ff +void m68000_mcu_device::add_b_dpci_dd_dpm() // d03b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -188863,7 +188863,7 @@ adsw2: } } -void m68000_device::add_b_imm8_dd_dpm() // d03c f1ff +void m68000_mcu_device::add_b_imm8_dd_dpm() // d03c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -188938,7 +188938,7 @@ void m68000_device::add_b_imm8_dd_dpm() // d03c f1ff } } -void m68000_device::add_w_ds_dd_dpm() // d040 f1f8 +void m68000_mcu_device::add_w_ds_dd_dpm() // d040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -188987,7 +188987,7 @@ void m68000_device::add_w_ds_dd_dpm() // d040 f1f8 } } -void m68000_device::add_w_as_dd_dpm() // d048 f1f8 +void m68000_mcu_device::add_w_as_dd_dpm() // d048 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -189036,7 +189036,7 @@ void m68000_device::add_w_as_dd_dpm() // d048 f1f8 } } -void m68000_device::add_w_ais_dd_dpm() // d050 f1f8 +void m68000_mcu_device::add_w_ais_dd_dpm() // d050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -189112,7 +189112,7 @@ void m68000_device::add_w_ais_dd_dpm() // d050 f1f8 } } -void m68000_device::add_w_aips_dd_dpm() // d058 f1f8 +void m68000_mcu_device::add_w_aips_dd_dpm() // d058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -189192,7 +189192,7 @@ void m68000_device::add_w_aips_dd_dpm() // d058 f1f8 } } -void m68000_device::add_w_pais_dd_dpm() // d060 f1f8 +void m68000_mcu_device::add_w_pais_dd_dpm() // d060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -189274,7 +189274,7 @@ void m68000_device::add_w_pais_dd_dpm() // d060 f1f8 } } -void m68000_device::add_w_das_dd_dpm() // d068 f1f8 +void m68000_mcu_device::add_w_das_dd_dpm() // d068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -189375,7 +189375,7 @@ void m68000_device::add_w_das_dd_dpm() // d068 f1f8 } } -void m68000_device::add_w_dais_dd_dpm() // d070 f1f8 +void m68000_mcu_device::add_w_dais_dd_dpm() // d070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -189517,7 +189517,7 @@ adsw2: } } -void m68000_device::add_w_adr16_dd_dpm() // d078 f1ff +void m68000_mcu_device::add_w_adr16_dd_dpm() // d078 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -189617,7 +189617,7 @@ void m68000_device::add_w_adr16_dd_dpm() // d078 f1ff } } -void m68000_device::add_w_adr32_dd_dpm() // d079 f1ff +void m68000_mcu_device::add_w_adr32_dd_dpm() // d079 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -189741,7 +189741,7 @@ void m68000_device::add_w_adr32_dd_dpm() // d079 f1ff } } -void m68000_device::add_w_dpc_dd_dpm() // d07a f1ff +void m68000_mcu_device::add_w_dpc_dd_dpm() // d07a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -189841,7 +189841,7 @@ void m68000_device::add_w_dpc_dd_dpm() // d07a f1ff } } -void m68000_device::add_w_dpci_dd_dpm() // d07b f1ff +void m68000_mcu_device::add_w_dpci_dd_dpm() // d07b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -189982,7 +189982,7 @@ adsw2: } } -void m68000_device::add_w_imm16_dd_dpm() // d07c f1ff +void m68000_mcu_device::add_w_imm16_dd_dpm() // d07c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -190057,7 +190057,7 @@ void m68000_device::add_w_imm16_dd_dpm() // d07c f1ff } } -void m68000_device::add_l_ds_dd_dpm() // d080 f1f8 +void m68000_mcu_device::add_l_ds_dd_dpm() // d080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -190114,7 +190114,7 @@ void m68000_device::add_l_ds_dd_dpm() // d080 f1f8 } } -void m68000_device::add_l_as_dd_dpm() // d088 f1f8 +void m68000_mcu_device::add_l_as_dd_dpm() // d088 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -190171,7 +190171,7 @@ void m68000_device::add_l_as_dd_dpm() // d088 f1f8 } } -void m68000_device::add_l_ais_dd_dpm() // d090 f1f8 +void m68000_mcu_device::add_l_ais_dd_dpm() // d090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -190277,7 +190277,7 @@ void m68000_device::add_l_ais_dd_dpm() // d090 f1f8 } } -void m68000_device::add_l_aips_dd_dpm() // d098 f1f8 +void m68000_mcu_device::add_l_aips_dd_dpm() // d098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -190386,7 +190386,7 @@ void m68000_device::add_l_aips_dd_dpm() // d098 f1f8 } } -void m68000_device::add_l_pais_dd_dpm() // d0a0 f1f8 +void m68000_mcu_device::add_l_pais_dd_dpm() // d0a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -190496,7 +190496,7 @@ void m68000_device::add_l_pais_dd_dpm() // d0a0 f1f8 } } -void m68000_device::add_l_das_dd_dpm() // d0a8 f1f8 +void m68000_mcu_device::add_l_das_dd_dpm() // d0a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -190626,7 +190626,7 @@ void m68000_device::add_l_das_dd_dpm() // d0a8 f1f8 } } -void m68000_device::add_l_dais_dd_dpm() // d0b0 f1f8 +void m68000_mcu_device::add_l_dais_dd_dpm() // d0b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -190797,7 +190797,7 @@ adsl2: } } -void m68000_device::add_l_adr16_dd_dpm() // d0b8 f1ff +void m68000_mcu_device::add_l_adr16_dd_dpm() // d0b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -190929,7 +190929,7 @@ void m68000_device::add_l_adr16_dd_dpm() // d0b8 f1ff } } -void m68000_device::add_l_adr32_dd_dpm() // d0b9 f1ff +void m68000_mcu_device::add_l_adr32_dd_dpm() // d0b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -191085,7 +191085,7 @@ void m68000_device::add_l_adr32_dd_dpm() // d0b9 f1ff } } -void m68000_device::add_l_dpc_dd_dpm() // d0ba f1ff +void m68000_mcu_device::add_l_dpc_dd_dpm() // d0ba f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -191214,7 +191214,7 @@ void m68000_device::add_l_dpc_dd_dpm() // d0ba f1ff } } -void m68000_device::add_l_dpci_dd_dpm() // d0bb f1ff +void m68000_mcu_device::add_l_dpci_dd_dpm() // d0bb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -191384,7 +191384,7 @@ adsl2: } } -void m68000_device::add_l_imm32_dd_dpm() // d0bc f1ff +void m68000_mcu_device::add_l_imm32_dd_dpm() // d0bc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -191491,7 +191491,7 @@ void m68000_device::add_l_imm32_dd_dpm() // d0bc f1ff } } -void m68000_device::adda_w_ds_ad_dpm() // d0c0 f1f8 +void m68000_mcu_device::adda_w_ds_ad_dpm() // d0c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -191546,7 +191546,7 @@ void m68000_device::adda_w_ds_ad_dpm() // d0c0 f1f8 } } -void m68000_device::adda_w_as_ad_dpm() // d0c8 f1f8 +void m68000_mcu_device::adda_w_as_ad_dpm() // d0c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -191601,7 +191601,7 @@ void m68000_device::adda_w_as_ad_dpm() // d0c8 f1f8 } } -void m68000_device::adda_w_ais_ad_dpm() // d0d0 f1f8 +void m68000_mcu_device::adda_w_ais_ad_dpm() // d0d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -191683,7 +191683,7 @@ void m68000_device::adda_w_ais_ad_dpm() // d0d0 f1f8 } } -void m68000_device::adda_w_aips_ad_dpm() // d0d8 f1f8 +void m68000_mcu_device::adda_w_aips_ad_dpm() // d0d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -191769,7 +191769,7 @@ void m68000_device::adda_w_aips_ad_dpm() // d0d8 f1f8 } } -void m68000_device::adda_w_pais_ad_dpm() // d0e0 f1f8 +void m68000_mcu_device::adda_w_pais_ad_dpm() // d0e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -191857,7 +191857,7 @@ void m68000_device::adda_w_pais_ad_dpm() // d0e0 f1f8 } } -void m68000_device::adda_w_das_ad_dpm() // d0e8 f1f8 +void m68000_mcu_device::adda_w_das_ad_dpm() // d0e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -191964,7 +191964,7 @@ void m68000_device::adda_w_das_ad_dpm() // d0e8 f1f8 } } -void m68000_device::adda_w_dais_ad_dpm() // d0f0 f1f8 +void m68000_mcu_device::adda_w_dais_ad_dpm() // d0f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -192112,7 +192112,7 @@ adsw2: } } -void m68000_device::adda_w_adr16_ad_dpm() // d0f8 f1ff +void m68000_mcu_device::adda_w_adr16_ad_dpm() // d0f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -192218,7 +192218,7 @@ void m68000_device::adda_w_adr16_ad_dpm() // d0f8 f1ff } } -void m68000_device::adda_w_adr32_ad_dpm() // d0f9 f1ff +void m68000_mcu_device::adda_w_adr32_ad_dpm() // d0f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -192348,7 +192348,7 @@ void m68000_device::adda_w_adr32_ad_dpm() // d0f9 f1ff } } -void m68000_device::adda_w_dpc_ad_dpm() // d0fa f1ff +void m68000_mcu_device::adda_w_dpc_ad_dpm() // d0fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -192454,7 +192454,7 @@ void m68000_device::adda_w_dpc_ad_dpm() // d0fa f1ff } } -void m68000_device::adda_w_dpci_ad_dpm() // d0fb f1ff +void m68000_mcu_device::adda_w_dpci_ad_dpm() // d0fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -192601,7 +192601,7 @@ adsw2: } } -void m68000_device::adda_w_imm16_ad_dpm() // d0fc f1ff +void m68000_mcu_device::adda_w_imm16_ad_dpm() // d0fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -192682,7 +192682,7 @@ void m68000_device::adda_w_imm16_ad_dpm() // d0fc f1ff } } -void m68000_device::addx_b_ds_dd_dpm() // d100 f1f8 +void m68000_mcu_device::addx_b_ds_dd_dpm() // d100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -192732,7 +192732,7 @@ void m68000_device::addx_b_ds_dd_dpm() // d100 f1f8 } } -void m68000_device::addx_b_pais_paid_dpm() // d108 f1f8 +void m68000_mcu_device::addx_b_pais_paid_dpm() // d108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -192848,7 +192848,7 @@ void m68000_device::addx_b_pais_paid_dpm() // d108 f1f8 } } -void m68000_device::add_b_dd_ais_dpm() // d110 f1f8 +void m68000_mcu_device::add_b_dd_ais_dpm() // d110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -192934,7 +192934,7 @@ void m68000_device::add_b_dd_ais_dpm() // d110 f1f8 } } -void m68000_device::add_b_dd_aips_dpm() // d118 f1f8 +void m68000_mcu_device::add_b_dd_aips_dpm() // d118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -193024,7 +193024,7 @@ void m68000_device::add_b_dd_aips_dpm() // d118 f1f8 } } -void m68000_device::add_b_dd_pais_dpm() // d120 f1f8 +void m68000_mcu_device::add_b_dd_pais_dpm() // d120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -193116,7 +193116,7 @@ void m68000_device::add_b_dd_pais_dpm() // d120 f1f8 } } -void m68000_device::add_b_dd_das_dpm() // d128 f1f8 +void m68000_mcu_device::add_b_dd_das_dpm() // d128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -193227,7 +193227,7 @@ void m68000_device::add_b_dd_das_dpm() // d128 f1f8 } } -void m68000_device::add_b_dd_dais_dpm() // d130 f1f8 +void m68000_mcu_device::add_b_dd_dais_dpm() // d130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -193379,7 +193379,7 @@ adsw2: } } -void m68000_device::add_b_dd_adr16_dpm() // d138 f1ff +void m68000_mcu_device::add_b_dd_adr16_dpm() // d138 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -193489,7 +193489,7 @@ void m68000_device::add_b_dd_adr16_dpm() // d138 f1ff } } -void m68000_device::add_b_dd_adr32_dpm() // d139 f1ff +void m68000_mcu_device::add_b_dd_adr32_dpm() // d139 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -193623,7 +193623,7 @@ void m68000_device::add_b_dd_adr32_dpm() // d139 f1ff } } -void m68000_device::addx_w_ds_dd_dpm() // d140 f1f8 +void m68000_mcu_device::addx_w_ds_dd_dpm() // d140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -193673,7 +193673,7 @@ void m68000_device::addx_w_ds_dd_dpm() // d140 f1f8 } } -void m68000_device::addx_w_pais_paid_dpm() // d148 f1f8 +void m68000_mcu_device::addx_w_pais_paid_dpm() // d148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -193803,7 +193803,7 @@ void m68000_device::addx_w_pais_paid_dpm() // d148 f1f8 } } -void m68000_device::add_w_dd_ais_dpm() // d150 f1f8 +void m68000_mcu_device::add_w_dd_ais_dpm() // d150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -193899,7 +193899,7 @@ void m68000_device::add_w_dd_ais_dpm() // d150 f1f8 } } -void m68000_device::add_w_dd_aips_dpm() // d158 f1f8 +void m68000_mcu_device::add_w_dd_aips_dpm() // d158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -193999,7 +193999,7 @@ void m68000_device::add_w_dd_aips_dpm() // d158 f1f8 } } -void m68000_device::add_w_dd_pais_dpm() // d160 f1f8 +void m68000_mcu_device::add_w_dd_pais_dpm() // d160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -194101,7 +194101,7 @@ void m68000_device::add_w_dd_pais_dpm() // d160 f1f8 } } -void m68000_device::add_w_dd_das_dpm() // d168 f1f8 +void m68000_mcu_device::add_w_dd_das_dpm() // d168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -194222,7 +194222,7 @@ void m68000_device::add_w_dd_das_dpm() // d168 f1f8 } } -void m68000_device::add_w_dd_dais_dpm() // d170 f1f8 +void m68000_mcu_device::add_w_dd_dais_dpm() // d170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -194384,7 +194384,7 @@ adsw2: } } -void m68000_device::add_w_dd_adr16_dpm() // d178 f1ff +void m68000_mcu_device::add_w_dd_adr16_dpm() // d178 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -194504,7 +194504,7 @@ void m68000_device::add_w_dd_adr16_dpm() // d178 f1ff } } -void m68000_device::add_w_dd_adr32_dpm() // d179 f1ff +void m68000_mcu_device::add_w_dd_adr32_dpm() // d179 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -194648,7 +194648,7 @@ void m68000_device::add_w_dd_adr32_dpm() // d179 f1ff } } -void m68000_device::addx_l_ds_dd_dpm() // d180 f1f8 +void m68000_mcu_device::addx_l_ds_dd_dpm() // d180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -194707,7 +194707,7 @@ void m68000_device::addx_l_ds_dd_dpm() // d180 f1f8 } } -void m68000_device::addx_l_pais_paid_dpm() // d188 f1f8 +void m68000_mcu_device::addx_l_pais_paid_dpm() // d188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -194913,7 +194913,7 @@ void m68000_device::addx_l_pais_paid_dpm() // d188 f1f8 } } -void m68000_device::add_l_dd_ais_dpm() // d190 f1f8 +void m68000_mcu_device::add_l_dd_ais_dpm() // d190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -195059,7 +195059,7 @@ void m68000_device::add_l_dd_ais_dpm() // d190 f1f8 } } -void m68000_device::add_l_dd_aips_dpm() // d198 f1f8 +void m68000_mcu_device::add_l_dd_aips_dpm() // d198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -195208,7 +195208,7 @@ void m68000_device::add_l_dd_aips_dpm() // d198 f1f8 } } -void m68000_device::add_l_dd_pais_dpm() // d1a0 f1f8 +void m68000_mcu_device::add_l_dd_pais_dpm() // d1a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -195358,7 +195358,7 @@ void m68000_device::add_l_dd_pais_dpm() // d1a0 f1f8 } } -void m68000_device::add_l_dd_das_dpm() // d1a8 f1f8 +void m68000_mcu_device::add_l_dd_das_dpm() // d1a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -195528,7 +195528,7 @@ void m68000_device::add_l_dd_das_dpm() // d1a8 f1f8 } } -void m68000_device::add_l_dd_dais_dpm() // d1b0 f1f8 +void m68000_mcu_device::add_l_dd_dais_dpm() // d1b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -195739,7 +195739,7 @@ adsl2: } } -void m68000_device::add_l_dd_adr16_dpm() // d1b8 f1ff +void m68000_mcu_device::add_l_dd_adr16_dpm() // d1b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -195911,7 +195911,7 @@ void m68000_device::add_l_dd_adr16_dpm() // d1b8 f1ff } } -void m68000_device::add_l_dd_adr32_dpm() // d1b9 f1ff +void m68000_mcu_device::add_l_dd_adr32_dpm() // d1b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -196107,7 +196107,7 @@ void m68000_device::add_l_dd_adr32_dpm() // d1b9 f1ff } } -void m68000_device::adda_l_ds_ad_dpm() // d1c0 f1f8 +void m68000_mcu_device::adda_l_ds_ad_dpm() // d1c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -196162,7 +196162,7 @@ void m68000_device::adda_l_ds_ad_dpm() // d1c0 f1f8 } } -void m68000_device::adda_l_as_ad_dpm() // d1c8 f1f8 +void m68000_mcu_device::adda_l_as_ad_dpm() // d1c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -196217,7 +196217,7 @@ void m68000_device::adda_l_as_ad_dpm() // d1c8 f1f8 } } -void m68000_device::adda_l_ais_ad_dpm() // d1d0 f1f8 +void m68000_mcu_device::adda_l_ais_ad_dpm() // d1d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -196321,7 +196321,7 @@ void m68000_device::adda_l_ais_ad_dpm() // d1d0 f1f8 } } -void m68000_device::adda_l_aips_ad_dpm() // d1d8 f1f8 +void m68000_mcu_device::adda_l_aips_ad_dpm() // d1d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -196428,7 +196428,7 @@ void m68000_device::adda_l_aips_ad_dpm() // d1d8 f1f8 } } -void m68000_device::adda_l_pais_ad_dpm() // d1e0 f1f8 +void m68000_mcu_device::adda_l_pais_ad_dpm() // d1e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -196536,7 +196536,7 @@ void m68000_device::adda_l_pais_ad_dpm() // d1e0 f1f8 } } -void m68000_device::adda_l_das_ad_dpm() // d1e8 f1f8 +void m68000_mcu_device::adda_l_das_ad_dpm() // d1e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -196664,7 +196664,7 @@ void m68000_device::adda_l_das_ad_dpm() // d1e8 f1f8 } } -void m68000_device::adda_l_dais_ad_dpm() // d1f0 f1f8 +void m68000_mcu_device::adda_l_dais_ad_dpm() // d1f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -196833,7 +196833,7 @@ adsl2: } } -void m68000_device::adda_l_adr16_ad_dpm() // d1f8 f1ff +void m68000_mcu_device::adda_l_adr16_ad_dpm() // d1f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -196963,7 +196963,7 @@ void m68000_device::adda_l_adr16_ad_dpm() // d1f8 f1ff } } -void m68000_device::adda_l_adr32_ad_dpm() // d1f9 f1ff +void m68000_mcu_device::adda_l_adr32_ad_dpm() // d1f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -197117,7 +197117,7 @@ void m68000_device::adda_l_adr32_ad_dpm() // d1f9 f1ff } } -void m68000_device::adda_l_dpc_ad_dpm() // d1fa f1ff +void m68000_mcu_device::adda_l_dpc_ad_dpm() // d1fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -197244,7 +197244,7 @@ void m68000_device::adda_l_dpc_ad_dpm() // d1fa f1ff } } -void m68000_device::adda_l_dpci_ad_dpm() // d1fb f1ff +void m68000_mcu_device::adda_l_dpci_ad_dpm() // d1fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -197412,7 +197412,7 @@ adsl2: } } -void m68000_device::adda_l_imm32_ad_dpm() // d1fc f1ff +void m68000_mcu_device::adda_l_imm32_ad_dpm() // d1fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -197517,7 +197517,7 @@ void m68000_device::adda_l_imm32_ad_dpm() // d1fc f1ff } } -void m68000_device::asr_b_imm3_ds_dpm() // e000 f1f8 +void m68000_mcu_device::asr_b_imm3_ds_dpm() // e000 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -197589,7 +197589,7 @@ nbcr3: } } -void m68000_device::lsr_b_imm3_ds_dpm() // e008 f1f8 +void m68000_mcu_device::lsr_b_imm3_ds_dpm() // e008 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -197661,7 +197661,7 @@ nbcr3: } } -void m68000_device::roxr_b_imm3_ds_dpm() // e010 f1f8 +void m68000_mcu_device::roxr_b_imm3_ds_dpm() // e010 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -197733,7 +197733,7 @@ nbcr3: } } -void m68000_device::ror_b_imm3_ds_dpm() // e018 f1f8 +void m68000_mcu_device::ror_b_imm3_ds_dpm() // e018 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -197805,7 +197805,7 @@ nbcr3: } } -void m68000_device::asr_b_dd_ds_dpm() // e020 f1f8 +void m68000_mcu_device::asr_b_dd_ds_dpm() // e020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -197878,7 +197878,7 @@ nbcr3: } } -void m68000_device::lsr_b_dd_ds_dpm() // e028 f1f8 +void m68000_mcu_device::lsr_b_dd_ds_dpm() // e028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -197951,7 +197951,7 @@ nbcr3: } } -void m68000_device::roxr_b_dd_ds_dpm() // e030 f1f8 +void m68000_mcu_device::roxr_b_dd_ds_dpm() // e030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -198024,7 +198024,7 @@ nbcr3: } } -void m68000_device::ror_b_dd_ds_dpm() // e038 f1f8 +void m68000_mcu_device::ror_b_dd_ds_dpm() // e038 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -198097,7 +198097,7 @@ nbcr3: } } -void m68000_device::asr_w_imm3_ds_dpm() // e040 f1f8 +void m68000_mcu_device::asr_w_imm3_ds_dpm() // e040 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -198169,7 +198169,7 @@ nbcr3: } } -void m68000_device::lsr_w_imm3_ds_dpm() // e048 f1f8 +void m68000_mcu_device::lsr_w_imm3_ds_dpm() // e048 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -198241,7 +198241,7 @@ nbcr3: } } -void m68000_device::roxr_w_imm3_ds_dpm() // e050 f1f8 +void m68000_mcu_device::roxr_w_imm3_ds_dpm() // e050 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -198313,7 +198313,7 @@ nbcr3: } } -void m68000_device::ror_w_imm3_ds_dpm() // e058 f1f8 +void m68000_mcu_device::ror_w_imm3_ds_dpm() // e058 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -198385,7 +198385,7 @@ nbcr3: } } -void m68000_device::asr_w_dd_ds_dpm() // e060 f1f8 +void m68000_mcu_device::asr_w_dd_ds_dpm() // e060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -198458,7 +198458,7 @@ nbcr3: } } -void m68000_device::lsr_w_dd_ds_dpm() // e068 f1f8 +void m68000_mcu_device::lsr_w_dd_ds_dpm() // e068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -198531,7 +198531,7 @@ nbcr3: } } -void m68000_device::roxr_w_dd_ds_dpm() // e070 f1f8 +void m68000_mcu_device::roxr_w_dd_ds_dpm() // e070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -198604,7 +198604,7 @@ nbcr3: } } -void m68000_device::ror_w_dd_ds_dpm() // e078 f1f8 +void m68000_mcu_device::ror_w_dd_ds_dpm() // e078 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -198677,7 +198677,7 @@ nbcr3: } } -void m68000_device::asr_l_imm3_ds_dpm() // e080 f1f8 +void m68000_mcu_device::asr_l_imm3_ds_dpm() // e080 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -198755,7 +198755,7 @@ srrl4: } } -void m68000_device::lsr_l_imm3_ds_dpm() // e088 f1f8 +void m68000_mcu_device::lsr_l_imm3_ds_dpm() // e088 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -198833,7 +198833,7 @@ srrl4: } } -void m68000_device::roxr_l_imm3_ds_dpm() // e090 f1f8 +void m68000_mcu_device::roxr_l_imm3_ds_dpm() // e090 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -198911,7 +198911,7 @@ srrl4: } } -void m68000_device::ror_l_imm3_ds_dpm() // e098 f1f8 +void m68000_mcu_device::ror_l_imm3_ds_dpm() // e098 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -198989,7 +198989,7 @@ srrl4: } } -void m68000_device::asr_l_dd_ds_dpm() // e0a0 f1f8 +void m68000_mcu_device::asr_l_dd_ds_dpm() // e0a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -199068,7 +199068,7 @@ srrl4: } } -void m68000_device::lsr_l_dd_ds_dpm() // e0a8 f1f8 +void m68000_mcu_device::lsr_l_dd_ds_dpm() // e0a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -199147,7 +199147,7 @@ srrl4: } } -void m68000_device::roxr_l_dd_ds_dpm() // e0b0 f1f8 +void m68000_mcu_device::roxr_l_dd_ds_dpm() // e0b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -199226,7 +199226,7 @@ srrl4: } } -void m68000_device::ror_l_dd_ds_dpm() // e0b8 f1f8 +void m68000_mcu_device::ror_l_dd_ds_dpm() // e0b8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -199305,7 +199305,7 @@ srrl4: } } -void m68000_device::asr_ais_dpm() // e0d0 fff8 +void m68000_mcu_device::asr_ais_dpm() // e0d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -199406,7 +199406,7 @@ void m68000_device::asr_ais_dpm() // e0d0 fff8 } } -void m68000_device::asr_aips_dpm() // e0d8 fff8 +void m68000_mcu_device::asr_aips_dpm() // e0d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -199511,7 +199511,7 @@ void m68000_device::asr_aips_dpm() // e0d8 fff8 } } -void m68000_device::asr_pais_dpm() // e0e0 fff8 +void m68000_mcu_device::asr_pais_dpm() // e0e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -199618,7 +199618,7 @@ void m68000_device::asr_pais_dpm() // e0e0 fff8 } } -void m68000_device::asr_das_dpm() // e0e8 fff8 +void m68000_mcu_device::asr_das_dpm() // e0e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -199744,7 +199744,7 @@ void m68000_device::asr_das_dpm() // e0e8 fff8 } } -void m68000_device::asr_dais_dpm() // e0f0 fff8 +void m68000_mcu_device::asr_dais_dpm() // e0f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -199911,7 +199911,7 @@ adsw2: } } -void m68000_device::asr_adr16_dpm() // e0f8 ffff +void m68000_mcu_device::asr_adr16_dpm() // e0f8 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -200036,7 +200036,7 @@ void m68000_device::asr_adr16_dpm() // e0f8 ffff } } -void m68000_device::asr_adr32_dpm() // e0f9 ffff +void m68000_mcu_device::asr_adr32_dpm() // e0f9 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -200185,7 +200185,7 @@ void m68000_device::asr_adr32_dpm() // e0f9 ffff } } -void m68000_device::asl_b_imm3_ds_dpm() // e100 f1f8 +void m68000_mcu_device::asl_b_imm3_ds_dpm() // e100 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -200257,7 +200257,7 @@ nbcr3: } } -void m68000_device::lsl_b_imm3_ds_dpm() // e108 f1f8 +void m68000_mcu_device::lsl_b_imm3_ds_dpm() // e108 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -200330,7 +200330,7 @@ nbcr3: } } -void m68000_device::roxl_b_imm3_ds_dpm() // e110 f1f8 +void m68000_mcu_device::roxl_b_imm3_ds_dpm() // e110 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -200402,7 +200402,7 @@ nbcr3: } } -void m68000_device::rol_b_imm3_ds_dpm() // e118 f1f8 +void m68000_mcu_device::rol_b_imm3_ds_dpm() // e118 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -200474,7 +200474,7 @@ nbcr3: } } -void m68000_device::asl_b_dd_ds_dpm() // e120 f1f8 +void m68000_mcu_device::asl_b_dd_ds_dpm() // e120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -200547,7 +200547,7 @@ nbcr3: } } -void m68000_device::lsl_b_dd_ds_dpm() // e128 f1f8 +void m68000_mcu_device::lsl_b_dd_ds_dpm() // e128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -200621,7 +200621,7 @@ nbcr3: } } -void m68000_device::roxl_b_dd_ds_dpm() // e130 f1f8 +void m68000_mcu_device::roxl_b_dd_ds_dpm() // e130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -200694,7 +200694,7 @@ nbcr3: } } -void m68000_device::rol_b_dd_ds_dpm() // e138 f1f8 +void m68000_mcu_device::rol_b_dd_ds_dpm() // e138 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -200767,7 +200767,7 @@ nbcr3: } } -void m68000_device::asl_w_imm3_ds_dpm() // e140 f1f8 +void m68000_mcu_device::asl_w_imm3_ds_dpm() // e140 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -200839,7 +200839,7 @@ nbcr3: } } -void m68000_device::lsl_w_imm3_ds_dpm() // e148 f1f8 +void m68000_mcu_device::lsl_w_imm3_ds_dpm() // e148 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -200912,7 +200912,7 @@ nbcr3: } } -void m68000_device::roxl_w_imm3_ds_dpm() // e150 f1f8 +void m68000_mcu_device::roxl_w_imm3_ds_dpm() // e150 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -200984,7 +200984,7 @@ nbcr3: } } -void m68000_device::rol_w_imm3_ds_dpm() // e158 f1f8 +void m68000_mcu_device::rol_w_imm3_ds_dpm() // e158 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -201056,7 +201056,7 @@ nbcr3: } } -void m68000_device::asl_w_dd_ds_dpm() // e160 f1f8 +void m68000_mcu_device::asl_w_dd_ds_dpm() // e160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -201129,7 +201129,7 @@ nbcr3: } } -void m68000_device::lsl_w_dd_ds_dpm() // e168 f1f8 +void m68000_mcu_device::lsl_w_dd_ds_dpm() // e168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -201203,7 +201203,7 @@ nbcr3: } } -void m68000_device::roxl_w_dd_ds_dpm() // e170 f1f8 +void m68000_mcu_device::roxl_w_dd_ds_dpm() // e170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -201276,7 +201276,7 @@ nbcr3: } } -void m68000_device::rol_w_dd_ds_dpm() // e178 f1f8 +void m68000_mcu_device::rol_w_dd_ds_dpm() // e178 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -201349,7 +201349,7 @@ nbcr3: } } -void m68000_device::asl_l_imm3_ds_dpm() // e180 f1f8 +void m68000_mcu_device::asl_l_imm3_ds_dpm() // e180 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -201427,7 +201427,7 @@ srrl4: } } -void m68000_device::lsl_l_imm3_ds_dpm() // e188 f1f8 +void m68000_mcu_device::lsl_l_imm3_ds_dpm() // e188 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -201507,7 +201507,7 @@ srrl4: } } -void m68000_device::roxl_l_imm3_ds_dpm() // e190 f1f8 +void m68000_mcu_device::roxl_l_imm3_ds_dpm() // e190 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -201585,7 +201585,7 @@ srrl4: } } -void m68000_device::rol_l_imm3_ds_dpm() // e198 f1f8 +void m68000_mcu_device::rol_l_imm3_ds_dpm() // e198 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -201663,7 +201663,7 @@ srrl4: } } -void m68000_device::asl_l_dd_ds_dpm() // e1a0 f1f8 +void m68000_mcu_device::asl_l_dd_ds_dpm() // e1a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -201742,7 +201742,7 @@ srrl4: } } -void m68000_device::lsl_l_dd_ds_dpm() // e1a8 f1f8 +void m68000_mcu_device::lsl_l_dd_ds_dpm() // e1a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -201823,7 +201823,7 @@ srrl4: } } -void m68000_device::roxl_l_dd_ds_dpm() // e1b0 f1f8 +void m68000_mcu_device::roxl_l_dd_ds_dpm() // e1b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -201902,7 +201902,7 @@ srrl4: } } -void m68000_device::rol_l_dd_ds_dpm() // e1b8 f1f8 +void m68000_mcu_device::rol_l_dd_ds_dpm() // e1b8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -201981,7 +201981,7 @@ srrl4: } } -void m68000_device::asl_ais_dpm() // e1d0 fff8 +void m68000_mcu_device::asl_ais_dpm() // e1d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -202082,7 +202082,7 @@ void m68000_device::asl_ais_dpm() // e1d0 fff8 } } -void m68000_device::asl_aips_dpm() // e1d8 fff8 +void m68000_mcu_device::asl_aips_dpm() // e1d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -202187,7 +202187,7 @@ void m68000_device::asl_aips_dpm() // e1d8 fff8 } } -void m68000_device::asl_pais_dpm() // e1e0 fff8 +void m68000_mcu_device::asl_pais_dpm() // e1e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -202294,7 +202294,7 @@ void m68000_device::asl_pais_dpm() // e1e0 fff8 } } -void m68000_device::asl_das_dpm() // e1e8 fff8 +void m68000_mcu_device::asl_das_dpm() // e1e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -202420,7 +202420,7 @@ void m68000_device::asl_das_dpm() // e1e8 fff8 } } -void m68000_device::asl_dais_dpm() // e1f0 fff8 +void m68000_mcu_device::asl_dais_dpm() // e1f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -202587,7 +202587,7 @@ adsw2: } } -void m68000_device::asl_adr16_dpm() // e1f8 ffff +void m68000_mcu_device::asl_adr16_dpm() // e1f8 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -202712,7 +202712,7 @@ void m68000_device::asl_adr16_dpm() // e1f8 ffff } } -void m68000_device::asl_adr32_dpm() // e1f9 ffff +void m68000_mcu_device::asl_adr32_dpm() // e1f9 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -202861,7 +202861,7 @@ void m68000_device::asl_adr32_dpm() // e1f9 ffff } } -void m68000_device::lsr_ais_dpm() // e2d0 fff8 +void m68000_mcu_device::lsr_ais_dpm() // e2d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -202962,7 +202962,7 @@ void m68000_device::lsr_ais_dpm() // e2d0 fff8 } } -void m68000_device::lsr_aips_dpm() // e2d8 fff8 +void m68000_mcu_device::lsr_aips_dpm() // e2d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -203067,7 +203067,7 @@ void m68000_device::lsr_aips_dpm() // e2d8 fff8 } } -void m68000_device::lsr_pais_dpm() // e2e0 fff8 +void m68000_mcu_device::lsr_pais_dpm() // e2e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -203174,7 +203174,7 @@ void m68000_device::lsr_pais_dpm() // e2e0 fff8 } } -void m68000_device::lsr_das_dpm() // e2e8 fff8 +void m68000_mcu_device::lsr_das_dpm() // e2e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -203300,7 +203300,7 @@ void m68000_device::lsr_das_dpm() // e2e8 fff8 } } -void m68000_device::lsr_dais_dpm() // e2f0 fff8 +void m68000_mcu_device::lsr_dais_dpm() // e2f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -203467,7 +203467,7 @@ adsw2: } } -void m68000_device::lsr_adr16_dpm() // e2f8 ffff +void m68000_mcu_device::lsr_adr16_dpm() // e2f8 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -203592,7 +203592,7 @@ void m68000_device::lsr_adr16_dpm() // e2f8 ffff } } -void m68000_device::lsr_adr32_dpm() // e2f9 ffff +void m68000_mcu_device::lsr_adr32_dpm() // e2f9 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -203741,7 +203741,7 @@ void m68000_device::lsr_adr32_dpm() // e2f9 ffff } } -void m68000_device::lsl_ais_dpm() // e3d0 fff8 +void m68000_mcu_device::lsl_ais_dpm() // e3d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -203844,7 +203844,7 @@ void m68000_device::lsl_ais_dpm() // e3d0 fff8 } } -void m68000_device::lsl_aips_dpm() // e3d8 fff8 +void m68000_mcu_device::lsl_aips_dpm() // e3d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -203952,7 +203952,7 @@ void m68000_device::lsl_aips_dpm() // e3d8 fff8 } } -void m68000_device::lsl_pais_dpm() // e3e0 fff8 +void m68000_mcu_device::lsl_pais_dpm() // e3e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -204062,7 +204062,7 @@ void m68000_device::lsl_pais_dpm() // e3e0 fff8 } } -void m68000_device::lsl_das_dpm() // e3e8 fff8 +void m68000_mcu_device::lsl_das_dpm() // e3e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -204191,7 +204191,7 @@ void m68000_device::lsl_das_dpm() // e3e8 fff8 } } -void m68000_device::lsl_dais_dpm() // e3f0 fff8 +void m68000_mcu_device::lsl_dais_dpm() // e3f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -204363,7 +204363,7 @@ adsw2: } } -void m68000_device::lsl_adr16_dpm() // e3f8 ffff +void m68000_mcu_device::lsl_adr16_dpm() // e3f8 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -204491,7 +204491,7 @@ void m68000_device::lsl_adr16_dpm() // e3f8 ffff } } -void m68000_device::lsl_adr32_dpm() // e3f9 ffff +void m68000_mcu_device::lsl_adr32_dpm() // e3f9 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -204644,7 +204644,7 @@ void m68000_device::lsl_adr32_dpm() // e3f9 ffff } } -void m68000_device::roxr_ais_dpm() // e4d0 fff8 +void m68000_mcu_device::roxr_ais_dpm() // e4d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -204745,7 +204745,7 @@ void m68000_device::roxr_ais_dpm() // e4d0 fff8 } } -void m68000_device::roxr_aips_dpm() // e4d8 fff8 +void m68000_mcu_device::roxr_aips_dpm() // e4d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -204850,7 +204850,7 @@ void m68000_device::roxr_aips_dpm() // e4d8 fff8 } } -void m68000_device::roxr_pais_dpm() // e4e0 fff8 +void m68000_mcu_device::roxr_pais_dpm() // e4e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -204957,7 +204957,7 @@ void m68000_device::roxr_pais_dpm() // e4e0 fff8 } } -void m68000_device::roxr_das_dpm() // e4e8 fff8 +void m68000_mcu_device::roxr_das_dpm() // e4e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -205083,7 +205083,7 @@ void m68000_device::roxr_das_dpm() // e4e8 fff8 } } -void m68000_device::roxr_dais_dpm() // e4f0 fff8 +void m68000_mcu_device::roxr_dais_dpm() // e4f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -205250,7 +205250,7 @@ adsw2: } } -void m68000_device::roxr_adr16_dpm() // e4f8 ffff +void m68000_mcu_device::roxr_adr16_dpm() // e4f8 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -205375,7 +205375,7 @@ void m68000_device::roxr_adr16_dpm() // e4f8 ffff } } -void m68000_device::roxr_adr32_dpm() // e4f9 ffff +void m68000_mcu_device::roxr_adr32_dpm() // e4f9 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -205524,7 +205524,7 @@ void m68000_device::roxr_adr32_dpm() // e4f9 ffff } } -void m68000_device::roxl_ais_dpm() // e5d0 fff8 +void m68000_mcu_device::roxl_ais_dpm() // e5d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -205625,7 +205625,7 @@ void m68000_device::roxl_ais_dpm() // e5d0 fff8 } } -void m68000_device::roxl_aips_dpm() // e5d8 fff8 +void m68000_mcu_device::roxl_aips_dpm() // e5d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -205730,7 +205730,7 @@ void m68000_device::roxl_aips_dpm() // e5d8 fff8 } } -void m68000_device::roxl_pais_dpm() // e5e0 fff8 +void m68000_mcu_device::roxl_pais_dpm() // e5e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -205837,7 +205837,7 @@ void m68000_device::roxl_pais_dpm() // e5e0 fff8 } } -void m68000_device::roxl_das_dpm() // e5e8 fff8 +void m68000_mcu_device::roxl_das_dpm() // e5e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -205963,7 +205963,7 @@ void m68000_device::roxl_das_dpm() // e5e8 fff8 } } -void m68000_device::roxl_dais_dpm() // e5f0 fff8 +void m68000_mcu_device::roxl_dais_dpm() // e5f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -206130,7 +206130,7 @@ adsw2: } } -void m68000_device::roxl_adr16_dpm() // e5f8 ffff +void m68000_mcu_device::roxl_adr16_dpm() // e5f8 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -206255,7 +206255,7 @@ void m68000_device::roxl_adr16_dpm() // e5f8 ffff } } -void m68000_device::roxl_adr32_dpm() // e5f9 ffff +void m68000_mcu_device::roxl_adr32_dpm() // e5f9 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -206404,7 +206404,7 @@ void m68000_device::roxl_adr32_dpm() // e5f9 ffff } } -void m68000_device::ror_ais_dpm() // e6d0 fff8 +void m68000_mcu_device::ror_ais_dpm() // e6d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -206505,7 +206505,7 @@ void m68000_device::ror_ais_dpm() // e6d0 fff8 } } -void m68000_device::ror_aips_dpm() // e6d8 fff8 +void m68000_mcu_device::ror_aips_dpm() // e6d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -206610,7 +206610,7 @@ void m68000_device::ror_aips_dpm() // e6d8 fff8 } } -void m68000_device::ror_pais_dpm() // e6e0 fff8 +void m68000_mcu_device::ror_pais_dpm() // e6e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -206717,7 +206717,7 @@ void m68000_device::ror_pais_dpm() // e6e0 fff8 } } -void m68000_device::ror_das_dpm() // e6e8 fff8 +void m68000_mcu_device::ror_das_dpm() // e6e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -206843,7 +206843,7 @@ void m68000_device::ror_das_dpm() // e6e8 fff8 } } -void m68000_device::ror_dais_dpm() // e6f0 fff8 +void m68000_mcu_device::ror_dais_dpm() // e6f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -207010,7 +207010,7 @@ adsw2: } } -void m68000_device::ror_adr16_dpm() // e6f8 ffff +void m68000_mcu_device::ror_adr16_dpm() // e6f8 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -207135,7 +207135,7 @@ void m68000_device::ror_adr16_dpm() // e6f8 ffff } } -void m68000_device::ror_adr32_dpm() // e6f9 ffff +void m68000_mcu_device::ror_adr32_dpm() // e6f9 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -207284,7 +207284,7 @@ void m68000_device::ror_adr32_dpm() // e6f9 ffff } } -void m68000_device::rol_ais_dpm() // e7d0 fff8 +void m68000_mcu_device::rol_ais_dpm() // e7d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -207385,7 +207385,7 @@ void m68000_device::rol_ais_dpm() // e7d0 fff8 } } -void m68000_device::rol_aips_dpm() // e7d8 fff8 +void m68000_mcu_device::rol_aips_dpm() // e7d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -207490,7 +207490,7 @@ void m68000_device::rol_aips_dpm() // e7d8 fff8 } } -void m68000_device::rol_pais_dpm() // e7e0 fff8 +void m68000_mcu_device::rol_pais_dpm() // e7e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -207597,7 +207597,7 @@ void m68000_device::rol_pais_dpm() // e7e0 fff8 } } -void m68000_device::rol_das_dpm() // e7e8 fff8 +void m68000_mcu_device::rol_das_dpm() // e7e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -207723,7 +207723,7 @@ void m68000_device::rol_das_dpm() // e7e8 fff8 } } -void m68000_device::rol_dais_dpm() // e7f0 fff8 +void m68000_mcu_device::rol_dais_dpm() // e7f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -207890,7 +207890,7 @@ adsw2: } } -void m68000_device::rol_adr16_dpm() // e7f8 ffff +void m68000_mcu_device::rol_adr16_dpm() // e7f8 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -208015,7 +208015,7 @@ void m68000_device::rol_adr16_dpm() // e7f8 ffff } } -void m68000_device::rol_adr32_dpm() // e7f9 ffff +void m68000_mcu_device::rol_adr32_dpm() // e7f9 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -208164,1540 +208164,1540 @@ void m68000_device::rol_adr32_dpm() // e7f9 ffff } } -const m68000_device::handler m68000_device::s_handlers_dpm[] = { - &m68000_device::state_reset_dpm, - &m68000_device::state_bus_error_dpm, - &m68000_device::state_address_error_dpm, - &m68000_device::state_double_fault_dpm, - &m68000_device::state_interrupt_dpm, - &m68000_device::state_trace_dpm, - &m68000_device::state_illegal_dpm, - &m68000_device::state_priviledge_dpm, - &m68000_device::state_linea_dpm, - &m68000_device::state_linef_dpm, - &m68000_device::ori_b_imm8_ds_dpm, - &m68000_device::ori_b_imm8_ais_dpm, - &m68000_device::ori_b_imm8_aips_dpm, - &m68000_device::ori_b_imm8_pais_dpm, - &m68000_device::ori_b_imm8_das_dpm, - &m68000_device::ori_b_imm8_dais_dpm, - &m68000_device::ori_b_imm8_adr16_dpm, - &m68000_device::ori_b_imm8_adr32_dpm, - &m68000_device::ori_imm8_ccr_dpm, - &m68000_device::ori_w_imm16_ds_dpm, - &m68000_device::ori_w_imm16_ais_dpm, - &m68000_device::ori_w_imm16_aips_dpm, - &m68000_device::ori_w_imm16_pais_dpm, - &m68000_device::ori_w_imm16_das_dpm, - &m68000_device::ori_w_imm16_dais_dpm, - &m68000_device::ori_w_imm16_adr16_dpm, - &m68000_device::ori_w_imm16_adr32_dpm, - &m68000_device::ori_i16u_sr_dpm, - &m68000_device::ori_l_imm32_ds_dpm, - &m68000_device::ori_l_imm32_ais_dpm, - &m68000_device::ori_l_imm32_aips_dpm, - &m68000_device::ori_l_imm32_pais_dpm, - &m68000_device::ori_l_imm32_das_dpm, - &m68000_device::ori_l_imm32_dais_dpm, - &m68000_device::ori_l_imm32_adr16_dpm, - &m68000_device::ori_l_imm32_adr32_dpm, - &m68000_device::btst_dd_ds_dpm, - &m68000_device::movep_w_das_dd_dpm, - &m68000_device::btst_dd_ais_dpm, - &m68000_device::btst_dd_aips_dpm, - &m68000_device::btst_dd_pais_dpm, - &m68000_device::btst_dd_das_dpm, - &m68000_device::btst_dd_dais_dpm, - &m68000_device::btst_dd_adr16_dpm, - &m68000_device::btst_dd_adr32_dpm, - &m68000_device::btst_dd_dpc_dpm, - &m68000_device::btst_dd_dpci_dpm, - &m68000_device::btst_dd_imm_dpm, - &m68000_device::bchg_dd_ds_dpm, - &m68000_device::movep_l_das_dd_dpm, - &m68000_device::bchg_dd_ais_dpm, - &m68000_device::bchg_dd_aips_dpm, - &m68000_device::bchg_dd_pais_dpm, - &m68000_device::bchg_dd_das_dpm, - &m68000_device::bchg_dd_dais_dpm, - &m68000_device::bchg_dd_adr16_dpm, - &m68000_device::bchg_dd_adr32_dpm, - &m68000_device::bclr_dd_ds_dpm, - &m68000_device::movep_w_dd_das_dpm, - &m68000_device::bclr_dd_ais_dpm, - &m68000_device::bclr_dd_aips_dpm, - &m68000_device::bclr_dd_pais_dpm, - &m68000_device::bclr_dd_das_dpm, - &m68000_device::bclr_dd_dais_dpm, - &m68000_device::bclr_dd_adr16_dpm, - &m68000_device::bclr_dd_adr32_dpm, - &m68000_device::bset_dd_ds_dpm, - &m68000_device::movep_l_dd_das_dpm, - &m68000_device::bset_dd_ais_dpm, - &m68000_device::bset_dd_aips_dpm, - &m68000_device::bset_dd_pais_dpm, - &m68000_device::bset_dd_das_dpm, - &m68000_device::bset_dd_dais_dpm, - &m68000_device::bset_dd_adr16_dpm, - &m68000_device::bset_dd_adr32_dpm, - &m68000_device::andi_b_imm8_ds_dpm, - &m68000_device::andi_b_imm8_ais_dpm, - &m68000_device::andi_b_imm8_aips_dpm, - &m68000_device::andi_b_imm8_pais_dpm, - &m68000_device::andi_b_imm8_das_dpm, - &m68000_device::andi_b_imm8_dais_dpm, - &m68000_device::andi_b_imm8_adr16_dpm, - &m68000_device::andi_b_imm8_adr32_dpm, - &m68000_device::andi_imm8_ccr_dpm, - &m68000_device::andi_w_imm16_ds_dpm, - &m68000_device::andi_w_imm16_ais_dpm, - &m68000_device::andi_w_imm16_aips_dpm, - &m68000_device::andi_w_imm16_pais_dpm, - &m68000_device::andi_w_imm16_das_dpm, - &m68000_device::andi_w_imm16_dais_dpm, - &m68000_device::andi_w_imm16_adr16_dpm, - &m68000_device::andi_w_imm16_adr32_dpm, - &m68000_device::andi_i16u_sr_dpm, - &m68000_device::andi_l_imm32_ds_dpm, - &m68000_device::andi_l_imm32_ais_dpm, - &m68000_device::andi_l_imm32_aips_dpm, - &m68000_device::andi_l_imm32_pais_dpm, - &m68000_device::andi_l_imm32_das_dpm, - &m68000_device::andi_l_imm32_dais_dpm, - &m68000_device::andi_l_imm32_adr16_dpm, - &m68000_device::andi_l_imm32_adr32_dpm, - &m68000_device::subi_b_imm8_ds_dpm, - &m68000_device::subi_b_imm8_ais_dpm, - &m68000_device::subi_b_imm8_aips_dpm, - &m68000_device::subi_b_imm8_pais_dpm, - &m68000_device::subi_b_imm8_das_dpm, - &m68000_device::subi_b_imm8_dais_dpm, - &m68000_device::subi_b_imm8_adr16_dpm, - &m68000_device::subi_b_imm8_adr32_dpm, - &m68000_device::subi_w_imm16_ds_dpm, - &m68000_device::subi_w_imm16_ais_dpm, - &m68000_device::subi_w_imm16_aips_dpm, - &m68000_device::subi_w_imm16_pais_dpm, - &m68000_device::subi_w_imm16_das_dpm, - &m68000_device::subi_w_imm16_dais_dpm, - &m68000_device::subi_w_imm16_adr16_dpm, - &m68000_device::subi_w_imm16_adr32_dpm, - &m68000_device::subi_l_imm32_ds_dpm, - &m68000_device::subi_l_imm32_ais_dpm, - &m68000_device::subi_l_imm32_aips_dpm, - &m68000_device::subi_l_imm32_pais_dpm, - &m68000_device::subi_l_imm32_das_dpm, - &m68000_device::subi_l_imm32_dais_dpm, - &m68000_device::subi_l_imm32_adr16_dpm, - &m68000_device::subi_l_imm32_adr32_dpm, - &m68000_device::addi_b_imm8_ds_dpm, - &m68000_device::addi_b_imm8_ais_dpm, - &m68000_device::addi_b_imm8_aips_dpm, - &m68000_device::addi_b_imm8_pais_dpm, - &m68000_device::addi_b_imm8_das_dpm, - &m68000_device::addi_b_imm8_dais_dpm, - &m68000_device::addi_b_imm8_adr16_dpm, - &m68000_device::addi_b_imm8_adr32_dpm, - &m68000_device::addi_w_imm16_ds_dpm, - &m68000_device::addi_w_imm16_ais_dpm, - &m68000_device::addi_w_imm16_aips_dpm, - &m68000_device::addi_w_imm16_pais_dpm, - &m68000_device::addi_w_imm16_das_dpm, - &m68000_device::addi_w_imm16_dais_dpm, - &m68000_device::addi_w_imm16_adr16_dpm, - &m68000_device::addi_w_imm16_adr32_dpm, - &m68000_device::addi_l_imm32_ds_dpm, - &m68000_device::addi_l_imm32_ais_dpm, - &m68000_device::addi_l_imm32_aips_dpm, - &m68000_device::addi_l_imm32_pais_dpm, - &m68000_device::addi_l_imm32_das_dpm, - &m68000_device::addi_l_imm32_dais_dpm, - &m68000_device::addi_l_imm32_adr16_dpm, - &m68000_device::addi_l_imm32_adr32_dpm, - &m68000_device::btst_imm8_ds_dpm, - &m68000_device::btst_imm8_ais_dpm, - &m68000_device::btst_imm8_aips_dpm, - &m68000_device::btst_imm8_pais_dpm, - &m68000_device::btst_imm8_das_dpm, - &m68000_device::btst_imm8_dais_dpm, - &m68000_device::btst_imm8_adr16_dpm, - &m68000_device::btst_imm8_adr32_dpm, - &m68000_device::btst_imm8_dpc_dpm, - &m68000_device::btst_imm8_dpci_dpm, - &m68000_device::bchg_imm8_ds_dpm, - &m68000_device::bchg_imm8_ais_dpm, - &m68000_device::bchg_imm8_aips_dpm, - &m68000_device::bchg_imm8_pais_dpm, - &m68000_device::bchg_imm8_das_dpm, - &m68000_device::bchg_imm8_dais_dpm, - &m68000_device::bchg_imm8_adr16_dpm, - &m68000_device::bchg_imm8_adr32_dpm, - &m68000_device::bclr_imm8_ds_dpm, - &m68000_device::bclr_imm8_ais_dpm, - &m68000_device::bclr_imm8_aips_dpm, - &m68000_device::bclr_imm8_pais_dpm, - &m68000_device::bclr_imm8_das_dpm, - &m68000_device::bclr_imm8_dais_dpm, - &m68000_device::bclr_imm8_adr16_dpm, - &m68000_device::bclr_imm8_adr32_dpm, - &m68000_device::bset_imm8_ds_dpm, - &m68000_device::bset_imm8_ais_dpm, - &m68000_device::bset_imm8_aips_dpm, - &m68000_device::bset_imm8_pais_dpm, - &m68000_device::bset_imm8_das_dpm, - &m68000_device::bset_imm8_dais_dpm, - &m68000_device::bset_imm8_adr16_dpm, - &m68000_device::bset_imm8_adr32_dpm, - &m68000_device::eori_b_imm8_ds_dpm, - &m68000_device::eori_b_imm8_ais_dpm, - &m68000_device::eori_b_imm8_aips_dpm, - &m68000_device::eori_b_imm8_pais_dpm, - &m68000_device::eori_b_imm8_das_dpm, - &m68000_device::eori_b_imm8_dais_dpm, - &m68000_device::eori_b_imm8_adr16_dpm, - &m68000_device::eori_b_imm8_adr32_dpm, - &m68000_device::eori_imm8_ccr_dpm, - &m68000_device::eori_w_imm16_ds_dpm, - &m68000_device::eori_w_imm16_ais_dpm, - &m68000_device::eori_w_imm16_aips_dpm, - &m68000_device::eori_w_imm16_pais_dpm, - &m68000_device::eori_w_imm16_das_dpm, - &m68000_device::eori_w_imm16_dais_dpm, - &m68000_device::eori_w_imm16_adr16_dpm, - &m68000_device::eori_w_imm16_adr32_dpm, - &m68000_device::eori_i16u_sr_dpm, - &m68000_device::eori_l_imm32_ds_dpm, - &m68000_device::eori_l_imm32_ais_dpm, - &m68000_device::eori_l_imm32_aips_dpm, - &m68000_device::eori_l_imm32_pais_dpm, - &m68000_device::eori_l_imm32_das_dpm, - &m68000_device::eori_l_imm32_dais_dpm, - &m68000_device::eori_l_imm32_adr16_dpm, - &m68000_device::eori_l_imm32_adr32_dpm, - &m68000_device::cmpi_b_imm8_ds_dpm, - &m68000_device::cmpi_b_imm8_ais_dpm, - &m68000_device::cmpi_b_imm8_aips_dpm, - &m68000_device::cmpi_b_imm8_pais_dpm, - &m68000_device::cmpi_b_imm8_das_dpm, - &m68000_device::cmpi_b_imm8_dais_dpm, - &m68000_device::cmpi_b_imm8_adr16_dpm, - &m68000_device::cmpi_b_imm8_adr32_dpm, - &m68000_device::cmpi_w_imm16_ds_dpm, - &m68000_device::cmpi_w_imm16_ais_dpm, - &m68000_device::cmpi_w_imm16_aips_dpm, - &m68000_device::cmpi_w_imm16_pais_dpm, - &m68000_device::cmpi_w_imm16_das_dpm, - &m68000_device::cmpi_w_imm16_dais_dpm, - &m68000_device::cmpi_w_imm16_adr16_dpm, - &m68000_device::cmpi_w_imm16_adr32_dpm, - &m68000_device::cmpi_l_imm32_ds_dpm, - &m68000_device::cmpi_l_imm32_ais_dpm, - &m68000_device::cmpi_l_imm32_aips_dpm, - &m68000_device::cmpi_l_imm32_pais_dpm, - &m68000_device::cmpi_l_imm32_das_dpm, - &m68000_device::cmpi_l_imm32_dais_dpm, - &m68000_device::cmpi_l_imm32_adr16_dpm, - &m68000_device::cmpi_l_imm32_adr32_dpm, - &m68000_device::move_b_ds_dd_dpm, - &m68000_device::move_b_ais_dd_dpm, - &m68000_device::move_b_aips_dd_dpm, - &m68000_device::move_b_pais_dd_dpm, - &m68000_device::move_b_das_dd_dpm, - &m68000_device::move_b_dais_dd_dpm, - &m68000_device::move_b_adr16_dd_dpm, - &m68000_device::move_b_adr32_dd_dpm, - &m68000_device::move_b_dpc_dd_dpm, - &m68000_device::move_b_dpci_dd_dpm, - &m68000_device::move_b_imm8_dd_dpm, - &m68000_device::move_b_ds_aid_dpm, - &m68000_device::move_b_ais_aid_dpm, - &m68000_device::move_b_aips_aid_dpm, - &m68000_device::move_b_pais_aid_dpm, - &m68000_device::move_b_das_aid_dpm, - &m68000_device::move_b_dais_aid_dpm, - &m68000_device::move_b_adr16_aid_dpm, - &m68000_device::move_b_adr32_aid_dpm, - &m68000_device::move_b_dpc_aid_dpm, - &m68000_device::move_b_dpci_aid_dpm, - &m68000_device::move_b_imm8_aid_dpm, - &m68000_device::move_b_ds_aipd_dpm, - &m68000_device::move_b_ais_aipd_dpm, - &m68000_device::move_b_aips_aipd_dpm, - &m68000_device::move_b_pais_aipd_dpm, - &m68000_device::move_b_das_aipd_dpm, - &m68000_device::move_b_dais_aipd_dpm, - &m68000_device::move_b_adr16_aipd_dpm, - &m68000_device::move_b_adr32_aipd_dpm, - &m68000_device::move_b_dpc_aipd_dpm, - &m68000_device::move_b_dpci_aipd_dpm, - &m68000_device::move_b_imm8_aipd_dpm, - &m68000_device::move_b_ds_paid_dpm, - &m68000_device::move_b_ais_paid_dpm, - &m68000_device::move_b_aips_paid_dpm, - &m68000_device::move_b_pais_paid_dpm, - &m68000_device::move_b_das_paid_dpm, - &m68000_device::move_b_dais_paid_dpm, - &m68000_device::move_b_adr16_paid_dpm, - &m68000_device::move_b_adr32_paid_dpm, - &m68000_device::move_b_dpc_paid_dpm, - &m68000_device::move_b_dpci_paid_dpm, - &m68000_device::move_b_imm8_paid_dpm, - &m68000_device::move_b_ds_dad_dpm, - &m68000_device::move_b_ais_dad_dpm, - &m68000_device::move_b_aips_dad_dpm, - &m68000_device::move_b_pais_dad_dpm, - &m68000_device::move_b_das_dad_dpm, - &m68000_device::move_b_dais_dad_dpm, - &m68000_device::move_b_adr16_dad_dpm, - &m68000_device::move_b_adr32_dad_dpm, - &m68000_device::move_b_dpc_dad_dpm, - &m68000_device::move_b_dpci_dad_dpm, - &m68000_device::move_b_imm8_dad_dpm, - &m68000_device::move_b_ds_daid_dpm, - &m68000_device::move_b_ais_daid_dpm, - &m68000_device::move_b_aips_daid_dpm, - &m68000_device::move_b_pais_daid_dpm, - &m68000_device::move_b_das_daid_dpm, - &m68000_device::move_b_dais_daid_dpm, - &m68000_device::move_b_adr16_daid_dpm, - &m68000_device::move_b_adr32_daid_dpm, - &m68000_device::move_b_dpc_daid_dpm, - &m68000_device::move_b_dpci_daid_dpm, - &m68000_device::move_b_imm8_daid_dpm, - &m68000_device::move_b_ds_adr16_dpm, - &m68000_device::move_b_ais_adr16_dpm, - &m68000_device::move_b_aips_adr16_dpm, - &m68000_device::move_b_pais_adr16_dpm, - &m68000_device::move_b_das_adr16_dpm, - &m68000_device::move_b_dais_adr16_dpm, - &m68000_device::move_b_adr16_adr16_dpm, - &m68000_device::move_b_adr32_adr16_dpm, - &m68000_device::move_b_dpc_adr16_dpm, - &m68000_device::move_b_dpci_adr16_dpm, - &m68000_device::move_b_imm8_adr16_dpm, - &m68000_device::move_b_ds_adr32_dpm, - &m68000_device::move_b_ais_adr32_dpm, - &m68000_device::move_b_aips_adr32_dpm, - &m68000_device::move_b_pais_adr32_dpm, - &m68000_device::move_b_das_adr32_dpm, - &m68000_device::move_b_dais_adr32_dpm, - &m68000_device::move_b_adr16_adr32_dpm, - &m68000_device::move_b_adr32_adr32_dpm, - &m68000_device::move_b_dpc_adr32_dpm, - &m68000_device::move_b_dpci_adr32_dpm, - &m68000_device::move_b_imm8_adr32_dpm, - &m68000_device::move_l_ds_dd_dpm, - &m68000_device::move_l_as_dd_dpm, - &m68000_device::move_l_ais_dd_dpm, - &m68000_device::move_l_aips_dd_dpm, - &m68000_device::move_l_pais_dd_dpm, - &m68000_device::move_l_das_dd_dpm, - &m68000_device::move_l_dais_dd_dpm, - &m68000_device::move_l_adr16_dd_dpm, - &m68000_device::move_l_adr32_dd_dpm, - &m68000_device::move_l_dpc_dd_dpm, - &m68000_device::move_l_dpci_dd_dpm, - &m68000_device::move_l_imm32_dd_dpm, - &m68000_device::movea_l_ds_ad_dpm, - &m68000_device::movea_l_as_ad_dpm, - &m68000_device::movea_l_ais_ad_dpm, - &m68000_device::movea_l_aips_ad_dpm, - &m68000_device::movea_l_pais_ad_dpm, - &m68000_device::movea_l_das_ad_dpm, - &m68000_device::movea_l_dais_ad_dpm, - &m68000_device::movea_l_adr16_ad_dpm, - &m68000_device::movea_l_adr32_ad_dpm, - &m68000_device::movea_l_dpc_ad_dpm, - &m68000_device::movea_l_dpci_ad_dpm, - &m68000_device::movea_l_imm32_ad_dpm, - &m68000_device::move_l_ds_aid_dpm, - &m68000_device::move_l_as_aid_dpm, - &m68000_device::move_l_ais_aid_dpm, - &m68000_device::move_l_aips_aid_dpm, - &m68000_device::move_l_pais_aid_dpm, - &m68000_device::move_l_das_aid_dpm, - &m68000_device::move_l_dais_aid_dpm, - &m68000_device::move_l_adr16_aid_dpm, - &m68000_device::move_l_adr32_aid_dpm, - &m68000_device::move_l_dpc_aid_dpm, - &m68000_device::move_l_dpci_aid_dpm, - &m68000_device::move_l_imm32_aid_dpm, - &m68000_device::move_l_ds_aipd_dpm, - &m68000_device::move_l_as_aipd_dpm, - &m68000_device::move_l_ais_aipd_dpm, - &m68000_device::move_l_aips_aipd_dpm, - &m68000_device::move_l_pais_aipd_dpm, - &m68000_device::move_l_das_aipd_dpm, - &m68000_device::move_l_dais_aipd_dpm, - &m68000_device::move_l_adr16_aipd_dpm, - &m68000_device::move_l_adr32_aipd_dpm, - &m68000_device::move_l_dpc_aipd_dpm, - &m68000_device::move_l_dpci_aipd_dpm, - &m68000_device::move_l_imm32_aipd_dpm, - &m68000_device::move_l_ds_paid_dpm, - &m68000_device::move_l_as_paid_dpm, - &m68000_device::move_l_ais_paid_dpm, - &m68000_device::move_l_aips_paid_dpm, - &m68000_device::move_l_pais_paid_dpm, - &m68000_device::move_l_das_paid_dpm, - &m68000_device::move_l_dais_paid_dpm, - &m68000_device::move_l_adr16_paid_dpm, - &m68000_device::move_l_adr32_paid_dpm, - &m68000_device::move_l_dpc_paid_dpm, - &m68000_device::move_l_dpci_paid_dpm, - &m68000_device::move_l_imm32_paid_dpm, - &m68000_device::move_l_ds_dad_dpm, - &m68000_device::move_l_as_dad_dpm, - &m68000_device::move_l_ais_dad_dpm, - &m68000_device::move_l_aips_dad_dpm, - &m68000_device::move_l_pais_dad_dpm, - &m68000_device::move_l_das_dad_dpm, - &m68000_device::move_l_dais_dad_dpm, - &m68000_device::move_l_adr16_dad_dpm, - &m68000_device::move_l_adr32_dad_dpm, - &m68000_device::move_l_dpc_dad_dpm, - &m68000_device::move_l_dpci_dad_dpm, - &m68000_device::move_l_imm32_dad_dpm, - &m68000_device::move_l_ds_daid_dpm, - &m68000_device::move_l_as_daid_dpm, - &m68000_device::move_l_ais_daid_dpm, - &m68000_device::move_l_aips_daid_dpm, - &m68000_device::move_l_pais_daid_dpm, - &m68000_device::move_l_das_daid_dpm, - &m68000_device::move_l_dais_daid_dpm, - &m68000_device::move_l_adr16_daid_dpm, - &m68000_device::move_l_adr32_daid_dpm, - &m68000_device::move_l_dpc_daid_dpm, - &m68000_device::move_l_dpci_daid_dpm, - &m68000_device::move_l_imm32_daid_dpm, - &m68000_device::move_l_ds_adr16_dpm, - &m68000_device::move_l_as_adr16_dpm, - &m68000_device::move_l_ais_adr16_dpm, - &m68000_device::move_l_aips_adr16_dpm, - &m68000_device::move_l_pais_adr16_dpm, - &m68000_device::move_l_das_adr16_dpm, - &m68000_device::move_l_dais_adr16_dpm, - &m68000_device::move_l_adr16_adr16_dpm, - &m68000_device::move_l_adr32_adr16_dpm, - &m68000_device::move_l_dpc_adr16_dpm, - &m68000_device::move_l_dpci_adr16_dpm, - &m68000_device::move_l_imm32_adr16_dpm, - &m68000_device::move_l_ds_adr32_dpm, - &m68000_device::move_l_as_adr32_dpm, - &m68000_device::move_l_ais_adr32_dpm, - &m68000_device::move_l_aips_adr32_dpm, - &m68000_device::move_l_pais_adr32_dpm, - &m68000_device::move_l_das_adr32_dpm, - &m68000_device::move_l_dais_adr32_dpm, - &m68000_device::move_l_adr16_adr32_dpm, - &m68000_device::move_l_adr32_adr32_dpm, - &m68000_device::move_l_dpc_adr32_dpm, - &m68000_device::move_l_dpci_adr32_dpm, - &m68000_device::move_l_imm32_adr32_dpm, - &m68000_device::move_w_ds_dd_dpm, - &m68000_device::move_w_as_dd_dpm, - &m68000_device::move_w_ais_dd_dpm, - &m68000_device::move_w_aips_dd_dpm, - &m68000_device::move_w_pais_dd_dpm, - &m68000_device::move_w_das_dd_dpm, - &m68000_device::move_w_dais_dd_dpm, - &m68000_device::move_w_adr16_dd_dpm, - &m68000_device::move_w_adr32_dd_dpm, - &m68000_device::move_w_dpc_dd_dpm, - &m68000_device::move_w_dpci_dd_dpm, - &m68000_device::move_w_imm16_dd_dpm, - &m68000_device::movea_w_ds_ad_dpm, - &m68000_device::movea_w_as_ad_dpm, - &m68000_device::movea_w_ais_ad_dpm, - &m68000_device::movea_w_aips_ad_dpm, - &m68000_device::movea_w_pais_ad_dpm, - &m68000_device::movea_w_das_ad_dpm, - &m68000_device::movea_w_dais_ad_dpm, - &m68000_device::movea_w_adr16_ad_dpm, - &m68000_device::movea_w_adr32_ad_dpm, - &m68000_device::movea_w_dpc_ad_dpm, - &m68000_device::movea_w_dpci_ad_dpm, - &m68000_device::movea_w_imm16_ad_dpm, - &m68000_device::move_w_ds_aid_dpm, - &m68000_device::move_w_as_aid_dpm, - &m68000_device::move_w_ais_aid_dpm, - &m68000_device::move_w_aips_aid_dpm, - &m68000_device::move_w_pais_aid_dpm, - &m68000_device::move_w_das_aid_dpm, - &m68000_device::move_w_dais_aid_dpm, - &m68000_device::move_w_adr16_aid_dpm, - &m68000_device::move_w_adr32_aid_dpm, - &m68000_device::move_w_dpc_aid_dpm, - &m68000_device::move_w_dpci_aid_dpm, - &m68000_device::move_w_imm16_aid_dpm, - &m68000_device::move_w_ds_aipd_dpm, - &m68000_device::move_w_as_aipd_dpm, - &m68000_device::move_w_ais_aipd_dpm, - &m68000_device::move_w_aips_aipd_dpm, - &m68000_device::move_w_pais_aipd_dpm, - &m68000_device::move_w_das_aipd_dpm, - &m68000_device::move_w_dais_aipd_dpm, - &m68000_device::move_w_adr16_aipd_dpm, - &m68000_device::move_w_adr32_aipd_dpm, - &m68000_device::move_w_dpc_aipd_dpm, - &m68000_device::move_w_dpci_aipd_dpm, - &m68000_device::move_w_imm16_aipd_dpm, - &m68000_device::move_w_ds_paid_dpm, - &m68000_device::move_w_as_paid_dpm, - &m68000_device::move_w_ais_paid_dpm, - &m68000_device::move_w_aips_paid_dpm, - &m68000_device::move_w_pais_paid_dpm, - &m68000_device::move_w_das_paid_dpm, - &m68000_device::move_w_dais_paid_dpm, - &m68000_device::move_w_adr16_paid_dpm, - &m68000_device::move_w_adr32_paid_dpm, - &m68000_device::move_w_dpc_paid_dpm, - &m68000_device::move_w_dpci_paid_dpm, - &m68000_device::move_w_imm16_paid_dpm, - &m68000_device::move_w_ds_dad_dpm, - &m68000_device::move_w_as_dad_dpm, - &m68000_device::move_w_ais_dad_dpm, - &m68000_device::move_w_aips_dad_dpm, - &m68000_device::move_w_pais_dad_dpm, - &m68000_device::move_w_das_dad_dpm, - &m68000_device::move_w_dais_dad_dpm, - &m68000_device::move_w_adr16_dad_dpm, - &m68000_device::move_w_adr32_dad_dpm, - &m68000_device::move_w_dpc_dad_dpm, - &m68000_device::move_w_dpci_dad_dpm, - &m68000_device::move_w_imm16_dad_dpm, - &m68000_device::move_w_ds_daid_dpm, - &m68000_device::move_w_as_daid_dpm, - &m68000_device::move_w_ais_daid_dpm, - &m68000_device::move_w_aips_daid_dpm, - &m68000_device::move_w_pais_daid_dpm, - &m68000_device::move_w_das_daid_dpm, - &m68000_device::move_w_dais_daid_dpm, - &m68000_device::move_w_adr16_daid_dpm, - &m68000_device::move_w_adr32_daid_dpm, - &m68000_device::move_w_dpc_daid_dpm, - &m68000_device::move_w_dpci_daid_dpm, - &m68000_device::move_w_imm16_daid_dpm, - &m68000_device::move_w_ds_adr16_dpm, - &m68000_device::move_w_as_adr16_dpm, - &m68000_device::move_w_ais_adr16_dpm, - &m68000_device::move_w_aips_adr16_dpm, - &m68000_device::move_w_pais_adr16_dpm, - &m68000_device::move_w_das_adr16_dpm, - &m68000_device::move_w_dais_adr16_dpm, - &m68000_device::move_w_adr16_adr16_dpm, - &m68000_device::move_w_adr32_adr16_dpm, - &m68000_device::move_w_dpc_adr16_dpm, - &m68000_device::move_w_dpci_adr16_dpm, - &m68000_device::move_w_imm16_adr16_dpm, - &m68000_device::move_w_ds_adr32_dpm, - &m68000_device::move_w_as_adr32_dpm, - &m68000_device::move_w_ais_adr32_dpm, - &m68000_device::move_w_aips_adr32_dpm, - &m68000_device::move_w_pais_adr32_dpm, - &m68000_device::move_w_das_adr32_dpm, - &m68000_device::move_w_dais_adr32_dpm, - &m68000_device::move_w_adr16_adr32_dpm, - &m68000_device::move_w_adr32_adr32_dpm, - &m68000_device::move_w_dpc_adr32_dpm, - &m68000_device::move_w_dpci_adr32_dpm, - &m68000_device::move_w_imm16_adr32_dpm, - &m68000_device::negx_b_ds_dpm, - &m68000_device::negx_b_ais_dpm, - &m68000_device::negx_b_aips_dpm, - &m68000_device::negx_b_pais_dpm, - &m68000_device::negx_b_das_dpm, - &m68000_device::negx_b_dais_dpm, - &m68000_device::negx_b_adr16_dpm, - &m68000_device::negx_b_adr32_dpm, - &m68000_device::negx_w_ds_dpm, - &m68000_device::negx_w_ais_dpm, - &m68000_device::negx_w_aips_dpm, - &m68000_device::negx_w_pais_dpm, - &m68000_device::negx_w_das_dpm, - &m68000_device::negx_w_dais_dpm, - &m68000_device::negx_w_adr16_dpm, - &m68000_device::negx_w_adr32_dpm, - &m68000_device::negx_l_ds_dpm, - &m68000_device::negx_l_ais_dpm, - &m68000_device::negx_l_aips_dpm, - &m68000_device::negx_l_pais_dpm, - &m68000_device::negx_l_das_dpm, - &m68000_device::negx_l_dais_dpm, - &m68000_device::negx_l_adr16_dpm, - &m68000_device::negx_l_adr32_dpm, - &m68000_device::move_sr_ds_dpm, - &m68000_device::move_sr_ais_dpm, - &m68000_device::move_sr_aips_dpm, - &m68000_device::move_sr_pais_dpm, - &m68000_device::move_sr_das_dpm, - &m68000_device::move_sr_dais_dpm, - &m68000_device::move_sr_adr16_dpm, - &m68000_device::move_sr_adr32_dpm, - &m68000_device::chk_w_ds_dd_dpm, - &m68000_device::chk_w_ais_dd_dpm, - &m68000_device::chk_w_aips_dd_dpm, - &m68000_device::chk_w_pais_dd_dpm, - &m68000_device::chk_w_das_dd_dpm, - &m68000_device::chk_w_dais_dd_dpm, - &m68000_device::chk_w_adr16_dd_dpm, - &m68000_device::chk_w_adr32_dd_dpm, - &m68000_device::chk_w_dpc_dd_dpm, - &m68000_device::chk_w_dpci_dd_dpm, - &m68000_device::chk_w_imm16_dd_dpm, - &m68000_device::lea_ais_ad_dpm, - &m68000_device::lea_das_ad_dpm, - &m68000_device::lea_dais_ad_dpm, - &m68000_device::lea_adr16_ad_dpm, - &m68000_device::lea_adr32_ad_dpm, - &m68000_device::lea_dpc_ad_dpm, - &m68000_device::lea_dpci_ad_dpm, - &m68000_device::clr_b_ds_dpm, - &m68000_device::clr_b_ais_dpm, - &m68000_device::clr_b_aips_dpm, - &m68000_device::clr_b_pais_dpm, - &m68000_device::clr_b_das_dpm, - &m68000_device::clr_b_dais_dpm, - &m68000_device::clr_b_adr16_dpm, - &m68000_device::clr_b_adr32_dpm, - &m68000_device::clr_w_ds_dpm, - &m68000_device::clr_w_ais_dpm, - &m68000_device::clr_w_aips_dpm, - &m68000_device::clr_w_pais_dpm, - &m68000_device::clr_w_das_dpm, - &m68000_device::clr_w_dais_dpm, - &m68000_device::clr_w_adr16_dpm, - &m68000_device::clr_w_adr32_dpm, - &m68000_device::clr_l_ds_dpm, - &m68000_device::clr_l_ais_dpm, - &m68000_device::clr_l_aips_dpm, - &m68000_device::clr_l_pais_dpm, - &m68000_device::clr_l_das_dpm, - &m68000_device::clr_l_dais_dpm, - &m68000_device::clr_l_adr16_dpm, - &m68000_device::clr_l_adr32_dpm, - &m68000_device::neg_b_ds_dpm, - &m68000_device::neg_b_ais_dpm, - &m68000_device::neg_b_aips_dpm, - &m68000_device::neg_b_pais_dpm, - &m68000_device::neg_b_das_dpm, - &m68000_device::neg_b_dais_dpm, - &m68000_device::neg_b_adr16_dpm, - &m68000_device::neg_b_adr32_dpm, - &m68000_device::neg_w_ds_dpm, - &m68000_device::neg_w_ais_dpm, - &m68000_device::neg_w_aips_dpm, - &m68000_device::neg_w_pais_dpm, - &m68000_device::neg_w_das_dpm, - &m68000_device::neg_w_dais_dpm, - &m68000_device::neg_w_adr16_dpm, - &m68000_device::neg_w_adr32_dpm, - &m68000_device::neg_l_ds_dpm, - &m68000_device::neg_l_ais_dpm, - &m68000_device::neg_l_aips_dpm, - &m68000_device::neg_l_pais_dpm, - &m68000_device::neg_l_das_dpm, - &m68000_device::neg_l_dais_dpm, - &m68000_device::neg_l_adr16_dpm, - &m68000_device::neg_l_adr32_dpm, - &m68000_device::move_ds_ccr_dpm, - &m68000_device::move_ais_ccr_dpm, - &m68000_device::move_aips_ccr_dpm, - &m68000_device::move_pais_ccr_dpm, - &m68000_device::move_das_ccr_dpm, - &m68000_device::move_dais_ccr_dpm, - &m68000_device::move_adr16_ccr_dpm, - &m68000_device::move_adr32_ccr_dpm, - &m68000_device::move_dpc_ccr_dpm, - &m68000_device::move_dpci_ccr_dpm, - &m68000_device::move_imm8_ccr_dpm, - &m68000_device::not_b_ds_dpm, - &m68000_device::not_b_ais_dpm, - &m68000_device::not_b_aips_dpm, - &m68000_device::not_b_pais_dpm, - &m68000_device::not_b_das_dpm, - &m68000_device::not_b_dais_dpm, - &m68000_device::not_b_adr16_dpm, - &m68000_device::not_b_adr32_dpm, - &m68000_device::not_w_ds_dpm, - &m68000_device::not_w_ais_dpm, - &m68000_device::not_w_aips_dpm, - &m68000_device::not_w_pais_dpm, - &m68000_device::not_w_das_dpm, - &m68000_device::not_w_dais_dpm, - &m68000_device::not_w_adr16_dpm, - &m68000_device::not_w_adr32_dpm, - &m68000_device::not_l_ds_dpm, - &m68000_device::not_l_ais_dpm, - &m68000_device::not_l_aips_dpm, - &m68000_device::not_l_pais_dpm, - &m68000_device::not_l_das_dpm, - &m68000_device::not_l_dais_dpm, - &m68000_device::not_l_adr16_dpm, - &m68000_device::not_l_adr32_dpm, - &m68000_device::move_ds_sr_dpm, - &m68000_device::move_ais_sr_dpm, - &m68000_device::move_aips_sr_dpm, - &m68000_device::move_pais_sr_dpm, - &m68000_device::move_das_sr_dpm, - &m68000_device::move_dais_sr_dpm, - &m68000_device::move_adr16_sr_dpm, - &m68000_device::move_adr32_sr_dpm, - &m68000_device::move_dpc_sr_dpm, - &m68000_device::move_dpci_sr_dpm, - &m68000_device::move_i16u_sr_dpm, - &m68000_device::nbcd_b_ds_dpm, - &m68000_device::nbcd_b_ais_dpm, - &m68000_device::nbcd_b_aips_dpm, - &m68000_device::nbcd_b_pais_dpm, - &m68000_device::nbcd_b_das_dpm, - &m68000_device::nbcd_b_dais_dpm, - &m68000_device::nbcd_b_adr16_dpm, - &m68000_device::nbcd_b_adr32_dpm, - &m68000_device::swap_ds_dpm, - &m68000_device::pea_ais_dpm, - &m68000_device::pea_das_dpm, - &m68000_device::pea_dais_dpm, - &m68000_device::pea_adr16_dpm, - &m68000_device::pea_adr32_dpm, - &m68000_device::pea_dpc_dpm, - &m68000_device::pea_dpci_dpm, - &m68000_device::ext_w_ds_dpm, - &m68000_device::movem_w_list_ais_dpm, - &m68000_device::movem_w_listp_pais_dpm, - &m68000_device::movem_w_list_das_dpm, - &m68000_device::movem_w_list_dais_dpm, - &m68000_device::movem_w_list_adr16_dpm, - &m68000_device::movem_w_list_adr32_dpm, - &m68000_device::ext_l_ds_dpm, - &m68000_device::movem_l_list_ais_dpm, - &m68000_device::movem_l_listp_pais_dpm, - &m68000_device::movem_l_list_das_dpm, - &m68000_device::movem_l_list_dais_dpm, - &m68000_device::movem_l_list_adr16_dpm, - &m68000_device::movem_l_list_adr32_dpm, - &m68000_device::tst_b_ds_dpm, - &m68000_device::tst_b_ais_dpm, - &m68000_device::tst_b_aips_dpm, - &m68000_device::tst_b_pais_dpm, - &m68000_device::tst_b_das_dpm, - &m68000_device::tst_b_dais_dpm, - &m68000_device::tst_b_adr16_dpm, - &m68000_device::tst_b_adr32_dpm, - &m68000_device::tst_w_ds_dpm, - &m68000_device::tst_w_ais_dpm, - &m68000_device::tst_w_aips_dpm, - &m68000_device::tst_w_pais_dpm, - &m68000_device::tst_w_das_dpm, - &m68000_device::tst_w_dais_dpm, - &m68000_device::tst_w_adr16_dpm, - &m68000_device::tst_w_adr32_dpm, - &m68000_device::tst_l_ds_dpm, - &m68000_device::tst_l_ais_dpm, - &m68000_device::tst_l_aips_dpm, - &m68000_device::tst_l_pais_dpm, - &m68000_device::tst_l_das_dpm, - &m68000_device::tst_l_dais_dpm, - &m68000_device::tst_l_adr16_dpm, - &m68000_device::tst_l_adr32_dpm, - &m68000_device::tas_ds_dpm, - &m68000_device::tas_ais_dpm, - &m68000_device::tas_aips_dpm, - &m68000_device::tas_pais_dpm, - &m68000_device::tas_das_dpm, - &m68000_device::tas_dais_dpm, - &m68000_device::tas_adr16_dpm, - &m68000_device::tas_adr32_dpm, - &m68000_device::movem_w_ais_list_dpm, - &m68000_device::movem_w_aips_list_dpm, - &m68000_device::movem_w_das_list_dpm, - &m68000_device::movem_w_dais_list_dpm, - &m68000_device::movem_w_adr16_list_dpm, - &m68000_device::movem_w_adr32_list_dpm, - &m68000_device::movem_w_dpc_list_dpm, - &m68000_device::movem_w_dpci_list_dpm, - &m68000_device::movem_l_ais_list_dpm, - &m68000_device::movem_l_aips_list_dpm, - &m68000_device::movem_l_das_list_dpm, - &m68000_device::movem_l_dais_list_dpm, - &m68000_device::movem_l_adr16_list_dpm, - &m68000_device::movem_l_adr32_list_dpm, - &m68000_device::movem_l_dpc_list_dpm, - &m68000_device::movem_l_dpci_list_dpm, - &m68000_device::trap_imm4_dpm, - &m68000_device::link_as_imm16_dpm, - &m68000_device::unlk_as_dpm, - &m68000_device::move_as_usp_dpm, - &m68000_device::move_usp_as_dpm, - &m68000_device::reset_dpm, - &m68000_device::nop_dpm, - &m68000_device::stop_i16u_dpm, - &m68000_device::rte_dpm, - &m68000_device::rts_dpm, - &m68000_device::trapv_dpm, - &m68000_device::rtr_dpm, - &m68000_device::jsr_ais_dpm, - &m68000_device::jsr_das_dpm, - &m68000_device::jsr_dais_dpm, - &m68000_device::jsr_adr16_dpm, - &m68000_device::jsr_adr32_dpm, - &m68000_device::jsr_dpc_dpm, - &m68000_device::jsr_dpci_dpm, - &m68000_device::jmp_ais_dpm, - &m68000_device::jmp_das_dpm, - &m68000_device::jmp_dais_dpm, - &m68000_device::jmp_adr16_dpm, - &m68000_device::jmp_adr32_dpm, - &m68000_device::jmp_dpc_dpm, - &m68000_device::jmp_dpci_dpm, - &m68000_device::addq_b_imm3_ds_dpm, - &m68000_device::addq_b_imm3_ais_dpm, - &m68000_device::addq_b_imm3_aips_dpm, - &m68000_device::addq_b_imm3_pais_dpm, - &m68000_device::addq_b_imm3_das_dpm, - &m68000_device::addq_b_imm3_dais_dpm, - &m68000_device::addq_b_imm3_adr16_dpm, - &m68000_device::addq_b_imm3_adr32_dpm, - &m68000_device::addq_w_imm3_ds_dpm, - &m68000_device::addq_w_imm3_as_dpm, - &m68000_device::addq_w_imm3_ais_dpm, - &m68000_device::addq_w_imm3_aips_dpm, - &m68000_device::addq_w_imm3_pais_dpm, - &m68000_device::addq_w_imm3_das_dpm, - &m68000_device::addq_w_imm3_dais_dpm, - &m68000_device::addq_w_imm3_adr16_dpm, - &m68000_device::addq_w_imm3_adr32_dpm, - &m68000_device::addq_l_imm3_ds_dpm, - &m68000_device::addq_l_imm3_as_dpm, - &m68000_device::addq_l_imm3_ais_dpm, - &m68000_device::addq_l_imm3_aips_dpm, - &m68000_device::addq_l_imm3_pais_dpm, - &m68000_device::addq_l_imm3_das_dpm, - &m68000_device::addq_l_imm3_dais_dpm, - &m68000_device::addq_l_imm3_adr16_dpm, - &m68000_device::addq_l_imm3_adr32_dpm, - &m68000_device::st_ds_dpm, - &m68000_device::dbt_ds_rel16_dpm, - &m68000_device::st_ais_dpm, - &m68000_device::st_aips_dpm, - &m68000_device::st_pais_dpm, - &m68000_device::st_das_dpm, - &m68000_device::st_dais_dpm, - &m68000_device::st_adr16_dpm, - &m68000_device::st_adr32_dpm, - &m68000_device::subq_b_imm3_ds_dpm, - &m68000_device::subq_b_imm3_ais_dpm, - &m68000_device::subq_b_imm3_aips_dpm, - &m68000_device::subq_b_imm3_pais_dpm, - &m68000_device::subq_b_imm3_das_dpm, - &m68000_device::subq_b_imm3_dais_dpm, - &m68000_device::subq_b_imm3_adr16_dpm, - &m68000_device::subq_b_imm3_adr32_dpm, - &m68000_device::subq_w_imm3_ds_dpm, - &m68000_device::subq_w_imm3_as_dpm, - &m68000_device::subq_w_imm3_ais_dpm, - &m68000_device::subq_w_imm3_aips_dpm, - &m68000_device::subq_w_imm3_pais_dpm, - &m68000_device::subq_w_imm3_das_dpm, - &m68000_device::subq_w_imm3_dais_dpm, - &m68000_device::subq_w_imm3_adr16_dpm, - &m68000_device::subq_w_imm3_adr32_dpm, - &m68000_device::subq_l_imm3_ds_dpm, - &m68000_device::subq_l_imm3_as_dpm, - &m68000_device::subq_l_imm3_ais_dpm, - &m68000_device::subq_l_imm3_aips_dpm, - &m68000_device::subq_l_imm3_pais_dpm, - &m68000_device::subq_l_imm3_das_dpm, - &m68000_device::subq_l_imm3_dais_dpm, - &m68000_device::subq_l_imm3_adr16_dpm, - &m68000_device::subq_l_imm3_adr32_dpm, - &m68000_device::sf_ds_dpm, - &m68000_device::dbra_ds_rel16_dpm, - &m68000_device::sf_ais_dpm, - &m68000_device::sf_aips_dpm, - &m68000_device::sf_pais_dpm, - &m68000_device::sf_das_dpm, - &m68000_device::sf_dais_dpm, - &m68000_device::sf_adr16_dpm, - &m68000_device::sf_adr32_dpm, - &m68000_device::shi_ds_dpm, - &m68000_device::dbhi_ds_rel16_dpm, - &m68000_device::shi_ais_dpm, - &m68000_device::shi_aips_dpm, - &m68000_device::shi_pais_dpm, - &m68000_device::shi_das_dpm, - &m68000_device::shi_dais_dpm, - &m68000_device::shi_adr16_dpm, - &m68000_device::shi_adr32_dpm, - &m68000_device::sls_ds_dpm, - &m68000_device::dbls_ds_rel16_dpm, - &m68000_device::sls_ais_dpm, - &m68000_device::sls_aips_dpm, - &m68000_device::sls_pais_dpm, - &m68000_device::sls_das_dpm, - &m68000_device::sls_dais_dpm, - &m68000_device::sls_adr16_dpm, - &m68000_device::sls_adr32_dpm, - &m68000_device::scc_ds_dpm, - &m68000_device::dbcc_ds_rel16_dpm, - &m68000_device::scc_ais_dpm, - &m68000_device::scc_aips_dpm, - &m68000_device::scc_pais_dpm, - &m68000_device::scc_das_dpm, - &m68000_device::scc_dais_dpm, - &m68000_device::scc_adr16_dpm, - &m68000_device::scc_adr32_dpm, - &m68000_device::scs_ds_dpm, - &m68000_device::dbcs_ds_rel16_dpm, - &m68000_device::scs_ais_dpm, - &m68000_device::scs_aips_dpm, - &m68000_device::scs_pais_dpm, - &m68000_device::scs_das_dpm, - &m68000_device::scs_dais_dpm, - &m68000_device::scs_adr16_dpm, - &m68000_device::scs_adr32_dpm, - &m68000_device::sne_ds_dpm, - &m68000_device::dbne_ds_rel16_dpm, - &m68000_device::sne_ais_dpm, - &m68000_device::sne_aips_dpm, - &m68000_device::sne_pais_dpm, - &m68000_device::sne_das_dpm, - &m68000_device::sne_dais_dpm, - &m68000_device::sne_adr16_dpm, - &m68000_device::sne_adr32_dpm, - &m68000_device::seq_ds_dpm, - &m68000_device::dbeq_ds_rel16_dpm, - &m68000_device::seq_ais_dpm, - &m68000_device::seq_aips_dpm, - &m68000_device::seq_pais_dpm, - &m68000_device::seq_das_dpm, - &m68000_device::seq_dais_dpm, - &m68000_device::seq_adr16_dpm, - &m68000_device::seq_adr32_dpm, - &m68000_device::svc_ds_dpm, - &m68000_device::dbvc_ds_rel16_dpm, - &m68000_device::svc_ais_dpm, - &m68000_device::svc_aips_dpm, - &m68000_device::svc_pais_dpm, - &m68000_device::svc_das_dpm, - &m68000_device::svc_dais_dpm, - &m68000_device::svc_adr16_dpm, - &m68000_device::svc_adr32_dpm, - &m68000_device::svs_ds_dpm, - &m68000_device::dbvs_ds_rel16_dpm, - &m68000_device::svs_ais_dpm, - &m68000_device::svs_aips_dpm, - &m68000_device::svs_pais_dpm, - &m68000_device::svs_das_dpm, - &m68000_device::svs_dais_dpm, - &m68000_device::svs_adr16_dpm, - &m68000_device::svs_adr32_dpm, - &m68000_device::spl_ds_dpm, - &m68000_device::dbpl_ds_rel16_dpm, - &m68000_device::spl_ais_dpm, - &m68000_device::spl_aips_dpm, - &m68000_device::spl_pais_dpm, - &m68000_device::spl_das_dpm, - &m68000_device::spl_dais_dpm, - &m68000_device::spl_adr16_dpm, - &m68000_device::spl_adr32_dpm, - &m68000_device::smi_ds_dpm, - &m68000_device::dbmi_ds_rel16_dpm, - &m68000_device::smi_ais_dpm, - &m68000_device::smi_aips_dpm, - &m68000_device::smi_pais_dpm, - &m68000_device::smi_das_dpm, - &m68000_device::smi_dais_dpm, - &m68000_device::smi_adr16_dpm, - &m68000_device::smi_adr32_dpm, - &m68000_device::sge_ds_dpm, - &m68000_device::dbge_ds_rel16_dpm, - &m68000_device::sge_ais_dpm, - &m68000_device::sge_aips_dpm, - &m68000_device::sge_pais_dpm, - &m68000_device::sge_das_dpm, - &m68000_device::sge_dais_dpm, - &m68000_device::sge_adr16_dpm, - &m68000_device::sge_adr32_dpm, - &m68000_device::slt_ds_dpm, - &m68000_device::dblt_ds_rel16_dpm, - &m68000_device::slt_ais_dpm, - &m68000_device::slt_aips_dpm, - &m68000_device::slt_pais_dpm, - &m68000_device::slt_das_dpm, - &m68000_device::slt_dais_dpm, - &m68000_device::slt_adr16_dpm, - &m68000_device::slt_adr32_dpm, - &m68000_device::sgt_ds_dpm, - &m68000_device::dbgt_ds_rel16_dpm, - &m68000_device::sgt_ais_dpm, - &m68000_device::sgt_aips_dpm, - &m68000_device::sgt_pais_dpm, - &m68000_device::sgt_das_dpm, - &m68000_device::sgt_dais_dpm, - &m68000_device::sgt_adr16_dpm, - &m68000_device::sgt_adr32_dpm, - &m68000_device::sle_ds_dpm, - &m68000_device::dble_ds_rel16_dpm, - &m68000_device::sle_ais_dpm, - &m68000_device::sle_aips_dpm, - &m68000_device::sle_pais_dpm, - &m68000_device::sle_das_dpm, - &m68000_device::sle_dais_dpm, - &m68000_device::sle_adr16_dpm, - &m68000_device::sle_adr32_dpm, - &m68000_device::bra_rel16_dpm, - &m68000_device::bra_rel8_dpm, - &m68000_device::bsr_rel16_dpm, - &m68000_device::bsr_rel8_dpm, - &m68000_device::bhi_rel16_dpm, - &m68000_device::bhi_rel8_dpm, - &m68000_device::bls_rel16_dpm, - &m68000_device::bls_rel8_dpm, - &m68000_device::bcc_rel16_dpm, - &m68000_device::bcc_rel8_dpm, - &m68000_device::bcs_rel16_dpm, - &m68000_device::bcs_rel8_dpm, - &m68000_device::bne_rel16_dpm, - &m68000_device::bne_rel8_dpm, - &m68000_device::beq_rel16_dpm, - &m68000_device::beq_rel8_dpm, - &m68000_device::bvc_rel16_dpm, - &m68000_device::bvc_rel8_dpm, - &m68000_device::bvs_rel16_dpm, - &m68000_device::bvs_rel8_dpm, - &m68000_device::bpl_rel16_dpm, - &m68000_device::bpl_rel8_dpm, - &m68000_device::bmi_rel16_dpm, - &m68000_device::bmi_rel8_dpm, - &m68000_device::bge_rel16_dpm, - &m68000_device::bge_rel8_dpm, - &m68000_device::blt_rel16_dpm, - &m68000_device::blt_rel8_dpm, - &m68000_device::bgt_rel16_dpm, - &m68000_device::bgt_rel8_dpm, - &m68000_device::ble_rel16_dpm, - &m68000_device::ble_rel8_dpm, - &m68000_device::moveq_imm8o_dd_dpm, - &m68000_device::or_b_ds_dd_dpm, - &m68000_device::or_b_ais_dd_dpm, - &m68000_device::or_b_aips_dd_dpm, - &m68000_device::or_b_pais_dd_dpm, - &m68000_device::or_b_das_dd_dpm, - &m68000_device::or_b_dais_dd_dpm, - &m68000_device::or_b_adr16_dd_dpm, - &m68000_device::or_b_adr32_dd_dpm, - &m68000_device::or_b_dpc_dd_dpm, - &m68000_device::or_b_dpci_dd_dpm, - &m68000_device::or_b_imm8_dd_dpm, - &m68000_device::or_w_ds_dd_dpm, - &m68000_device::or_w_ais_dd_dpm, - &m68000_device::or_w_aips_dd_dpm, - &m68000_device::or_w_pais_dd_dpm, - &m68000_device::or_w_das_dd_dpm, - &m68000_device::or_w_dais_dd_dpm, - &m68000_device::or_w_adr16_dd_dpm, - &m68000_device::or_w_adr32_dd_dpm, - &m68000_device::or_w_dpc_dd_dpm, - &m68000_device::or_w_dpci_dd_dpm, - &m68000_device::or_w_imm16_dd_dpm, - &m68000_device::or_l_ds_dd_dpm, - &m68000_device::or_l_ais_dd_dpm, - &m68000_device::or_l_aips_dd_dpm, - &m68000_device::or_l_pais_dd_dpm, - &m68000_device::or_l_das_dd_dpm, - &m68000_device::or_l_dais_dd_dpm, - &m68000_device::or_l_adr16_dd_dpm, - &m68000_device::or_l_adr32_dd_dpm, - &m68000_device::or_l_dpc_dd_dpm, - &m68000_device::or_l_dpci_dd_dpm, - &m68000_device::or_l_imm32_dd_dpm, - &m68000_device::divu_w_ds_dd_dpm, - &m68000_device::divu_w_ais_dd_dpm, - &m68000_device::divu_w_aips_dd_dpm, - &m68000_device::divu_w_pais_dd_dpm, - &m68000_device::divu_w_das_dd_dpm, - &m68000_device::divu_w_dais_dd_dpm, - &m68000_device::divu_w_adr16_dd_dpm, - &m68000_device::divu_w_adr32_dd_dpm, - &m68000_device::divu_w_dpc_dd_dpm, - &m68000_device::divu_w_dpci_dd_dpm, - &m68000_device::divu_w_imm16_dd_dpm, - &m68000_device::sbcd_ds_dd_dpm, - &m68000_device::sbcd_pais_paid_dpm, - &m68000_device::or_b_dd_ais_dpm, - &m68000_device::or_b_dd_aips_dpm, - &m68000_device::or_b_dd_pais_dpm, - &m68000_device::or_b_dd_das_dpm, - &m68000_device::or_b_dd_dais_dpm, - &m68000_device::or_b_dd_adr16_dpm, - &m68000_device::or_b_dd_adr32_dpm, - &m68000_device::or_w_dd_ais_dpm, - &m68000_device::or_w_dd_aips_dpm, - &m68000_device::or_w_dd_pais_dpm, - &m68000_device::or_w_dd_das_dpm, - &m68000_device::or_w_dd_dais_dpm, - &m68000_device::or_w_dd_adr16_dpm, - &m68000_device::or_w_dd_adr32_dpm, - &m68000_device::or_l_dd_ais_dpm, - &m68000_device::or_l_dd_aips_dpm, - &m68000_device::or_l_dd_pais_dpm, - &m68000_device::or_l_dd_das_dpm, - &m68000_device::or_l_dd_dais_dpm, - &m68000_device::or_l_dd_adr16_dpm, - &m68000_device::or_l_dd_adr32_dpm, - &m68000_device::divs_w_ds_dd_dpm, - &m68000_device::divs_w_ais_dd_dpm, - &m68000_device::divs_w_aips_dd_dpm, - &m68000_device::divs_w_pais_dd_dpm, - &m68000_device::divs_w_das_dd_dpm, - &m68000_device::divs_w_dais_dd_dpm, - &m68000_device::divs_w_adr16_dd_dpm, - &m68000_device::divs_w_adr32_dd_dpm, - &m68000_device::divs_w_dpc_dd_dpm, - &m68000_device::divs_w_dpci_dd_dpm, - &m68000_device::divs_w_imm16_dd_dpm, - &m68000_device::sub_b_ds_dd_dpm, - &m68000_device::sub_b_ais_dd_dpm, - &m68000_device::sub_b_aips_dd_dpm, - &m68000_device::sub_b_pais_dd_dpm, - &m68000_device::sub_b_das_dd_dpm, - &m68000_device::sub_b_dais_dd_dpm, - &m68000_device::sub_b_adr16_dd_dpm, - &m68000_device::sub_b_adr32_dd_dpm, - &m68000_device::sub_b_dpc_dd_dpm, - &m68000_device::sub_b_dpci_dd_dpm, - &m68000_device::sub_b_imm8_dd_dpm, - &m68000_device::sub_w_ds_dd_dpm, - &m68000_device::sub_w_as_dd_dpm, - &m68000_device::sub_w_ais_dd_dpm, - &m68000_device::sub_w_aips_dd_dpm, - &m68000_device::sub_w_pais_dd_dpm, - &m68000_device::sub_w_das_dd_dpm, - &m68000_device::sub_w_dais_dd_dpm, - &m68000_device::sub_w_adr16_dd_dpm, - &m68000_device::sub_w_adr32_dd_dpm, - &m68000_device::sub_w_dpc_dd_dpm, - &m68000_device::sub_w_dpci_dd_dpm, - &m68000_device::sub_w_imm16_dd_dpm, - &m68000_device::sub_l_ds_dd_dpm, - &m68000_device::sub_l_as_dd_dpm, - &m68000_device::sub_l_ais_dd_dpm, - &m68000_device::sub_l_aips_dd_dpm, - &m68000_device::sub_l_pais_dd_dpm, - &m68000_device::sub_l_das_dd_dpm, - &m68000_device::sub_l_dais_dd_dpm, - &m68000_device::sub_l_adr16_dd_dpm, - &m68000_device::sub_l_adr32_dd_dpm, - &m68000_device::sub_l_dpc_dd_dpm, - &m68000_device::sub_l_dpci_dd_dpm, - &m68000_device::sub_l_imm32_dd_dpm, - &m68000_device::suba_w_ds_ad_dpm, - &m68000_device::suba_w_as_ad_dpm, - &m68000_device::suba_w_ais_ad_dpm, - &m68000_device::suba_w_aips_ad_dpm, - &m68000_device::suba_w_pais_ad_dpm, - &m68000_device::suba_w_das_ad_dpm, - &m68000_device::suba_w_dais_ad_dpm, - &m68000_device::suba_w_adr16_ad_dpm, - &m68000_device::suba_w_adr32_ad_dpm, - &m68000_device::suba_w_dpc_ad_dpm, - &m68000_device::suba_w_dpci_ad_dpm, - &m68000_device::suba_w_imm16_ad_dpm, - &m68000_device::subx_b_ds_dd_dpm, - &m68000_device::subx_b_pais_paid_dpm, - &m68000_device::sub_b_dd_ais_dpm, - &m68000_device::sub_b_dd_aips_dpm, - &m68000_device::sub_b_dd_pais_dpm, - &m68000_device::sub_b_dd_das_dpm, - &m68000_device::sub_b_dd_dais_dpm, - &m68000_device::sub_b_dd_adr16_dpm, - &m68000_device::sub_b_dd_adr32_dpm, - &m68000_device::subx_w_ds_dd_dpm, - &m68000_device::subx_w_pais_paid_dpm, - &m68000_device::sub_w_dd_ais_dpm, - &m68000_device::sub_w_dd_aips_dpm, - &m68000_device::sub_w_dd_pais_dpm, - &m68000_device::sub_w_dd_das_dpm, - &m68000_device::sub_w_dd_dais_dpm, - &m68000_device::sub_w_dd_adr16_dpm, - &m68000_device::sub_w_dd_adr32_dpm, - &m68000_device::subx_l_ds_dd_dpm, - &m68000_device::subx_l_pais_paid_dpm, - &m68000_device::sub_l_dd_ais_dpm, - &m68000_device::sub_l_dd_aips_dpm, - &m68000_device::sub_l_dd_pais_dpm, - &m68000_device::sub_l_dd_das_dpm, - &m68000_device::sub_l_dd_dais_dpm, - &m68000_device::sub_l_dd_adr16_dpm, - &m68000_device::sub_l_dd_adr32_dpm, - &m68000_device::suba_l_ds_ad_dpm, - &m68000_device::suba_l_as_ad_dpm, - &m68000_device::suba_l_ais_ad_dpm, - &m68000_device::suba_l_aips_ad_dpm, - &m68000_device::suba_l_pais_ad_dpm, - &m68000_device::suba_l_das_ad_dpm, - &m68000_device::suba_l_dais_ad_dpm, - &m68000_device::suba_l_adr16_ad_dpm, - &m68000_device::suba_l_adr32_ad_dpm, - &m68000_device::suba_l_dpc_ad_dpm, - &m68000_device::suba_l_dpci_ad_dpm, - &m68000_device::suba_l_imm32_ad_dpm, - &m68000_device::cmp_b_ds_dd_dpm, - &m68000_device::cmp_b_ais_dd_dpm, - &m68000_device::cmp_b_aips_dd_dpm, - &m68000_device::cmp_b_pais_dd_dpm, - &m68000_device::cmp_b_das_dd_dpm, - &m68000_device::cmp_b_dais_dd_dpm, - &m68000_device::cmp_b_adr16_dd_dpm, - &m68000_device::cmp_b_adr32_dd_dpm, - &m68000_device::cmp_b_dpc_dd_dpm, - &m68000_device::cmp_b_dpci_dd_dpm, - &m68000_device::cmp_b_imm8_dd_dpm, - &m68000_device::cmp_w_ds_dd_dpm, - &m68000_device::cmp_w_as_dd_dpm, - &m68000_device::cmp_w_ais_dd_dpm, - &m68000_device::cmp_w_aips_dd_dpm, - &m68000_device::cmp_w_pais_dd_dpm, - &m68000_device::cmp_w_das_dd_dpm, - &m68000_device::cmp_w_dais_dd_dpm, - &m68000_device::cmp_w_adr16_dd_dpm, - &m68000_device::cmp_w_adr32_dd_dpm, - &m68000_device::cmp_w_dpc_dd_dpm, - &m68000_device::cmp_w_dpci_dd_dpm, - &m68000_device::cmp_w_imm16_dd_dpm, - &m68000_device::cmp_l_ds_dd_dpm, - &m68000_device::cmp_l_as_dd_dpm, - &m68000_device::cmp_l_ais_dd_dpm, - &m68000_device::cmp_l_aips_dd_dpm, - &m68000_device::cmp_l_pais_dd_dpm, - &m68000_device::cmp_l_das_dd_dpm, - &m68000_device::cmp_l_dais_dd_dpm, - &m68000_device::cmp_l_adr16_dd_dpm, - &m68000_device::cmp_l_adr32_dd_dpm, - &m68000_device::cmp_l_dpc_dd_dpm, - &m68000_device::cmp_l_dpci_dd_dpm, - &m68000_device::cmp_l_imm32_dd_dpm, - &m68000_device::cmpa_w_ds_ad_dpm, - &m68000_device::cmpa_w_as_ad_dpm, - &m68000_device::cmpa_w_ais_ad_dpm, - &m68000_device::cmpa_w_aips_ad_dpm, - &m68000_device::cmpa_w_pais_ad_dpm, - &m68000_device::cmpa_w_das_ad_dpm, - &m68000_device::cmpa_w_dais_ad_dpm, - &m68000_device::cmpa_w_adr16_ad_dpm, - &m68000_device::cmpa_w_adr32_ad_dpm, - &m68000_device::cmpa_w_dpc_ad_dpm, - &m68000_device::cmpa_w_dpci_ad_dpm, - &m68000_device::cmpa_w_imm16_ad_dpm, - &m68000_device::eor_b_dd_ds_dpm, - &m68000_device::cmpm_b_aips_aipd_dpm, - &m68000_device::eor_b_dd_ais_dpm, - &m68000_device::eor_b_dd_aips_dpm, - &m68000_device::eor_b_dd_pais_dpm, - &m68000_device::eor_b_dd_das_dpm, - &m68000_device::eor_b_dd_dais_dpm, - &m68000_device::eor_b_dd_adr16_dpm, - &m68000_device::eor_b_dd_adr32_dpm, - &m68000_device::eor_w_dd_ds_dpm, - &m68000_device::cmpm_w_aips_aipd_dpm, - &m68000_device::eor_w_dd_ais_dpm, - &m68000_device::eor_w_dd_aips_dpm, - &m68000_device::eor_w_dd_pais_dpm, - &m68000_device::eor_w_dd_das_dpm, - &m68000_device::eor_w_dd_dais_dpm, - &m68000_device::eor_w_dd_adr16_dpm, - &m68000_device::eor_w_dd_adr32_dpm, - &m68000_device::eor_l_dd_ds_dpm, - &m68000_device::cmpm_l_aips_aipd_dpm, - &m68000_device::eor_l_dd_ais_dpm, - &m68000_device::eor_l_dd_aips_dpm, - &m68000_device::eor_l_dd_pais_dpm, - &m68000_device::eor_l_dd_das_dpm, - &m68000_device::eor_l_dd_dais_dpm, - &m68000_device::eor_l_dd_adr16_dpm, - &m68000_device::eor_l_dd_adr32_dpm, - &m68000_device::cmpa_l_ds_ad_dpm, - &m68000_device::cmpa_l_as_ad_dpm, - &m68000_device::cmpa_l_ais_ad_dpm, - &m68000_device::cmpa_l_aips_ad_dpm, - &m68000_device::cmpa_l_pais_ad_dpm, - &m68000_device::cmpa_l_das_ad_dpm, - &m68000_device::cmpa_l_dais_ad_dpm, - &m68000_device::cmpa_l_adr16_ad_dpm, - &m68000_device::cmpa_l_adr32_ad_dpm, - &m68000_device::cmpa_l_dpc_ad_dpm, - &m68000_device::cmpa_l_dpci_ad_dpm, - &m68000_device::cmpa_l_imm32_ad_dpm, - &m68000_device::and_b_ds_dd_dpm, - &m68000_device::and_b_ais_dd_dpm, - &m68000_device::and_b_aips_dd_dpm, - &m68000_device::and_b_pais_dd_dpm, - &m68000_device::and_b_das_dd_dpm, - &m68000_device::and_b_dais_dd_dpm, - &m68000_device::and_b_adr16_dd_dpm, - &m68000_device::and_b_adr32_dd_dpm, - &m68000_device::and_b_dpc_dd_dpm, - &m68000_device::and_b_dpci_dd_dpm, - &m68000_device::and_b_imm8_dd_dpm, - &m68000_device::and_w_ds_dd_dpm, - &m68000_device::and_w_ais_dd_dpm, - &m68000_device::and_w_aips_dd_dpm, - &m68000_device::and_w_pais_dd_dpm, - &m68000_device::and_w_das_dd_dpm, - &m68000_device::and_w_dais_dd_dpm, - &m68000_device::and_w_adr16_dd_dpm, - &m68000_device::and_w_adr32_dd_dpm, - &m68000_device::and_w_dpc_dd_dpm, - &m68000_device::and_w_dpci_dd_dpm, - &m68000_device::and_w_imm16_dd_dpm, - &m68000_device::and_l_ds_dd_dpm, - &m68000_device::and_l_ais_dd_dpm, - &m68000_device::and_l_aips_dd_dpm, - &m68000_device::and_l_pais_dd_dpm, - &m68000_device::and_l_das_dd_dpm, - &m68000_device::and_l_dais_dd_dpm, - &m68000_device::and_l_adr16_dd_dpm, - &m68000_device::and_l_adr32_dd_dpm, - &m68000_device::and_l_dpc_dd_dpm, - &m68000_device::and_l_dpci_dd_dpm, - &m68000_device::and_l_imm32_dd_dpm, - &m68000_device::mulu_w_ds_dd_dpm, - &m68000_device::mulu_w_ais_dd_dpm, - &m68000_device::mulu_w_aips_dd_dpm, - &m68000_device::mulu_w_pais_dd_dpm, - &m68000_device::mulu_w_das_dd_dpm, - &m68000_device::mulu_w_dais_dd_dpm, - &m68000_device::mulu_w_adr16_dd_dpm, - &m68000_device::mulu_w_adr32_dd_dpm, - &m68000_device::mulu_w_dpc_dd_dpm, - &m68000_device::mulu_w_dpci_dd_dpm, - &m68000_device::mulu_w_imm16_dd_dpm, - &m68000_device::abcd_ds_dd_dpm, - &m68000_device::abcd_pais_paid_dpm, - &m68000_device::and_b_dd_ais_dpm, - &m68000_device::and_b_dd_aips_dpm, - &m68000_device::and_b_dd_pais_dpm, - &m68000_device::and_b_dd_das_dpm, - &m68000_device::and_b_dd_dais_dpm, - &m68000_device::and_b_dd_adr16_dpm, - &m68000_device::and_b_dd_adr32_dpm, - &m68000_device::exg_dd_ds_dpm, - &m68000_device::exg_ad_as_dpm, - &m68000_device::and_w_dd_ais_dpm, - &m68000_device::and_w_dd_aips_dpm, - &m68000_device::and_w_dd_pais_dpm, - &m68000_device::and_w_dd_das_dpm, - &m68000_device::and_w_dd_dais_dpm, - &m68000_device::and_w_dd_adr16_dpm, - &m68000_device::and_w_dd_adr32_dpm, - &m68000_device::exg_dd_as_dpm, - &m68000_device::and_l_dd_ais_dpm, - &m68000_device::and_l_dd_aips_dpm, - &m68000_device::and_l_dd_pais_dpm, - &m68000_device::and_l_dd_das_dpm, - &m68000_device::and_l_dd_dais_dpm, - &m68000_device::and_l_dd_adr16_dpm, - &m68000_device::and_l_dd_adr32_dpm, - &m68000_device::muls_w_ds_dd_dpm, - &m68000_device::muls_w_ais_dd_dpm, - &m68000_device::muls_w_aips_dd_dpm, - &m68000_device::muls_w_pais_dd_dpm, - &m68000_device::muls_w_das_dd_dpm, - &m68000_device::muls_w_dais_dd_dpm, - &m68000_device::muls_w_adr16_dd_dpm, - &m68000_device::muls_w_adr32_dd_dpm, - &m68000_device::muls_w_dpc_dd_dpm, - &m68000_device::muls_w_dpci_dd_dpm, - &m68000_device::muls_w_imm16_dd_dpm, - &m68000_device::add_b_ds_dd_dpm, - &m68000_device::add_b_ais_dd_dpm, - &m68000_device::add_b_aips_dd_dpm, - &m68000_device::add_b_pais_dd_dpm, - &m68000_device::add_b_das_dd_dpm, - &m68000_device::add_b_dais_dd_dpm, - &m68000_device::add_b_adr16_dd_dpm, - &m68000_device::add_b_adr32_dd_dpm, - &m68000_device::add_b_dpc_dd_dpm, - &m68000_device::add_b_dpci_dd_dpm, - &m68000_device::add_b_imm8_dd_dpm, - &m68000_device::add_w_ds_dd_dpm, - &m68000_device::add_w_as_dd_dpm, - &m68000_device::add_w_ais_dd_dpm, - &m68000_device::add_w_aips_dd_dpm, - &m68000_device::add_w_pais_dd_dpm, - &m68000_device::add_w_das_dd_dpm, - &m68000_device::add_w_dais_dd_dpm, - &m68000_device::add_w_adr16_dd_dpm, - &m68000_device::add_w_adr32_dd_dpm, - &m68000_device::add_w_dpc_dd_dpm, - &m68000_device::add_w_dpci_dd_dpm, - &m68000_device::add_w_imm16_dd_dpm, - &m68000_device::add_l_ds_dd_dpm, - &m68000_device::add_l_as_dd_dpm, - &m68000_device::add_l_ais_dd_dpm, - &m68000_device::add_l_aips_dd_dpm, - &m68000_device::add_l_pais_dd_dpm, - &m68000_device::add_l_das_dd_dpm, - &m68000_device::add_l_dais_dd_dpm, - &m68000_device::add_l_adr16_dd_dpm, - &m68000_device::add_l_adr32_dd_dpm, - &m68000_device::add_l_dpc_dd_dpm, - &m68000_device::add_l_dpci_dd_dpm, - &m68000_device::add_l_imm32_dd_dpm, - &m68000_device::adda_w_ds_ad_dpm, - &m68000_device::adda_w_as_ad_dpm, - &m68000_device::adda_w_ais_ad_dpm, - &m68000_device::adda_w_aips_ad_dpm, - &m68000_device::adda_w_pais_ad_dpm, - &m68000_device::adda_w_das_ad_dpm, - &m68000_device::adda_w_dais_ad_dpm, - &m68000_device::adda_w_adr16_ad_dpm, - &m68000_device::adda_w_adr32_ad_dpm, - &m68000_device::adda_w_dpc_ad_dpm, - &m68000_device::adda_w_dpci_ad_dpm, - &m68000_device::adda_w_imm16_ad_dpm, - &m68000_device::addx_b_ds_dd_dpm, - &m68000_device::addx_b_pais_paid_dpm, - &m68000_device::add_b_dd_ais_dpm, - &m68000_device::add_b_dd_aips_dpm, - &m68000_device::add_b_dd_pais_dpm, - &m68000_device::add_b_dd_das_dpm, - &m68000_device::add_b_dd_dais_dpm, - &m68000_device::add_b_dd_adr16_dpm, - &m68000_device::add_b_dd_adr32_dpm, - &m68000_device::addx_w_ds_dd_dpm, - &m68000_device::addx_w_pais_paid_dpm, - &m68000_device::add_w_dd_ais_dpm, - &m68000_device::add_w_dd_aips_dpm, - &m68000_device::add_w_dd_pais_dpm, - &m68000_device::add_w_dd_das_dpm, - &m68000_device::add_w_dd_dais_dpm, - &m68000_device::add_w_dd_adr16_dpm, - &m68000_device::add_w_dd_adr32_dpm, - &m68000_device::addx_l_ds_dd_dpm, - &m68000_device::addx_l_pais_paid_dpm, - &m68000_device::add_l_dd_ais_dpm, - &m68000_device::add_l_dd_aips_dpm, - &m68000_device::add_l_dd_pais_dpm, - &m68000_device::add_l_dd_das_dpm, - &m68000_device::add_l_dd_dais_dpm, - &m68000_device::add_l_dd_adr16_dpm, - &m68000_device::add_l_dd_adr32_dpm, - &m68000_device::adda_l_ds_ad_dpm, - &m68000_device::adda_l_as_ad_dpm, - &m68000_device::adda_l_ais_ad_dpm, - &m68000_device::adda_l_aips_ad_dpm, - &m68000_device::adda_l_pais_ad_dpm, - &m68000_device::adda_l_das_ad_dpm, - &m68000_device::adda_l_dais_ad_dpm, - &m68000_device::adda_l_adr16_ad_dpm, - &m68000_device::adda_l_adr32_ad_dpm, - &m68000_device::adda_l_dpc_ad_dpm, - &m68000_device::adda_l_dpci_ad_dpm, - &m68000_device::adda_l_imm32_ad_dpm, - &m68000_device::asr_b_imm3_ds_dpm, - &m68000_device::lsr_b_imm3_ds_dpm, - &m68000_device::roxr_b_imm3_ds_dpm, - &m68000_device::ror_b_imm3_ds_dpm, - &m68000_device::asr_b_dd_ds_dpm, - &m68000_device::lsr_b_dd_ds_dpm, - &m68000_device::roxr_b_dd_ds_dpm, - &m68000_device::ror_b_dd_ds_dpm, - &m68000_device::asr_w_imm3_ds_dpm, - &m68000_device::lsr_w_imm3_ds_dpm, - &m68000_device::roxr_w_imm3_ds_dpm, - &m68000_device::ror_w_imm3_ds_dpm, - &m68000_device::asr_w_dd_ds_dpm, - &m68000_device::lsr_w_dd_ds_dpm, - &m68000_device::roxr_w_dd_ds_dpm, - &m68000_device::ror_w_dd_ds_dpm, - &m68000_device::asr_l_imm3_ds_dpm, - &m68000_device::lsr_l_imm3_ds_dpm, - &m68000_device::roxr_l_imm3_ds_dpm, - &m68000_device::ror_l_imm3_ds_dpm, - &m68000_device::asr_l_dd_ds_dpm, - &m68000_device::lsr_l_dd_ds_dpm, - &m68000_device::roxr_l_dd_ds_dpm, - &m68000_device::ror_l_dd_ds_dpm, - &m68000_device::asr_ais_dpm, - &m68000_device::asr_aips_dpm, - &m68000_device::asr_pais_dpm, - &m68000_device::asr_das_dpm, - &m68000_device::asr_dais_dpm, - &m68000_device::asr_adr16_dpm, - &m68000_device::asr_adr32_dpm, - &m68000_device::asl_b_imm3_ds_dpm, - &m68000_device::lsl_b_imm3_ds_dpm, - &m68000_device::roxl_b_imm3_ds_dpm, - &m68000_device::rol_b_imm3_ds_dpm, - &m68000_device::asl_b_dd_ds_dpm, - &m68000_device::lsl_b_dd_ds_dpm, - &m68000_device::roxl_b_dd_ds_dpm, - &m68000_device::rol_b_dd_ds_dpm, - &m68000_device::asl_w_imm3_ds_dpm, - &m68000_device::lsl_w_imm3_ds_dpm, - &m68000_device::roxl_w_imm3_ds_dpm, - &m68000_device::rol_w_imm3_ds_dpm, - &m68000_device::asl_w_dd_ds_dpm, - &m68000_device::lsl_w_dd_ds_dpm, - &m68000_device::roxl_w_dd_ds_dpm, - &m68000_device::rol_w_dd_ds_dpm, - &m68000_device::asl_l_imm3_ds_dpm, - &m68000_device::lsl_l_imm3_ds_dpm, - &m68000_device::roxl_l_imm3_ds_dpm, - &m68000_device::rol_l_imm3_ds_dpm, - &m68000_device::asl_l_dd_ds_dpm, - &m68000_device::lsl_l_dd_ds_dpm, - &m68000_device::roxl_l_dd_ds_dpm, - &m68000_device::rol_l_dd_ds_dpm, - &m68000_device::asl_ais_dpm, - &m68000_device::asl_aips_dpm, - &m68000_device::asl_pais_dpm, - &m68000_device::asl_das_dpm, - &m68000_device::asl_dais_dpm, - &m68000_device::asl_adr16_dpm, - &m68000_device::asl_adr32_dpm, - &m68000_device::lsr_ais_dpm, - &m68000_device::lsr_aips_dpm, - &m68000_device::lsr_pais_dpm, - &m68000_device::lsr_das_dpm, - &m68000_device::lsr_dais_dpm, - &m68000_device::lsr_adr16_dpm, - &m68000_device::lsr_adr32_dpm, - &m68000_device::lsl_ais_dpm, - &m68000_device::lsl_aips_dpm, - &m68000_device::lsl_pais_dpm, - &m68000_device::lsl_das_dpm, - &m68000_device::lsl_dais_dpm, - &m68000_device::lsl_adr16_dpm, - &m68000_device::lsl_adr32_dpm, - &m68000_device::roxr_ais_dpm, - &m68000_device::roxr_aips_dpm, - &m68000_device::roxr_pais_dpm, - &m68000_device::roxr_das_dpm, - &m68000_device::roxr_dais_dpm, - &m68000_device::roxr_adr16_dpm, - &m68000_device::roxr_adr32_dpm, - &m68000_device::roxl_ais_dpm, - &m68000_device::roxl_aips_dpm, - &m68000_device::roxl_pais_dpm, - &m68000_device::roxl_das_dpm, - &m68000_device::roxl_dais_dpm, - &m68000_device::roxl_adr16_dpm, - &m68000_device::roxl_adr32_dpm, - &m68000_device::ror_ais_dpm, - &m68000_device::ror_aips_dpm, - &m68000_device::ror_pais_dpm, - &m68000_device::ror_das_dpm, - &m68000_device::ror_dais_dpm, - &m68000_device::ror_adr16_dpm, - &m68000_device::ror_adr32_dpm, - &m68000_device::rol_ais_dpm, - &m68000_device::rol_aips_dpm, - &m68000_device::rol_pais_dpm, - &m68000_device::rol_das_dpm, - &m68000_device::rol_dais_dpm, - &m68000_device::rol_adr16_dpm, - &m68000_device::rol_adr32_dpm, +const m68000_mcu_device::handlerm m68000_mcu_device::s_handlers_dpm[] = { + &m68000_mcu_device::state_reset_dpm, + &m68000_mcu_device::state_bus_error_dpm, + &m68000_mcu_device::state_address_error_dpm, + &m68000_mcu_device::state_double_fault_dpm, + &m68000_mcu_device::state_interrupt_dpm, + &m68000_mcu_device::state_trace_dpm, + &m68000_mcu_device::state_illegal_dpm, + &m68000_mcu_device::state_priviledge_dpm, + &m68000_mcu_device::state_linea_dpm, + &m68000_mcu_device::state_linef_dpm, + &m68000_mcu_device::ori_b_imm8_ds_dpm, + &m68000_mcu_device::ori_b_imm8_ais_dpm, + &m68000_mcu_device::ori_b_imm8_aips_dpm, + &m68000_mcu_device::ori_b_imm8_pais_dpm, + &m68000_mcu_device::ori_b_imm8_das_dpm, + &m68000_mcu_device::ori_b_imm8_dais_dpm, + &m68000_mcu_device::ori_b_imm8_adr16_dpm, + &m68000_mcu_device::ori_b_imm8_adr32_dpm, + &m68000_mcu_device::ori_imm8_ccr_dpm, + &m68000_mcu_device::ori_w_imm16_ds_dpm, + &m68000_mcu_device::ori_w_imm16_ais_dpm, + &m68000_mcu_device::ori_w_imm16_aips_dpm, + &m68000_mcu_device::ori_w_imm16_pais_dpm, + &m68000_mcu_device::ori_w_imm16_das_dpm, + &m68000_mcu_device::ori_w_imm16_dais_dpm, + &m68000_mcu_device::ori_w_imm16_adr16_dpm, + &m68000_mcu_device::ori_w_imm16_adr32_dpm, + &m68000_mcu_device::ori_i16u_sr_dpm, + &m68000_mcu_device::ori_l_imm32_ds_dpm, + &m68000_mcu_device::ori_l_imm32_ais_dpm, + &m68000_mcu_device::ori_l_imm32_aips_dpm, + &m68000_mcu_device::ori_l_imm32_pais_dpm, + &m68000_mcu_device::ori_l_imm32_das_dpm, + &m68000_mcu_device::ori_l_imm32_dais_dpm, + &m68000_mcu_device::ori_l_imm32_adr16_dpm, + &m68000_mcu_device::ori_l_imm32_adr32_dpm, + &m68000_mcu_device::btst_dd_ds_dpm, + &m68000_mcu_device::movep_w_das_dd_dpm, + &m68000_mcu_device::btst_dd_ais_dpm, + &m68000_mcu_device::btst_dd_aips_dpm, + &m68000_mcu_device::btst_dd_pais_dpm, + &m68000_mcu_device::btst_dd_das_dpm, + &m68000_mcu_device::btst_dd_dais_dpm, + &m68000_mcu_device::btst_dd_adr16_dpm, + &m68000_mcu_device::btst_dd_adr32_dpm, + &m68000_mcu_device::btst_dd_dpc_dpm, + &m68000_mcu_device::btst_dd_dpci_dpm, + &m68000_mcu_device::btst_dd_imm_dpm, + &m68000_mcu_device::bchg_dd_ds_dpm, + &m68000_mcu_device::movep_l_das_dd_dpm, + &m68000_mcu_device::bchg_dd_ais_dpm, + &m68000_mcu_device::bchg_dd_aips_dpm, + &m68000_mcu_device::bchg_dd_pais_dpm, + &m68000_mcu_device::bchg_dd_das_dpm, + &m68000_mcu_device::bchg_dd_dais_dpm, + &m68000_mcu_device::bchg_dd_adr16_dpm, + &m68000_mcu_device::bchg_dd_adr32_dpm, + &m68000_mcu_device::bclr_dd_ds_dpm, + &m68000_mcu_device::movep_w_dd_das_dpm, + &m68000_mcu_device::bclr_dd_ais_dpm, + &m68000_mcu_device::bclr_dd_aips_dpm, + &m68000_mcu_device::bclr_dd_pais_dpm, + &m68000_mcu_device::bclr_dd_das_dpm, + &m68000_mcu_device::bclr_dd_dais_dpm, + &m68000_mcu_device::bclr_dd_adr16_dpm, + &m68000_mcu_device::bclr_dd_adr32_dpm, + &m68000_mcu_device::bset_dd_ds_dpm, + &m68000_mcu_device::movep_l_dd_das_dpm, + &m68000_mcu_device::bset_dd_ais_dpm, + &m68000_mcu_device::bset_dd_aips_dpm, + &m68000_mcu_device::bset_dd_pais_dpm, + &m68000_mcu_device::bset_dd_das_dpm, + &m68000_mcu_device::bset_dd_dais_dpm, + &m68000_mcu_device::bset_dd_adr16_dpm, + &m68000_mcu_device::bset_dd_adr32_dpm, + &m68000_mcu_device::andi_b_imm8_ds_dpm, + &m68000_mcu_device::andi_b_imm8_ais_dpm, + &m68000_mcu_device::andi_b_imm8_aips_dpm, + &m68000_mcu_device::andi_b_imm8_pais_dpm, + &m68000_mcu_device::andi_b_imm8_das_dpm, + &m68000_mcu_device::andi_b_imm8_dais_dpm, + &m68000_mcu_device::andi_b_imm8_adr16_dpm, + &m68000_mcu_device::andi_b_imm8_adr32_dpm, + &m68000_mcu_device::andi_imm8_ccr_dpm, + &m68000_mcu_device::andi_w_imm16_ds_dpm, + &m68000_mcu_device::andi_w_imm16_ais_dpm, + &m68000_mcu_device::andi_w_imm16_aips_dpm, + &m68000_mcu_device::andi_w_imm16_pais_dpm, + &m68000_mcu_device::andi_w_imm16_das_dpm, + &m68000_mcu_device::andi_w_imm16_dais_dpm, + &m68000_mcu_device::andi_w_imm16_adr16_dpm, + &m68000_mcu_device::andi_w_imm16_adr32_dpm, + &m68000_mcu_device::andi_i16u_sr_dpm, + &m68000_mcu_device::andi_l_imm32_ds_dpm, + &m68000_mcu_device::andi_l_imm32_ais_dpm, + &m68000_mcu_device::andi_l_imm32_aips_dpm, + &m68000_mcu_device::andi_l_imm32_pais_dpm, + &m68000_mcu_device::andi_l_imm32_das_dpm, + &m68000_mcu_device::andi_l_imm32_dais_dpm, + &m68000_mcu_device::andi_l_imm32_adr16_dpm, + &m68000_mcu_device::andi_l_imm32_adr32_dpm, + &m68000_mcu_device::subi_b_imm8_ds_dpm, + &m68000_mcu_device::subi_b_imm8_ais_dpm, + &m68000_mcu_device::subi_b_imm8_aips_dpm, + &m68000_mcu_device::subi_b_imm8_pais_dpm, + &m68000_mcu_device::subi_b_imm8_das_dpm, + &m68000_mcu_device::subi_b_imm8_dais_dpm, + &m68000_mcu_device::subi_b_imm8_adr16_dpm, + &m68000_mcu_device::subi_b_imm8_adr32_dpm, + &m68000_mcu_device::subi_w_imm16_ds_dpm, + &m68000_mcu_device::subi_w_imm16_ais_dpm, + &m68000_mcu_device::subi_w_imm16_aips_dpm, + &m68000_mcu_device::subi_w_imm16_pais_dpm, + &m68000_mcu_device::subi_w_imm16_das_dpm, + &m68000_mcu_device::subi_w_imm16_dais_dpm, + &m68000_mcu_device::subi_w_imm16_adr16_dpm, + &m68000_mcu_device::subi_w_imm16_adr32_dpm, + &m68000_mcu_device::subi_l_imm32_ds_dpm, + &m68000_mcu_device::subi_l_imm32_ais_dpm, + &m68000_mcu_device::subi_l_imm32_aips_dpm, + &m68000_mcu_device::subi_l_imm32_pais_dpm, + &m68000_mcu_device::subi_l_imm32_das_dpm, + &m68000_mcu_device::subi_l_imm32_dais_dpm, + &m68000_mcu_device::subi_l_imm32_adr16_dpm, + &m68000_mcu_device::subi_l_imm32_adr32_dpm, + &m68000_mcu_device::addi_b_imm8_ds_dpm, + &m68000_mcu_device::addi_b_imm8_ais_dpm, + &m68000_mcu_device::addi_b_imm8_aips_dpm, + &m68000_mcu_device::addi_b_imm8_pais_dpm, + &m68000_mcu_device::addi_b_imm8_das_dpm, + &m68000_mcu_device::addi_b_imm8_dais_dpm, + &m68000_mcu_device::addi_b_imm8_adr16_dpm, + &m68000_mcu_device::addi_b_imm8_adr32_dpm, + &m68000_mcu_device::addi_w_imm16_ds_dpm, + &m68000_mcu_device::addi_w_imm16_ais_dpm, + &m68000_mcu_device::addi_w_imm16_aips_dpm, + &m68000_mcu_device::addi_w_imm16_pais_dpm, + &m68000_mcu_device::addi_w_imm16_das_dpm, + &m68000_mcu_device::addi_w_imm16_dais_dpm, + &m68000_mcu_device::addi_w_imm16_adr16_dpm, + &m68000_mcu_device::addi_w_imm16_adr32_dpm, + &m68000_mcu_device::addi_l_imm32_ds_dpm, + &m68000_mcu_device::addi_l_imm32_ais_dpm, + &m68000_mcu_device::addi_l_imm32_aips_dpm, + &m68000_mcu_device::addi_l_imm32_pais_dpm, + &m68000_mcu_device::addi_l_imm32_das_dpm, + &m68000_mcu_device::addi_l_imm32_dais_dpm, + &m68000_mcu_device::addi_l_imm32_adr16_dpm, + &m68000_mcu_device::addi_l_imm32_adr32_dpm, + &m68000_mcu_device::btst_imm8_ds_dpm, + &m68000_mcu_device::btst_imm8_ais_dpm, + &m68000_mcu_device::btst_imm8_aips_dpm, + &m68000_mcu_device::btst_imm8_pais_dpm, + &m68000_mcu_device::btst_imm8_das_dpm, + &m68000_mcu_device::btst_imm8_dais_dpm, + &m68000_mcu_device::btst_imm8_adr16_dpm, + &m68000_mcu_device::btst_imm8_adr32_dpm, + &m68000_mcu_device::btst_imm8_dpc_dpm, + &m68000_mcu_device::btst_imm8_dpci_dpm, + &m68000_mcu_device::bchg_imm8_ds_dpm, + &m68000_mcu_device::bchg_imm8_ais_dpm, + &m68000_mcu_device::bchg_imm8_aips_dpm, + &m68000_mcu_device::bchg_imm8_pais_dpm, + &m68000_mcu_device::bchg_imm8_das_dpm, + &m68000_mcu_device::bchg_imm8_dais_dpm, + &m68000_mcu_device::bchg_imm8_adr16_dpm, + &m68000_mcu_device::bchg_imm8_adr32_dpm, + &m68000_mcu_device::bclr_imm8_ds_dpm, + &m68000_mcu_device::bclr_imm8_ais_dpm, + &m68000_mcu_device::bclr_imm8_aips_dpm, + &m68000_mcu_device::bclr_imm8_pais_dpm, + &m68000_mcu_device::bclr_imm8_das_dpm, + &m68000_mcu_device::bclr_imm8_dais_dpm, + &m68000_mcu_device::bclr_imm8_adr16_dpm, + &m68000_mcu_device::bclr_imm8_adr32_dpm, + &m68000_mcu_device::bset_imm8_ds_dpm, + &m68000_mcu_device::bset_imm8_ais_dpm, + &m68000_mcu_device::bset_imm8_aips_dpm, + &m68000_mcu_device::bset_imm8_pais_dpm, + &m68000_mcu_device::bset_imm8_das_dpm, + &m68000_mcu_device::bset_imm8_dais_dpm, + &m68000_mcu_device::bset_imm8_adr16_dpm, + &m68000_mcu_device::bset_imm8_adr32_dpm, + &m68000_mcu_device::eori_b_imm8_ds_dpm, + &m68000_mcu_device::eori_b_imm8_ais_dpm, + &m68000_mcu_device::eori_b_imm8_aips_dpm, + &m68000_mcu_device::eori_b_imm8_pais_dpm, + &m68000_mcu_device::eori_b_imm8_das_dpm, + &m68000_mcu_device::eori_b_imm8_dais_dpm, + &m68000_mcu_device::eori_b_imm8_adr16_dpm, + &m68000_mcu_device::eori_b_imm8_adr32_dpm, + &m68000_mcu_device::eori_imm8_ccr_dpm, + &m68000_mcu_device::eori_w_imm16_ds_dpm, + &m68000_mcu_device::eori_w_imm16_ais_dpm, + &m68000_mcu_device::eori_w_imm16_aips_dpm, + &m68000_mcu_device::eori_w_imm16_pais_dpm, + &m68000_mcu_device::eori_w_imm16_das_dpm, + &m68000_mcu_device::eori_w_imm16_dais_dpm, + &m68000_mcu_device::eori_w_imm16_adr16_dpm, + &m68000_mcu_device::eori_w_imm16_adr32_dpm, + &m68000_mcu_device::eori_i16u_sr_dpm, + &m68000_mcu_device::eori_l_imm32_ds_dpm, + &m68000_mcu_device::eori_l_imm32_ais_dpm, + &m68000_mcu_device::eori_l_imm32_aips_dpm, + &m68000_mcu_device::eori_l_imm32_pais_dpm, + &m68000_mcu_device::eori_l_imm32_das_dpm, + &m68000_mcu_device::eori_l_imm32_dais_dpm, + &m68000_mcu_device::eori_l_imm32_adr16_dpm, + &m68000_mcu_device::eori_l_imm32_adr32_dpm, + &m68000_mcu_device::cmpi_b_imm8_ds_dpm, + &m68000_mcu_device::cmpi_b_imm8_ais_dpm, + &m68000_mcu_device::cmpi_b_imm8_aips_dpm, + &m68000_mcu_device::cmpi_b_imm8_pais_dpm, + &m68000_mcu_device::cmpi_b_imm8_das_dpm, + &m68000_mcu_device::cmpi_b_imm8_dais_dpm, + &m68000_mcu_device::cmpi_b_imm8_adr16_dpm, + &m68000_mcu_device::cmpi_b_imm8_adr32_dpm, + &m68000_mcu_device::cmpi_w_imm16_ds_dpm, + &m68000_mcu_device::cmpi_w_imm16_ais_dpm, + &m68000_mcu_device::cmpi_w_imm16_aips_dpm, + &m68000_mcu_device::cmpi_w_imm16_pais_dpm, + &m68000_mcu_device::cmpi_w_imm16_das_dpm, + &m68000_mcu_device::cmpi_w_imm16_dais_dpm, + &m68000_mcu_device::cmpi_w_imm16_adr16_dpm, + &m68000_mcu_device::cmpi_w_imm16_adr32_dpm, + &m68000_mcu_device::cmpi_l_imm32_ds_dpm, + &m68000_mcu_device::cmpi_l_imm32_ais_dpm, + &m68000_mcu_device::cmpi_l_imm32_aips_dpm, + &m68000_mcu_device::cmpi_l_imm32_pais_dpm, + &m68000_mcu_device::cmpi_l_imm32_das_dpm, + &m68000_mcu_device::cmpi_l_imm32_dais_dpm, + &m68000_mcu_device::cmpi_l_imm32_adr16_dpm, + &m68000_mcu_device::cmpi_l_imm32_adr32_dpm, + &m68000_mcu_device::move_b_ds_dd_dpm, + &m68000_mcu_device::move_b_ais_dd_dpm, + &m68000_mcu_device::move_b_aips_dd_dpm, + &m68000_mcu_device::move_b_pais_dd_dpm, + &m68000_mcu_device::move_b_das_dd_dpm, + &m68000_mcu_device::move_b_dais_dd_dpm, + &m68000_mcu_device::move_b_adr16_dd_dpm, + &m68000_mcu_device::move_b_adr32_dd_dpm, + &m68000_mcu_device::move_b_dpc_dd_dpm, + &m68000_mcu_device::move_b_dpci_dd_dpm, + &m68000_mcu_device::move_b_imm8_dd_dpm, + &m68000_mcu_device::move_b_ds_aid_dpm, + &m68000_mcu_device::move_b_ais_aid_dpm, + &m68000_mcu_device::move_b_aips_aid_dpm, + &m68000_mcu_device::move_b_pais_aid_dpm, + &m68000_mcu_device::move_b_das_aid_dpm, + &m68000_mcu_device::move_b_dais_aid_dpm, + &m68000_mcu_device::move_b_adr16_aid_dpm, + &m68000_mcu_device::move_b_adr32_aid_dpm, + &m68000_mcu_device::move_b_dpc_aid_dpm, + &m68000_mcu_device::move_b_dpci_aid_dpm, + &m68000_mcu_device::move_b_imm8_aid_dpm, + &m68000_mcu_device::move_b_ds_aipd_dpm, + &m68000_mcu_device::move_b_ais_aipd_dpm, + &m68000_mcu_device::move_b_aips_aipd_dpm, + &m68000_mcu_device::move_b_pais_aipd_dpm, + &m68000_mcu_device::move_b_das_aipd_dpm, + &m68000_mcu_device::move_b_dais_aipd_dpm, + &m68000_mcu_device::move_b_adr16_aipd_dpm, + &m68000_mcu_device::move_b_adr32_aipd_dpm, + &m68000_mcu_device::move_b_dpc_aipd_dpm, + &m68000_mcu_device::move_b_dpci_aipd_dpm, + &m68000_mcu_device::move_b_imm8_aipd_dpm, + &m68000_mcu_device::move_b_ds_paid_dpm, + &m68000_mcu_device::move_b_ais_paid_dpm, + &m68000_mcu_device::move_b_aips_paid_dpm, + &m68000_mcu_device::move_b_pais_paid_dpm, + &m68000_mcu_device::move_b_das_paid_dpm, + &m68000_mcu_device::move_b_dais_paid_dpm, + &m68000_mcu_device::move_b_adr16_paid_dpm, + &m68000_mcu_device::move_b_adr32_paid_dpm, + &m68000_mcu_device::move_b_dpc_paid_dpm, + &m68000_mcu_device::move_b_dpci_paid_dpm, + &m68000_mcu_device::move_b_imm8_paid_dpm, + &m68000_mcu_device::move_b_ds_dad_dpm, + &m68000_mcu_device::move_b_ais_dad_dpm, + &m68000_mcu_device::move_b_aips_dad_dpm, + &m68000_mcu_device::move_b_pais_dad_dpm, + &m68000_mcu_device::move_b_das_dad_dpm, + &m68000_mcu_device::move_b_dais_dad_dpm, + &m68000_mcu_device::move_b_adr16_dad_dpm, + &m68000_mcu_device::move_b_adr32_dad_dpm, + &m68000_mcu_device::move_b_dpc_dad_dpm, + &m68000_mcu_device::move_b_dpci_dad_dpm, + &m68000_mcu_device::move_b_imm8_dad_dpm, + &m68000_mcu_device::move_b_ds_daid_dpm, + &m68000_mcu_device::move_b_ais_daid_dpm, + &m68000_mcu_device::move_b_aips_daid_dpm, + &m68000_mcu_device::move_b_pais_daid_dpm, + &m68000_mcu_device::move_b_das_daid_dpm, + &m68000_mcu_device::move_b_dais_daid_dpm, + &m68000_mcu_device::move_b_adr16_daid_dpm, + &m68000_mcu_device::move_b_adr32_daid_dpm, + &m68000_mcu_device::move_b_dpc_daid_dpm, + &m68000_mcu_device::move_b_dpci_daid_dpm, + &m68000_mcu_device::move_b_imm8_daid_dpm, + &m68000_mcu_device::move_b_ds_adr16_dpm, + &m68000_mcu_device::move_b_ais_adr16_dpm, + &m68000_mcu_device::move_b_aips_adr16_dpm, + &m68000_mcu_device::move_b_pais_adr16_dpm, + &m68000_mcu_device::move_b_das_adr16_dpm, + &m68000_mcu_device::move_b_dais_adr16_dpm, + &m68000_mcu_device::move_b_adr16_adr16_dpm, + &m68000_mcu_device::move_b_adr32_adr16_dpm, + &m68000_mcu_device::move_b_dpc_adr16_dpm, + &m68000_mcu_device::move_b_dpci_adr16_dpm, + &m68000_mcu_device::move_b_imm8_adr16_dpm, + &m68000_mcu_device::move_b_ds_adr32_dpm, + &m68000_mcu_device::move_b_ais_adr32_dpm, + &m68000_mcu_device::move_b_aips_adr32_dpm, + &m68000_mcu_device::move_b_pais_adr32_dpm, + &m68000_mcu_device::move_b_das_adr32_dpm, + &m68000_mcu_device::move_b_dais_adr32_dpm, + &m68000_mcu_device::move_b_adr16_adr32_dpm, + &m68000_mcu_device::move_b_adr32_adr32_dpm, + &m68000_mcu_device::move_b_dpc_adr32_dpm, + &m68000_mcu_device::move_b_dpci_adr32_dpm, + &m68000_mcu_device::move_b_imm8_adr32_dpm, + &m68000_mcu_device::move_l_ds_dd_dpm, + &m68000_mcu_device::move_l_as_dd_dpm, + &m68000_mcu_device::move_l_ais_dd_dpm, + &m68000_mcu_device::move_l_aips_dd_dpm, + &m68000_mcu_device::move_l_pais_dd_dpm, + &m68000_mcu_device::move_l_das_dd_dpm, + &m68000_mcu_device::move_l_dais_dd_dpm, + &m68000_mcu_device::move_l_adr16_dd_dpm, + &m68000_mcu_device::move_l_adr32_dd_dpm, + &m68000_mcu_device::move_l_dpc_dd_dpm, + &m68000_mcu_device::move_l_dpci_dd_dpm, + &m68000_mcu_device::move_l_imm32_dd_dpm, + &m68000_mcu_device::movea_l_ds_ad_dpm, + &m68000_mcu_device::movea_l_as_ad_dpm, + &m68000_mcu_device::movea_l_ais_ad_dpm, + &m68000_mcu_device::movea_l_aips_ad_dpm, + &m68000_mcu_device::movea_l_pais_ad_dpm, + &m68000_mcu_device::movea_l_das_ad_dpm, + &m68000_mcu_device::movea_l_dais_ad_dpm, + &m68000_mcu_device::movea_l_adr16_ad_dpm, + &m68000_mcu_device::movea_l_adr32_ad_dpm, + &m68000_mcu_device::movea_l_dpc_ad_dpm, + &m68000_mcu_device::movea_l_dpci_ad_dpm, + &m68000_mcu_device::movea_l_imm32_ad_dpm, + &m68000_mcu_device::move_l_ds_aid_dpm, + &m68000_mcu_device::move_l_as_aid_dpm, + &m68000_mcu_device::move_l_ais_aid_dpm, + &m68000_mcu_device::move_l_aips_aid_dpm, + &m68000_mcu_device::move_l_pais_aid_dpm, + &m68000_mcu_device::move_l_das_aid_dpm, + &m68000_mcu_device::move_l_dais_aid_dpm, + &m68000_mcu_device::move_l_adr16_aid_dpm, + &m68000_mcu_device::move_l_adr32_aid_dpm, + &m68000_mcu_device::move_l_dpc_aid_dpm, + &m68000_mcu_device::move_l_dpci_aid_dpm, + &m68000_mcu_device::move_l_imm32_aid_dpm, + &m68000_mcu_device::move_l_ds_aipd_dpm, + &m68000_mcu_device::move_l_as_aipd_dpm, + &m68000_mcu_device::move_l_ais_aipd_dpm, + &m68000_mcu_device::move_l_aips_aipd_dpm, + &m68000_mcu_device::move_l_pais_aipd_dpm, + &m68000_mcu_device::move_l_das_aipd_dpm, + &m68000_mcu_device::move_l_dais_aipd_dpm, + &m68000_mcu_device::move_l_adr16_aipd_dpm, + &m68000_mcu_device::move_l_adr32_aipd_dpm, + &m68000_mcu_device::move_l_dpc_aipd_dpm, + &m68000_mcu_device::move_l_dpci_aipd_dpm, + &m68000_mcu_device::move_l_imm32_aipd_dpm, + &m68000_mcu_device::move_l_ds_paid_dpm, + &m68000_mcu_device::move_l_as_paid_dpm, + &m68000_mcu_device::move_l_ais_paid_dpm, + &m68000_mcu_device::move_l_aips_paid_dpm, + &m68000_mcu_device::move_l_pais_paid_dpm, + &m68000_mcu_device::move_l_das_paid_dpm, + &m68000_mcu_device::move_l_dais_paid_dpm, + &m68000_mcu_device::move_l_adr16_paid_dpm, + &m68000_mcu_device::move_l_adr32_paid_dpm, + &m68000_mcu_device::move_l_dpc_paid_dpm, + &m68000_mcu_device::move_l_dpci_paid_dpm, + &m68000_mcu_device::move_l_imm32_paid_dpm, + &m68000_mcu_device::move_l_ds_dad_dpm, + &m68000_mcu_device::move_l_as_dad_dpm, + &m68000_mcu_device::move_l_ais_dad_dpm, + &m68000_mcu_device::move_l_aips_dad_dpm, + &m68000_mcu_device::move_l_pais_dad_dpm, + &m68000_mcu_device::move_l_das_dad_dpm, + &m68000_mcu_device::move_l_dais_dad_dpm, + &m68000_mcu_device::move_l_adr16_dad_dpm, + &m68000_mcu_device::move_l_adr32_dad_dpm, + &m68000_mcu_device::move_l_dpc_dad_dpm, + &m68000_mcu_device::move_l_dpci_dad_dpm, + &m68000_mcu_device::move_l_imm32_dad_dpm, + &m68000_mcu_device::move_l_ds_daid_dpm, + &m68000_mcu_device::move_l_as_daid_dpm, + &m68000_mcu_device::move_l_ais_daid_dpm, + &m68000_mcu_device::move_l_aips_daid_dpm, + &m68000_mcu_device::move_l_pais_daid_dpm, + &m68000_mcu_device::move_l_das_daid_dpm, + &m68000_mcu_device::move_l_dais_daid_dpm, + &m68000_mcu_device::move_l_adr16_daid_dpm, + &m68000_mcu_device::move_l_adr32_daid_dpm, + &m68000_mcu_device::move_l_dpc_daid_dpm, + &m68000_mcu_device::move_l_dpci_daid_dpm, + &m68000_mcu_device::move_l_imm32_daid_dpm, + &m68000_mcu_device::move_l_ds_adr16_dpm, + &m68000_mcu_device::move_l_as_adr16_dpm, + &m68000_mcu_device::move_l_ais_adr16_dpm, + &m68000_mcu_device::move_l_aips_adr16_dpm, + &m68000_mcu_device::move_l_pais_adr16_dpm, + &m68000_mcu_device::move_l_das_adr16_dpm, + &m68000_mcu_device::move_l_dais_adr16_dpm, + &m68000_mcu_device::move_l_adr16_adr16_dpm, + &m68000_mcu_device::move_l_adr32_adr16_dpm, + &m68000_mcu_device::move_l_dpc_adr16_dpm, + &m68000_mcu_device::move_l_dpci_adr16_dpm, + &m68000_mcu_device::move_l_imm32_adr16_dpm, + &m68000_mcu_device::move_l_ds_adr32_dpm, + &m68000_mcu_device::move_l_as_adr32_dpm, + &m68000_mcu_device::move_l_ais_adr32_dpm, + &m68000_mcu_device::move_l_aips_adr32_dpm, + &m68000_mcu_device::move_l_pais_adr32_dpm, + &m68000_mcu_device::move_l_das_adr32_dpm, + &m68000_mcu_device::move_l_dais_adr32_dpm, + &m68000_mcu_device::move_l_adr16_adr32_dpm, + &m68000_mcu_device::move_l_adr32_adr32_dpm, + &m68000_mcu_device::move_l_dpc_adr32_dpm, + &m68000_mcu_device::move_l_dpci_adr32_dpm, + &m68000_mcu_device::move_l_imm32_adr32_dpm, + &m68000_mcu_device::move_w_ds_dd_dpm, + &m68000_mcu_device::move_w_as_dd_dpm, + &m68000_mcu_device::move_w_ais_dd_dpm, + &m68000_mcu_device::move_w_aips_dd_dpm, + &m68000_mcu_device::move_w_pais_dd_dpm, + &m68000_mcu_device::move_w_das_dd_dpm, + &m68000_mcu_device::move_w_dais_dd_dpm, + &m68000_mcu_device::move_w_adr16_dd_dpm, + &m68000_mcu_device::move_w_adr32_dd_dpm, + &m68000_mcu_device::move_w_dpc_dd_dpm, + &m68000_mcu_device::move_w_dpci_dd_dpm, + &m68000_mcu_device::move_w_imm16_dd_dpm, + &m68000_mcu_device::movea_w_ds_ad_dpm, + &m68000_mcu_device::movea_w_as_ad_dpm, + &m68000_mcu_device::movea_w_ais_ad_dpm, + &m68000_mcu_device::movea_w_aips_ad_dpm, + &m68000_mcu_device::movea_w_pais_ad_dpm, + &m68000_mcu_device::movea_w_das_ad_dpm, + &m68000_mcu_device::movea_w_dais_ad_dpm, + &m68000_mcu_device::movea_w_adr16_ad_dpm, + &m68000_mcu_device::movea_w_adr32_ad_dpm, + &m68000_mcu_device::movea_w_dpc_ad_dpm, + &m68000_mcu_device::movea_w_dpci_ad_dpm, + &m68000_mcu_device::movea_w_imm16_ad_dpm, + &m68000_mcu_device::move_w_ds_aid_dpm, + &m68000_mcu_device::move_w_as_aid_dpm, + &m68000_mcu_device::move_w_ais_aid_dpm, + &m68000_mcu_device::move_w_aips_aid_dpm, + &m68000_mcu_device::move_w_pais_aid_dpm, + &m68000_mcu_device::move_w_das_aid_dpm, + &m68000_mcu_device::move_w_dais_aid_dpm, + &m68000_mcu_device::move_w_adr16_aid_dpm, + &m68000_mcu_device::move_w_adr32_aid_dpm, + &m68000_mcu_device::move_w_dpc_aid_dpm, + &m68000_mcu_device::move_w_dpci_aid_dpm, + &m68000_mcu_device::move_w_imm16_aid_dpm, + &m68000_mcu_device::move_w_ds_aipd_dpm, + &m68000_mcu_device::move_w_as_aipd_dpm, + &m68000_mcu_device::move_w_ais_aipd_dpm, + &m68000_mcu_device::move_w_aips_aipd_dpm, + &m68000_mcu_device::move_w_pais_aipd_dpm, + &m68000_mcu_device::move_w_das_aipd_dpm, + &m68000_mcu_device::move_w_dais_aipd_dpm, + &m68000_mcu_device::move_w_adr16_aipd_dpm, + &m68000_mcu_device::move_w_adr32_aipd_dpm, + &m68000_mcu_device::move_w_dpc_aipd_dpm, + &m68000_mcu_device::move_w_dpci_aipd_dpm, + &m68000_mcu_device::move_w_imm16_aipd_dpm, + &m68000_mcu_device::move_w_ds_paid_dpm, + &m68000_mcu_device::move_w_as_paid_dpm, + &m68000_mcu_device::move_w_ais_paid_dpm, + &m68000_mcu_device::move_w_aips_paid_dpm, + &m68000_mcu_device::move_w_pais_paid_dpm, + &m68000_mcu_device::move_w_das_paid_dpm, + &m68000_mcu_device::move_w_dais_paid_dpm, + &m68000_mcu_device::move_w_adr16_paid_dpm, + &m68000_mcu_device::move_w_adr32_paid_dpm, + &m68000_mcu_device::move_w_dpc_paid_dpm, + &m68000_mcu_device::move_w_dpci_paid_dpm, + &m68000_mcu_device::move_w_imm16_paid_dpm, + &m68000_mcu_device::move_w_ds_dad_dpm, + &m68000_mcu_device::move_w_as_dad_dpm, + &m68000_mcu_device::move_w_ais_dad_dpm, + &m68000_mcu_device::move_w_aips_dad_dpm, + &m68000_mcu_device::move_w_pais_dad_dpm, + &m68000_mcu_device::move_w_das_dad_dpm, + &m68000_mcu_device::move_w_dais_dad_dpm, + &m68000_mcu_device::move_w_adr16_dad_dpm, + &m68000_mcu_device::move_w_adr32_dad_dpm, + &m68000_mcu_device::move_w_dpc_dad_dpm, + &m68000_mcu_device::move_w_dpci_dad_dpm, + &m68000_mcu_device::move_w_imm16_dad_dpm, + &m68000_mcu_device::move_w_ds_daid_dpm, + &m68000_mcu_device::move_w_as_daid_dpm, + &m68000_mcu_device::move_w_ais_daid_dpm, + &m68000_mcu_device::move_w_aips_daid_dpm, + &m68000_mcu_device::move_w_pais_daid_dpm, + &m68000_mcu_device::move_w_das_daid_dpm, + &m68000_mcu_device::move_w_dais_daid_dpm, + &m68000_mcu_device::move_w_adr16_daid_dpm, + &m68000_mcu_device::move_w_adr32_daid_dpm, + &m68000_mcu_device::move_w_dpc_daid_dpm, + &m68000_mcu_device::move_w_dpci_daid_dpm, + &m68000_mcu_device::move_w_imm16_daid_dpm, + &m68000_mcu_device::move_w_ds_adr16_dpm, + &m68000_mcu_device::move_w_as_adr16_dpm, + &m68000_mcu_device::move_w_ais_adr16_dpm, + &m68000_mcu_device::move_w_aips_adr16_dpm, + &m68000_mcu_device::move_w_pais_adr16_dpm, + &m68000_mcu_device::move_w_das_adr16_dpm, + &m68000_mcu_device::move_w_dais_adr16_dpm, + &m68000_mcu_device::move_w_adr16_adr16_dpm, + &m68000_mcu_device::move_w_adr32_adr16_dpm, + &m68000_mcu_device::move_w_dpc_adr16_dpm, + &m68000_mcu_device::move_w_dpci_adr16_dpm, + &m68000_mcu_device::move_w_imm16_adr16_dpm, + &m68000_mcu_device::move_w_ds_adr32_dpm, + &m68000_mcu_device::move_w_as_adr32_dpm, + &m68000_mcu_device::move_w_ais_adr32_dpm, + &m68000_mcu_device::move_w_aips_adr32_dpm, + &m68000_mcu_device::move_w_pais_adr32_dpm, + &m68000_mcu_device::move_w_das_adr32_dpm, + &m68000_mcu_device::move_w_dais_adr32_dpm, + &m68000_mcu_device::move_w_adr16_adr32_dpm, + &m68000_mcu_device::move_w_adr32_adr32_dpm, + &m68000_mcu_device::move_w_dpc_adr32_dpm, + &m68000_mcu_device::move_w_dpci_adr32_dpm, + &m68000_mcu_device::move_w_imm16_adr32_dpm, + &m68000_mcu_device::negx_b_ds_dpm, + &m68000_mcu_device::negx_b_ais_dpm, + &m68000_mcu_device::negx_b_aips_dpm, + &m68000_mcu_device::negx_b_pais_dpm, + &m68000_mcu_device::negx_b_das_dpm, + &m68000_mcu_device::negx_b_dais_dpm, + &m68000_mcu_device::negx_b_adr16_dpm, + &m68000_mcu_device::negx_b_adr32_dpm, + &m68000_mcu_device::negx_w_ds_dpm, + &m68000_mcu_device::negx_w_ais_dpm, + &m68000_mcu_device::negx_w_aips_dpm, + &m68000_mcu_device::negx_w_pais_dpm, + &m68000_mcu_device::negx_w_das_dpm, + &m68000_mcu_device::negx_w_dais_dpm, + &m68000_mcu_device::negx_w_adr16_dpm, + &m68000_mcu_device::negx_w_adr32_dpm, + &m68000_mcu_device::negx_l_ds_dpm, + &m68000_mcu_device::negx_l_ais_dpm, + &m68000_mcu_device::negx_l_aips_dpm, + &m68000_mcu_device::negx_l_pais_dpm, + &m68000_mcu_device::negx_l_das_dpm, + &m68000_mcu_device::negx_l_dais_dpm, + &m68000_mcu_device::negx_l_adr16_dpm, + &m68000_mcu_device::negx_l_adr32_dpm, + &m68000_mcu_device::move_sr_ds_dpm, + &m68000_mcu_device::move_sr_ais_dpm, + &m68000_mcu_device::move_sr_aips_dpm, + &m68000_mcu_device::move_sr_pais_dpm, + &m68000_mcu_device::move_sr_das_dpm, + &m68000_mcu_device::move_sr_dais_dpm, + &m68000_mcu_device::move_sr_adr16_dpm, + &m68000_mcu_device::move_sr_adr32_dpm, + &m68000_mcu_device::chk_w_ds_dd_dpm, + &m68000_mcu_device::chk_w_ais_dd_dpm, + &m68000_mcu_device::chk_w_aips_dd_dpm, + &m68000_mcu_device::chk_w_pais_dd_dpm, + &m68000_mcu_device::chk_w_das_dd_dpm, + &m68000_mcu_device::chk_w_dais_dd_dpm, + &m68000_mcu_device::chk_w_adr16_dd_dpm, + &m68000_mcu_device::chk_w_adr32_dd_dpm, + &m68000_mcu_device::chk_w_dpc_dd_dpm, + &m68000_mcu_device::chk_w_dpci_dd_dpm, + &m68000_mcu_device::chk_w_imm16_dd_dpm, + &m68000_mcu_device::lea_ais_ad_dpm, + &m68000_mcu_device::lea_das_ad_dpm, + &m68000_mcu_device::lea_dais_ad_dpm, + &m68000_mcu_device::lea_adr16_ad_dpm, + &m68000_mcu_device::lea_adr32_ad_dpm, + &m68000_mcu_device::lea_dpc_ad_dpm, + &m68000_mcu_device::lea_dpci_ad_dpm, + &m68000_mcu_device::clr_b_ds_dpm, + &m68000_mcu_device::clr_b_ais_dpm, + &m68000_mcu_device::clr_b_aips_dpm, + &m68000_mcu_device::clr_b_pais_dpm, + &m68000_mcu_device::clr_b_das_dpm, + &m68000_mcu_device::clr_b_dais_dpm, + &m68000_mcu_device::clr_b_adr16_dpm, + &m68000_mcu_device::clr_b_adr32_dpm, + &m68000_mcu_device::clr_w_ds_dpm, + &m68000_mcu_device::clr_w_ais_dpm, + &m68000_mcu_device::clr_w_aips_dpm, + &m68000_mcu_device::clr_w_pais_dpm, + &m68000_mcu_device::clr_w_das_dpm, + &m68000_mcu_device::clr_w_dais_dpm, + &m68000_mcu_device::clr_w_adr16_dpm, + &m68000_mcu_device::clr_w_adr32_dpm, + &m68000_mcu_device::clr_l_ds_dpm, + &m68000_mcu_device::clr_l_ais_dpm, + &m68000_mcu_device::clr_l_aips_dpm, + &m68000_mcu_device::clr_l_pais_dpm, + &m68000_mcu_device::clr_l_das_dpm, + &m68000_mcu_device::clr_l_dais_dpm, + &m68000_mcu_device::clr_l_adr16_dpm, + &m68000_mcu_device::clr_l_adr32_dpm, + &m68000_mcu_device::neg_b_ds_dpm, + &m68000_mcu_device::neg_b_ais_dpm, + &m68000_mcu_device::neg_b_aips_dpm, + &m68000_mcu_device::neg_b_pais_dpm, + &m68000_mcu_device::neg_b_das_dpm, + &m68000_mcu_device::neg_b_dais_dpm, + &m68000_mcu_device::neg_b_adr16_dpm, + &m68000_mcu_device::neg_b_adr32_dpm, + &m68000_mcu_device::neg_w_ds_dpm, + &m68000_mcu_device::neg_w_ais_dpm, + &m68000_mcu_device::neg_w_aips_dpm, + &m68000_mcu_device::neg_w_pais_dpm, + &m68000_mcu_device::neg_w_das_dpm, + &m68000_mcu_device::neg_w_dais_dpm, + &m68000_mcu_device::neg_w_adr16_dpm, + &m68000_mcu_device::neg_w_adr32_dpm, + &m68000_mcu_device::neg_l_ds_dpm, + &m68000_mcu_device::neg_l_ais_dpm, + &m68000_mcu_device::neg_l_aips_dpm, + &m68000_mcu_device::neg_l_pais_dpm, + &m68000_mcu_device::neg_l_das_dpm, + &m68000_mcu_device::neg_l_dais_dpm, + &m68000_mcu_device::neg_l_adr16_dpm, + &m68000_mcu_device::neg_l_adr32_dpm, + &m68000_mcu_device::move_ds_ccr_dpm, + &m68000_mcu_device::move_ais_ccr_dpm, + &m68000_mcu_device::move_aips_ccr_dpm, + &m68000_mcu_device::move_pais_ccr_dpm, + &m68000_mcu_device::move_das_ccr_dpm, + &m68000_mcu_device::move_dais_ccr_dpm, + &m68000_mcu_device::move_adr16_ccr_dpm, + &m68000_mcu_device::move_adr32_ccr_dpm, + &m68000_mcu_device::move_dpc_ccr_dpm, + &m68000_mcu_device::move_dpci_ccr_dpm, + &m68000_mcu_device::move_imm8_ccr_dpm, + &m68000_mcu_device::not_b_ds_dpm, + &m68000_mcu_device::not_b_ais_dpm, + &m68000_mcu_device::not_b_aips_dpm, + &m68000_mcu_device::not_b_pais_dpm, + &m68000_mcu_device::not_b_das_dpm, + &m68000_mcu_device::not_b_dais_dpm, + &m68000_mcu_device::not_b_adr16_dpm, + &m68000_mcu_device::not_b_adr32_dpm, + &m68000_mcu_device::not_w_ds_dpm, + &m68000_mcu_device::not_w_ais_dpm, + &m68000_mcu_device::not_w_aips_dpm, + &m68000_mcu_device::not_w_pais_dpm, + &m68000_mcu_device::not_w_das_dpm, + &m68000_mcu_device::not_w_dais_dpm, + &m68000_mcu_device::not_w_adr16_dpm, + &m68000_mcu_device::not_w_adr32_dpm, + &m68000_mcu_device::not_l_ds_dpm, + &m68000_mcu_device::not_l_ais_dpm, + &m68000_mcu_device::not_l_aips_dpm, + &m68000_mcu_device::not_l_pais_dpm, + &m68000_mcu_device::not_l_das_dpm, + &m68000_mcu_device::not_l_dais_dpm, + &m68000_mcu_device::not_l_adr16_dpm, + &m68000_mcu_device::not_l_adr32_dpm, + &m68000_mcu_device::move_ds_sr_dpm, + &m68000_mcu_device::move_ais_sr_dpm, + &m68000_mcu_device::move_aips_sr_dpm, + &m68000_mcu_device::move_pais_sr_dpm, + &m68000_mcu_device::move_das_sr_dpm, + &m68000_mcu_device::move_dais_sr_dpm, + &m68000_mcu_device::move_adr16_sr_dpm, + &m68000_mcu_device::move_adr32_sr_dpm, + &m68000_mcu_device::move_dpc_sr_dpm, + &m68000_mcu_device::move_dpci_sr_dpm, + &m68000_mcu_device::move_i16u_sr_dpm, + &m68000_mcu_device::nbcd_b_ds_dpm, + &m68000_mcu_device::nbcd_b_ais_dpm, + &m68000_mcu_device::nbcd_b_aips_dpm, + &m68000_mcu_device::nbcd_b_pais_dpm, + &m68000_mcu_device::nbcd_b_das_dpm, + &m68000_mcu_device::nbcd_b_dais_dpm, + &m68000_mcu_device::nbcd_b_adr16_dpm, + &m68000_mcu_device::nbcd_b_adr32_dpm, + &m68000_mcu_device::swap_ds_dpm, + &m68000_mcu_device::pea_ais_dpm, + &m68000_mcu_device::pea_das_dpm, + &m68000_mcu_device::pea_dais_dpm, + &m68000_mcu_device::pea_adr16_dpm, + &m68000_mcu_device::pea_adr32_dpm, + &m68000_mcu_device::pea_dpc_dpm, + &m68000_mcu_device::pea_dpci_dpm, + &m68000_mcu_device::ext_w_ds_dpm, + &m68000_mcu_device::movem_w_list_ais_dpm, + &m68000_mcu_device::movem_w_listp_pais_dpm, + &m68000_mcu_device::movem_w_list_das_dpm, + &m68000_mcu_device::movem_w_list_dais_dpm, + &m68000_mcu_device::movem_w_list_adr16_dpm, + &m68000_mcu_device::movem_w_list_adr32_dpm, + &m68000_mcu_device::ext_l_ds_dpm, + &m68000_mcu_device::movem_l_list_ais_dpm, + &m68000_mcu_device::movem_l_listp_pais_dpm, + &m68000_mcu_device::movem_l_list_das_dpm, + &m68000_mcu_device::movem_l_list_dais_dpm, + &m68000_mcu_device::movem_l_list_adr16_dpm, + &m68000_mcu_device::movem_l_list_adr32_dpm, + &m68000_mcu_device::tst_b_ds_dpm, + &m68000_mcu_device::tst_b_ais_dpm, + &m68000_mcu_device::tst_b_aips_dpm, + &m68000_mcu_device::tst_b_pais_dpm, + &m68000_mcu_device::tst_b_das_dpm, + &m68000_mcu_device::tst_b_dais_dpm, + &m68000_mcu_device::tst_b_adr16_dpm, + &m68000_mcu_device::tst_b_adr32_dpm, + &m68000_mcu_device::tst_w_ds_dpm, + &m68000_mcu_device::tst_w_ais_dpm, + &m68000_mcu_device::tst_w_aips_dpm, + &m68000_mcu_device::tst_w_pais_dpm, + &m68000_mcu_device::tst_w_das_dpm, + &m68000_mcu_device::tst_w_dais_dpm, + &m68000_mcu_device::tst_w_adr16_dpm, + &m68000_mcu_device::tst_w_adr32_dpm, + &m68000_mcu_device::tst_l_ds_dpm, + &m68000_mcu_device::tst_l_ais_dpm, + &m68000_mcu_device::tst_l_aips_dpm, + &m68000_mcu_device::tst_l_pais_dpm, + &m68000_mcu_device::tst_l_das_dpm, + &m68000_mcu_device::tst_l_dais_dpm, + &m68000_mcu_device::tst_l_adr16_dpm, + &m68000_mcu_device::tst_l_adr32_dpm, + &m68000_mcu_device::tas_ds_dpm, + &m68000_mcu_device::tas_ais_dpm, + &m68000_mcu_device::tas_aips_dpm, + &m68000_mcu_device::tas_pais_dpm, + &m68000_mcu_device::tas_das_dpm, + &m68000_mcu_device::tas_dais_dpm, + &m68000_mcu_device::tas_adr16_dpm, + &m68000_mcu_device::tas_adr32_dpm, + &m68000_mcu_device::movem_w_ais_list_dpm, + &m68000_mcu_device::movem_w_aips_list_dpm, + &m68000_mcu_device::movem_w_das_list_dpm, + &m68000_mcu_device::movem_w_dais_list_dpm, + &m68000_mcu_device::movem_w_adr16_list_dpm, + &m68000_mcu_device::movem_w_adr32_list_dpm, + &m68000_mcu_device::movem_w_dpc_list_dpm, + &m68000_mcu_device::movem_w_dpci_list_dpm, + &m68000_mcu_device::movem_l_ais_list_dpm, + &m68000_mcu_device::movem_l_aips_list_dpm, + &m68000_mcu_device::movem_l_das_list_dpm, + &m68000_mcu_device::movem_l_dais_list_dpm, + &m68000_mcu_device::movem_l_adr16_list_dpm, + &m68000_mcu_device::movem_l_adr32_list_dpm, + &m68000_mcu_device::movem_l_dpc_list_dpm, + &m68000_mcu_device::movem_l_dpci_list_dpm, + &m68000_mcu_device::trap_imm4_dpm, + &m68000_mcu_device::link_as_imm16_dpm, + &m68000_mcu_device::unlk_as_dpm, + &m68000_mcu_device::move_as_usp_dpm, + &m68000_mcu_device::move_usp_as_dpm, + &m68000_mcu_device::reset_dpm, + &m68000_mcu_device::nop_dpm, + &m68000_mcu_device::stop_i16u_dpm, + &m68000_mcu_device::rte_dpm, + &m68000_mcu_device::rts_dpm, + &m68000_mcu_device::trapv_dpm, + &m68000_mcu_device::rtr_dpm, + &m68000_mcu_device::jsr_ais_dpm, + &m68000_mcu_device::jsr_das_dpm, + &m68000_mcu_device::jsr_dais_dpm, + &m68000_mcu_device::jsr_adr16_dpm, + &m68000_mcu_device::jsr_adr32_dpm, + &m68000_mcu_device::jsr_dpc_dpm, + &m68000_mcu_device::jsr_dpci_dpm, + &m68000_mcu_device::jmp_ais_dpm, + &m68000_mcu_device::jmp_das_dpm, + &m68000_mcu_device::jmp_dais_dpm, + &m68000_mcu_device::jmp_adr16_dpm, + &m68000_mcu_device::jmp_adr32_dpm, + &m68000_mcu_device::jmp_dpc_dpm, + &m68000_mcu_device::jmp_dpci_dpm, + &m68000_mcu_device::addq_b_imm3_ds_dpm, + &m68000_mcu_device::addq_b_imm3_ais_dpm, + &m68000_mcu_device::addq_b_imm3_aips_dpm, + &m68000_mcu_device::addq_b_imm3_pais_dpm, + &m68000_mcu_device::addq_b_imm3_das_dpm, + &m68000_mcu_device::addq_b_imm3_dais_dpm, + &m68000_mcu_device::addq_b_imm3_adr16_dpm, + &m68000_mcu_device::addq_b_imm3_adr32_dpm, + &m68000_mcu_device::addq_w_imm3_ds_dpm, + &m68000_mcu_device::addq_w_imm3_as_dpm, + &m68000_mcu_device::addq_w_imm3_ais_dpm, + &m68000_mcu_device::addq_w_imm3_aips_dpm, + &m68000_mcu_device::addq_w_imm3_pais_dpm, + &m68000_mcu_device::addq_w_imm3_das_dpm, + &m68000_mcu_device::addq_w_imm3_dais_dpm, + &m68000_mcu_device::addq_w_imm3_adr16_dpm, + &m68000_mcu_device::addq_w_imm3_adr32_dpm, + &m68000_mcu_device::addq_l_imm3_ds_dpm, + &m68000_mcu_device::addq_l_imm3_as_dpm, + &m68000_mcu_device::addq_l_imm3_ais_dpm, + &m68000_mcu_device::addq_l_imm3_aips_dpm, + &m68000_mcu_device::addq_l_imm3_pais_dpm, + &m68000_mcu_device::addq_l_imm3_das_dpm, + &m68000_mcu_device::addq_l_imm3_dais_dpm, + &m68000_mcu_device::addq_l_imm3_adr16_dpm, + &m68000_mcu_device::addq_l_imm3_adr32_dpm, + &m68000_mcu_device::st_ds_dpm, + &m68000_mcu_device::dbt_ds_rel16_dpm, + &m68000_mcu_device::st_ais_dpm, + &m68000_mcu_device::st_aips_dpm, + &m68000_mcu_device::st_pais_dpm, + &m68000_mcu_device::st_das_dpm, + &m68000_mcu_device::st_dais_dpm, + &m68000_mcu_device::st_adr16_dpm, + &m68000_mcu_device::st_adr32_dpm, + &m68000_mcu_device::subq_b_imm3_ds_dpm, + &m68000_mcu_device::subq_b_imm3_ais_dpm, + &m68000_mcu_device::subq_b_imm3_aips_dpm, + &m68000_mcu_device::subq_b_imm3_pais_dpm, + &m68000_mcu_device::subq_b_imm3_das_dpm, + &m68000_mcu_device::subq_b_imm3_dais_dpm, + &m68000_mcu_device::subq_b_imm3_adr16_dpm, + &m68000_mcu_device::subq_b_imm3_adr32_dpm, + &m68000_mcu_device::subq_w_imm3_ds_dpm, + &m68000_mcu_device::subq_w_imm3_as_dpm, + &m68000_mcu_device::subq_w_imm3_ais_dpm, + &m68000_mcu_device::subq_w_imm3_aips_dpm, + &m68000_mcu_device::subq_w_imm3_pais_dpm, + &m68000_mcu_device::subq_w_imm3_das_dpm, + &m68000_mcu_device::subq_w_imm3_dais_dpm, + &m68000_mcu_device::subq_w_imm3_adr16_dpm, + &m68000_mcu_device::subq_w_imm3_adr32_dpm, + &m68000_mcu_device::subq_l_imm3_ds_dpm, + &m68000_mcu_device::subq_l_imm3_as_dpm, + &m68000_mcu_device::subq_l_imm3_ais_dpm, + &m68000_mcu_device::subq_l_imm3_aips_dpm, + &m68000_mcu_device::subq_l_imm3_pais_dpm, + &m68000_mcu_device::subq_l_imm3_das_dpm, + &m68000_mcu_device::subq_l_imm3_dais_dpm, + &m68000_mcu_device::subq_l_imm3_adr16_dpm, + &m68000_mcu_device::subq_l_imm3_adr32_dpm, + &m68000_mcu_device::sf_ds_dpm, + &m68000_mcu_device::dbra_ds_rel16_dpm, + &m68000_mcu_device::sf_ais_dpm, + &m68000_mcu_device::sf_aips_dpm, + &m68000_mcu_device::sf_pais_dpm, + &m68000_mcu_device::sf_das_dpm, + &m68000_mcu_device::sf_dais_dpm, + &m68000_mcu_device::sf_adr16_dpm, + &m68000_mcu_device::sf_adr32_dpm, + &m68000_mcu_device::shi_ds_dpm, + &m68000_mcu_device::dbhi_ds_rel16_dpm, + &m68000_mcu_device::shi_ais_dpm, + &m68000_mcu_device::shi_aips_dpm, + &m68000_mcu_device::shi_pais_dpm, + &m68000_mcu_device::shi_das_dpm, + &m68000_mcu_device::shi_dais_dpm, + &m68000_mcu_device::shi_adr16_dpm, + &m68000_mcu_device::shi_adr32_dpm, + &m68000_mcu_device::sls_ds_dpm, + &m68000_mcu_device::dbls_ds_rel16_dpm, + &m68000_mcu_device::sls_ais_dpm, + &m68000_mcu_device::sls_aips_dpm, + &m68000_mcu_device::sls_pais_dpm, + &m68000_mcu_device::sls_das_dpm, + &m68000_mcu_device::sls_dais_dpm, + &m68000_mcu_device::sls_adr16_dpm, + &m68000_mcu_device::sls_adr32_dpm, + &m68000_mcu_device::scc_ds_dpm, + &m68000_mcu_device::dbcc_ds_rel16_dpm, + &m68000_mcu_device::scc_ais_dpm, + &m68000_mcu_device::scc_aips_dpm, + &m68000_mcu_device::scc_pais_dpm, + &m68000_mcu_device::scc_das_dpm, + &m68000_mcu_device::scc_dais_dpm, + &m68000_mcu_device::scc_adr16_dpm, + &m68000_mcu_device::scc_adr32_dpm, + &m68000_mcu_device::scs_ds_dpm, + &m68000_mcu_device::dbcs_ds_rel16_dpm, + &m68000_mcu_device::scs_ais_dpm, + &m68000_mcu_device::scs_aips_dpm, + &m68000_mcu_device::scs_pais_dpm, + &m68000_mcu_device::scs_das_dpm, + &m68000_mcu_device::scs_dais_dpm, + &m68000_mcu_device::scs_adr16_dpm, + &m68000_mcu_device::scs_adr32_dpm, + &m68000_mcu_device::sne_ds_dpm, + &m68000_mcu_device::dbne_ds_rel16_dpm, + &m68000_mcu_device::sne_ais_dpm, + &m68000_mcu_device::sne_aips_dpm, + &m68000_mcu_device::sne_pais_dpm, + &m68000_mcu_device::sne_das_dpm, + &m68000_mcu_device::sne_dais_dpm, + &m68000_mcu_device::sne_adr16_dpm, + &m68000_mcu_device::sne_adr32_dpm, + &m68000_mcu_device::seq_ds_dpm, + &m68000_mcu_device::dbeq_ds_rel16_dpm, + &m68000_mcu_device::seq_ais_dpm, + &m68000_mcu_device::seq_aips_dpm, + &m68000_mcu_device::seq_pais_dpm, + &m68000_mcu_device::seq_das_dpm, + &m68000_mcu_device::seq_dais_dpm, + &m68000_mcu_device::seq_adr16_dpm, + &m68000_mcu_device::seq_adr32_dpm, + &m68000_mcu_device::svc_ds_dpm, + &m68000_mcu_device::dbvc_ds_rel16_dpm, + &m68000_mcu_device::svc_ais_dpm, + &m68000_mcu_device::svc_aips_dpm, + &m68000_mcu_device::svc_pais_dpm, + &m68000_mcu_device::svc_das_dpm, + &m68000_mcu_device::svc_dais_dpm, + &m68000_mcu_device::svc_adr16_dpm, + &m68000_mcu_device::svc_adr32_dpm, + &m68000_mcu_device::svs_ds_dpm, + &m68000_mcu_device::dbvs_ds_rel16_dpm, + &m68000_mcu_device::svs_ais_dpm, + &m68000_mcu_device::svs_aips_dpm, + &m68000_mcu_device::svs_pais_dpm, + &m68000_mcu_device::svs_das_dpm, + &m68000_mcu_device::svs_dais_dpm, + &m68000_mcu_device::svs_adr16_dpm, + &m68000_mcu_device::svs_adr32_dpm, + &m68000_mcu_device::spl_ds_dpm, + &m68000_mcu_device::dbpl_ds_rel16_dpm, + &m68000_mcu_device::spl_ais_dpm, + &m68000_mcu_device::spl_aips_dpm, + &m68000_mcu_device::spl_pais_dpm, + &m68000_mcu_device::spl_das_dpm, + &m68000_mcu_device::spl_dais_dpm, + &m68000_mcu_device::spl_adr16_dpm, + &m68000_mcu_device::spl_adr32_dpm, + &m68000_mcu_device::smi_ds_dpm, + &m68000_mcu_device::dbmi_ds_rel16_dpm, + &m68000_mcu_device::smi_ais_dpm, + &m68000_mcu_device::smi_aips_dpm, + &m68000_mcu_device::smi_pais_dpm, + &m68000_mcu_device::smi_das_dpm, + &m68000_mcu_device::smi_dais_dpm, + &m68000_mcu_device::smi_adr16_dpm, + &m68000_mcu_device::smi_adr32_dpm, + &m68000_mcu_device::sge_ds_dpm, + &m68000_mcu_device::dbge_ds_rel16_dpm, + &m68000_mcu_device::sge_ais_dpm, + &m68000_mcu_device::sge_aips_dpm, + &m68000_mcu_device::sge_pais_dpm, + &m68000_mcu_device::sge_das_dpm, + &m68000_mcu_device::sge_dais_dpm, + &m68000_mcu_device::sge_adr16_dpm, + &m68000_mcu_device::sge_adr32_dpm, + &m68000_mcu_device::slt_ds_dpm, + &m68000_mcu_device::dblt_ds_rel16_dpm, + &m68000_mcu_device::slt_ais_dpm, + &m68000_mcu_device::slt_aips_dpm, + &m68000_mcu_device::slt_pais_dpm, + &m68000_mcu_device::slt_das_dpm, + &m68000_mcu_device::slt_dais_dpm, + &m68000_mcu_device::slt_adr16_dpm, + &m68000_mcu_device::slt_adr32_dpm, + &m68000_mcu_device::sgt_ds_dpm, + &m68000_mcu_device::dbgt_ds_rel16_dpm, + &m68000_mcu_device::sgt_ais_dpm, + &m68000_mcu_device::sgt_aips_dpm, + &m68000_mcu_device::sgt_pais_dpm, + &m68000_mcu_device::sgt_das_dpm, + &m68000_mcu_device::sgt_dais_dpm, + &m68000_mcu_device::sgt_adr16_dpm, + &m68000_mcu_device::sgt_adr32_dpm, + &m68000_mcu_device::sle_ds_dpm, + &m68000_mcu_device::dble_ds_rel16_dpm, + &m68000_mcu_device::sle_ais_dpm, + &m68000_mcu_device::sle_aips_dpm, + &m68000_mcu_device::sle_pais_dpm, + &m68000_mcu_device::sle_das_dpm, + &m68000_mcu_device::sle_dais_dpm, + &m68000_mcu_device::sle_adr16_dpm, + &m68000_mcu_device::sle_adr32_dpm, + &m68000_mcu_device::bra_rel16_dpm, + &m68000_mcu_device::bra_rel8_dpm, + &m68000_mcu_device::bsr_rel16_dpm, + &m68000_mcu_device::bsr_rel8_dpm, + &m68000_mcu_device::bhi_rel16_dpm, + &m68000_mcu_device::bhi_rel8_dpm, + &m68000_mcu_device::bls_rel16_dpm, + &m68000_mcu_device::bls_rel8_dpm, + &m68000_mcu_device::bcc_rel16_dpm, + &m68000_mcu_device::bcc_rel8_dpm, + &m68000_mcu_device::bcs_rel16_dpm, + &m68000_mcu_device::bcs_rel8_dpm, + &m68000_mcu_device::bne_rel16_dpm, + &m68000_mcu_device::bne_rel8_dpm, + &m68000_mcu_device::beq_rel16_dpm, + &m68000_mcu_device::beq_rel8_dpm, + &m68000_mcu_device::bvc_rel16_dpm, + &m68000_mcu_device::bvc_rel8_dpm, + &m68000_mcu_device::bvs_rel16_dpm, + &m68000_mcu_device::bvs_rel8_dpm, + &m68000_mcu_device::bpl_rel16_dpm, + &m68000_mcu_device::bpl_rel8_dpm, + &m68000_mcu_device::bmi_rel16_dpm, + &m68000_mcu_device::bmi_rel8_dpm, + &m68000_mcu_device::bge_rel16_dpm, + &m68000_mcu_device::bge_rel8_dpm, + &m68000_mcu_device::blt_rel16_dpm, + &m68000_mcu_device::blt_rel8_dpm, + &m68000_mcu_device::bgt_rel16_dpm, + &m68000_mcu_device::bgt_rel8_dpm, + &m68000_mcu_device::ble_rel16_dpm, + &m68000_mcu_device::ble_rel8_dpm, + &m68000_mcu_device::moveq_imm8o_dd_dpm, + &m68000_mcu_device::or_b_ds_dd_dpm, + &m68000_mcu_device::or_b_ais_dd_dpm, + &m68000_mcu_device::or_b_aips_dd_dpm, + &m68000_mcu_device::or_b_pais_dd_dpm, + &m68000_mcu_device::or_b_das_dd_dpm, + &m68000_mcu_device::or_b_dais_dd_dpm, + &m68000_mcu_device::or_b_adr16_dd_dpm, + &m68000_mcu_device::or_b_adr32_dd_dpm, + &m68000_mcu_device::or_b_dpc_dd_dpm, + &m68000_mcu_device::or_b_dpci_dd_dpm, + &m68000_mcu_device::or_b_imm8_dd_dpm, + &m68000_mcu_device::or_w_ds_dd_dpm, + &m68000_mcu_device::or_w_ais_dd_dpm, + &m68000_mcu_device::or_w_aips_dd_dpm, + &m68000_mcu_device::or_w_pais_dd_dpm, + &m68000_mcu_device::or_w_das_dd_dpm, + &m68000_mcu_device::or_w_dais_dd_dpm, + &m68000_mcu_device::or_w_adr16_dd_dpm, + &m68000_mcu_device::or_w_adr32_dd_dpm, + &m68000_mcu_device::or_w_dpc_dd_dpm, + &m68000_mcu_device::or_w_dpci_dd_dpm, + &m68000_mcu_device::or_w_imm16_dd_dpm, + &m68000_mcu_device::or_l_ds_dd_dpm, + &m68000_mcu_device::or_l_ais_dd_dpm, + &m68000_mcu_device::or_l_aips_dd_dpm, + &m68000_mcu_device::or_l_pais_dd_dpm, + &m68000_mcu_device::or_l_das_dd_dpm, + &m68000_mcu_device::or_l_dais_dd_dpm, + &m68000_mcu_device::or_l_adr16_dd_dpm, + &m68000_mcu_device::or_l_adr32_dd_dpm, + &m68000_mcu_device::or_l_dpc_dd_dpm, + &m68000_mcu_device::or_l_dpci_dd_dpm, + &m68000_mcu_device::or_l_imm32_dd_dpm, + &m68000_mcu_device::divu_w_ds_dd_dpm, + &m68000_mcu_device::divu_w_ais_dd_dpm, + &m68000_mcu_device::divu_w_aips_dd_dpm, + &m68000_mcu_device::divu_w_pais_dd_dpm, + &m68000_mcu_device::divu_w_das_dd_dpm, + &m68000_mcu_device::divu_w_dais_dd_dpm, + &m68000_mcu_device::divu_w_adr16_dd_dpm, + &m68000_mcu_device::divu_w_adr32_dd_dpm, + &m68000_mcu_device::divu_w_dpc_dd_dpm, + &m68000_mcu_device::divu_w_dpci_dd_dpm, + &m68000_mcu_device::divu_w_imm16_dd_dpm, + &m68000_mcu_device::sbcd_ds_dd_dpm, + &m68000_mcu_device::sbcd_pais_paid_dpm, + &m68000_mcu_device::or_b_dd_ais_dpm, + &m68000_mcu_device::or_b_dd_aips_dpm, + &m68000_mcu_device::or_b_dd_pais_dpm, + &m68000_mcu_device::or_b_dd_das_dpm, + &m68000_mcu_device::or_b_dd_dais_dpm, + &m68000_mcu_device::or_b_dd_adr16_dpm, + &m68000_mcu_device::or_b_dd_adr32_dpm, + &m68000_mcu_device::or_w_dd_ais_dpm, + &m68000_mcu_device::or_w_dd_aips_dpm, + &m68000_mcu_device::or_w_dd_pais_dpm, + &m68000_mcu_device::or_w_dd_das_dpm, + &m68000_mcu_device::or_w_dd_dais_dpm, + &m68000_mcu_device::or_w_dd_adr16_dpm, + &m68000_mcu_device::or_w_dd_adr32_dpm, + &m68000_mcu_device::or_l_dd_ais_dpm, + &m68000_mcu_device::or_l_dd_aips_dpm, + &m68000_mcu_device::or_l_dd_pais_dpm, + &m68000_mcu_device::or_l_dd_das_dpm, + &m68000_mcu_device::or_l_dd_dais_dpm, + &m68000_mcu_device::or_l_dd_adr16_dpm, + &m68000_mcu_device::or_l_dd_adr32_dpm, + &m68000_mcu_device::divs_w_ds_dd_dpm, + &m68000_mcu_device::divs_w_ais_dd_dpm, + &m68000_mcu_device::divs_w_aips_dd_dpm, + &m68000_mcu_device::divs_w_pais_dd_dpm, + &m68000_mcu_device::divs_w_das_dd_dpm, + &m68000_mcu_device::divs_w_dais_dd_dpm, + &m68000_mcu_device::divs_w_adr16_dd_dpm, + &m68000_mcu_device::divs_w_adr32_dd_dpm, + &m68000_mcu_device::divs_w_dpc_dd_dpm, + &m68000_mcu_device::divs_w_dpci_dd_dpm, + &m68000_mcu_device::divs_w_imm16_dd_dpm, + &m68000_mcu_device::sub_b_ds_dd_dpm, + &m68000_mcu_device::sub_b_ais_dd_dpm, + &m68000_mcu_device::sub_b_aips_dd_dpm, + &m68000_mcu_device::sub_b_pais_dd_dpm, + &m68000_mcu_device::sub_b_das_dd_dpm, + &m68000_mcu_device::sub_b_dais_dd_dpm, + &m68000_mcu_device::sub_b_adr16_dd_dpm, + &m68000_mcu_device::sub_b_adr32_dd_dpm, + &m68000_mcu_device::sub_b_dpc_dd_dpm, + &m68000_mcu_device::sub_b_dpci_dd_dpm, + &m68000_mcu_device::sub_b_imm8_dd_dpm, + &m68000_mcu_device::sub_w_ds_dd_dpm, + &m68000_mcu_device::sub_w_as_dd_dpm, + &m68000_mcu_device::sub_w_ais_dd_dpm, + &m68000_mcu_device::sub_w_aips_dd_dpm, + &m68000_mcu_device::sub_w_pais_dd_dpm, + &m68000_mcu_device::sub_w_das_dd_dpm, + &m68000_mcu_device::sub_w_dais_dd_dpm, + &m68000_mcu_device::sub_w_adr16_dd_dpm, + &m68000_mcu_device::sub_w_adr32_dd_dpm, + &m68000_mcu_device::sub_w_dpc_dd_dpm, + &m68000_mcu_device::sub_w_dpci_dd_dpm, + &m68000_mcu_device::sub_w_imm16_dd_dpm, + &m68000_mcu_device::sub_l_ds_dd_dpm, + &m68000_mcu_device::sub_l_as_dd_dpm, + &m68000_mcu_device::sub_l_ais_dd_dpm, + &m68000_mcu_device::sub_l_aips_dd_dpm, + &m68000_mcu_device::sub_l_pais_dd_dpm, + &m68000_mcu_device::sub_l_das_dd_dpm, + &m68000_mcu_device::sub_l_dais_dd_dpm, + &m68000_mcu_device::sub_l_adr16_dd_dpm, + &m68000_mcu_device::sub_l_adr32_dd_dpm, + &m68000_mcu_device::sub_l_dpc_dd_dpm, + &m68000_mcu_device::sub_l_dpci_dd_dpm, + &m68000_mcu_device::sub_l_imm32_dd_dpm, + &m68000_mcu_device::suba_w_ds_ad_dpm, + &m68000_mcu_device::suba_w_as_ad_dpm, + &m68000_mcu_device::suba_w_ais_ad_dpm, + &m68000_mcu_device::suba_w_aips_ad_dpm, + &m68000_mcu_device::suba_w_pais_ad_dpm, + &m68000_mcu_device::suba_w_das_ad_dpm, + &m68000_mcu_device::suba_w_dais_ad_dpm, + &m68000_mcu_device::suba_w_adr16_ad_dpm, + &m68000_mcu_device::suba_w_adr32_ad_dpm, + &m68000_mcu_device::suba_w_dpc_ad_dpm, + &m68000_mcu_device::suba_w_dpci_ad_dpm, + &m68000_mcu_device::suba_w_imm16_ad_dpm, + &m68000_mcu_device::subx_b_ds_dd_dpm, + &m68000_mcu_device::subx_b_pais_paid_dpm, + &m68000_mcu_device::sub_b_dd_ais_dpm, + &m68000_mcu_device::sub_b_dd_aips_dpm, + &m68000_mcu_device::sub_b_dd_pais_dpm, + &m68000_mcu_device::sub_b_dd_das_dpm, + &m68000_mcu_device::sub_b_dd_dais_dpm, + &m68000_mcu_device::sub_b_dd_adr16_dpm, + &m68000_mcu_device::sub_b_dd_adr32_dpm, + &m68000_mcu_device::subx_w_ds_dd_dpm, + &m68000_mcu_device::subx_w_pais_paid_dpm, + &m68000_mcu_device::sub_w_dd_ais_dpm, + &m68000_mcu_device::sub_w_dd_aips_dpm, + &m68000_mcu_device::sub_w_dd_pais_dpm, + &m68000_mcu_device::sub_w_dd_das_dpm, + &m68000_mcu_device::sub_w_dd_dais_dpm, + &m68000_mcu_device::sub_w_dd_adr16_dpm, + &m68000_mcu_device::sub_w_dd_adr32_dpm, + &m68000_mcu_device::subx_l_ds_dd_dpm, + &m68000_mcu_device::subx_l_pais_paid_dpm, + &m68000_mcu_device::sub_l_dd_ais_dpm, + &m68000_mcu_device::sub_l_dd_aips_dpm, + &m68000_mcu_device::sub_l_dd_pais_dpm, + &m68000_mcu_device::sub_l_dd_das_dpm, + &m68000_mcu_device::sub_l_dd_dais_dpm, + &m68000_mcu_device::sub_l_dd_adr16_dpm, + &m68000_mcu_device::sub_l_dd_adr32_dpm, + &m68000_mcu_device::suba_l_ds_ad_dpm, + &m68000_mcu_device::suba_l_as_ad_dpm, + &m68000_mcu_device::suba_l_ais_ad_dpm, + &m68000_mcu_device::suba_l_aips_ad_dpm, + &m68000_mcu_device::suba_l_pais_ad_dpm, + &m68000_mcu_device::suba_l_das_ad_dpm, + &m68000_mcu_device::suba_l_dais_ad_dpm, + &m68000_mcu_device::suba_l_adr16_ad_dpm, + &m68000_mcu_device::suba_l_adr32_ad_dpm, + &m68000_mcu_device::suba_l_dpc_ad_dpm, + &m68000_mcu_device::suba_l_dpci_ad_dpm, + &m68000_mcu_device::suba_l_imm32_ad_dpm, + &m68000_mcu_device::cmp_b_ds_dd_dpm, + &m68000_mcu_device::cmp_b_ais_dd_dpm, + &m68000_mcu_device::cmp_b_aips_dd_dpm, + &m68000_mcu_device::cmp_b_pais_dd_dpm, + &m68000_mcu_device::cmp_b_das_dd_dpm, + &m68000_mcu_device::cmp_b_dais_dd_dpm, + &m68000_mcu_device::cmp_b_adr16_dd_dpm, + &m68000_mcu_device::cmp_b_adr32_dd_dpm, + &m68000_mcu_device::cmp_b_dpc_dd_dpm, + &m68000_mcu_device::cmp_b_dpci_dd_dpm, + &m68000_mcu_device::cmp_b_imm8_dd_dpm, + &m68000_mcu_device::cmp_w_ds_dd_dpm, + &m68000_mcu_device::cmp_w_as_dd_dpm, + &m68000_mcu_device::cmp_w_ais_dd_dpm, + &m68000_mcu_device::cmp_w_aips_dd_dpm, + &m68000_mcu_device::cmp_w_pais_dd_dpm, + &m68000_mcu_device::cmp_w_das_dd_dpm, + &m68000_mcu_device::cmp_w_dais_dd_dpm, + &m68000_mcu_device::cmp_w_adr16_dd_dpm, + &m68000_mcu_device::cmp_w_adr32_dd_dpm, + &m68000_mcu_device::cmp_w_dpc_dd_dpm, + &m68000_mcu_device::cmp_w_dpci_dd_dpm, + &m68000_mcu_device::cmp_w_imm16_dd_dpm, + &m68000_mcu_device::cmp_l_ds_dd_dpm, + &m68000_mcu_device::cmp_l_as_dd_dpm, + &m68000_mcu_device::cmp_l_ais_dd_dpm, + &m68000_mcu_device::cmp_l_aips_dd_dpm, + &m68000_mcu_device::cmp_l_pais_dd_dpm, + &m68000_mcu_device::cmp_l_das_dd_dpm, + &m68000_mcu_device::cmp_l_dais_dd_dpm, + &m68000_mcu_device::cmp_l_adr16_dd_dpm, + &m68000_mcu_device::cmp_l_adr32_dd_dpm, + &m68000_mcu_device::cmp_l_dpc_dd_dpm, + &m68000_mcu_device::cmp_l_dpci_dd_dpm, + &m68000_mcu_device::cmp_l_imm32_dd_dpm, + &m68000_mcu_device::cmpa_w_ds_ad_dpm, + &m68000_mcu_device::cmpa_w_as_ad_dpm, + &m68000_mcu_device::cmpa_w_ais_ad_dpm, + &m68000_mcu_device::cmpa_w_aips_ad_dpm, + &m68000_mcu_device::cmpa_w_pais_ad_dpm, + &m68000_mcu_device::cmpa_w_das_ad_dpm, + &m68000_mcu_device::cmpa_w_dais_ad_dpm, + &m68000_mcu_device::cmpa_w_adr16_ad_dpm, + &m68000_mcu_device::cmpa_w_adr32_ad_dpm, + &m68000_mcu_device::cmpa_w_dpc_ad_dpm, + &m68000_mcu_device::cmpa_w_dpci_ad_dpm, + &m68000_mcu_device::cmpa_w_imm16_ad_dpm, + &m68000_mcu_device::eor_b_dd_ds_dpm, + &m68000_mcu_device::cmpm_b_aips_aipd_dpm, + &m68000_mcu_device::eor_b_dd_ais_dpm, + &m68000_mcu_device::eor_b_dd_aips_dpm, + &m68000_mcu_device::eor_b_dd_pais_dpm, + &m68000_mcu_device::eor_b_dd_das_dpm, + &m68000_mcu_device::eor_b_dd_dais_dpm, + &m68000_mcu_device::eor_b_dd_adr16_dpm, + &m68000_mcu_device::eor_b_dd_adr32_dpm, + &m68000_mcu_device::eor_w_dd_ds_dpm, + &m68000_mcu_device::cmpm_w_aips_aipd_dpm, + &m68000_mcu_device::eor_w_dd_ais_dpm, + &m68000_mcu_device::eor_w_dd_aips_dpm, + &m68000_mcu_device::eor_w_dd_pais_dpm, + &m68000_mcu_device::eor_w_dd_das_dpm, + &m68000_mcu_device::eor_w_dd_dais_dpm, + &m68000_mcu_device::eor_w_dd_adr16_dpm, + &m68000_mcu_device::eor_w_dd_adr32_dpm, + &m68000_mcu_device::eor_l_dd_ds_dpm, + &m68000_mcu_device::cmpm_l_aips_aipd_dpm, + &m68000_mcu_device::eor_l_dd_ais_dpm, + &m68000_mcu_device::eor_l_dd_aips_dpm, + &m68000_mcu_device::eor_l_dd_pais_dpm, + &m68000_mcu_device::eor_l_dd_das_dpm, + &m68000_mcu_device::eor_l_dd_dais_dpm, + &m68000_mcu_device::eor_l_dd_adr16_dpm, + &m68000_mcu_device::eor_l_dd_adr32_dpm, + &m68000_mcu_device::cmpa_l_ds_ad_dpm, + &m68000_mcu_device::cmpa_l_as_ad_dpm, + &m68000_mcu_device::cmpa_l_ais_ad_dpm, + &m68000_mcu_device::cmpa_l_aips_ad_dpm, + &m68000_mcu_device::cmpa_l_pais_ad_dpm, + &m68000_mcu_device::cmpa_l_das_ad_dpm, + &m68000_mcu_device::cmpa_l_dais_ad_dpm, + &m68000_mcu_device::cmpa_l_adr16_ad_dpm, + &m68000_mcu_device::cmpa_l_adr32_ad_dpm, + &m68000_mcu_device::cmpa_l_dpc_ad_dpm, + &m68000_mcu_device::cmpa_l_dpci_ad_dpm, + &m68000_mcu_device::cmpa_l_imm32_ad_dpm, + &m68000_mcu_device::and_b_ds_dd_dpm, + &m68000_mcu_device::and_b_ais_dd_dpm, + &m68000_mcu_device::and_b_aips_dd_dpm, + &m68000_mcu_device::and_b_pais_dd_dpm, + &m68000_mcu_device::and_b_das_dd_dpm, + &m68000_mcu_device::and_b_dais_dd_dpm, + &m68000_mcu_device::and_b_adr16_dd_dpm, + &m68000_mcu_device::and_b_adr32_dd_dpm, + &m68000_mcu_device::and_b_dpc_dd_dpm, + &m68000_mcu_device::and_b_dpci_dd_dpm, + &m68000_mcu_device::and_b_imm8_dd_dpm, + &m68000_mcu_device::and_w_ds_dd_dpm, + &m68000_mcu_device::and_w_ais_dd_dpm, + &m68000_mcu_device::and_w_aips_dd_dpm, + &m68000_mcu_device::and_w_pais_dd_dpm, + &m68000_mcu_device::and_w_das_dd_dpm, + &m68000_mcu_device::and_w_dais_dd_dpm, + &m68000_mcu_device::and_w_adr16_dd_dpm, + &m68000_mcu_device::and_w_adr32_dd_dpm, + &m68000_mcu_device::and_w_dpc_dd_dpm, + &m68000_mcu_device::and_w_dpci_dd_dpm, + &m68000_mcu_device::and_w_imm16_dd_dpm, + &m68000_mcu_device::and_l_ds_dd_dpm, + &m68000_mcu_device::and_l_ais_dd_dpm, + &m68000_mcu_device::and_l_aips_dd_dpm, + &m68000_mcu_device::and_l_pais_dd_dpm, + &m68000_mcu_device::and_l_das_dd_dpm, + &m68000_mcu_device::and_l_dais_dd_dpm, + &m68000_mcu_device::and_l_adr16_dd_dpm, + &m68000_mcu_device::and_l_adr32_dd_dpm, + &m68000_mcu_device::and_l_dpc_dd_dpm, + &m68000_mcu_device::and_l_dpci_dd_dpm, + &m68000_mcu_device::and_l_imm32_dd_dpm, + &m68000_mcu_device::mulu_w_ds_dd_dpm, + &m68000_mcu_device::mulu_w_ais_dd_dpm, + &m68000_mcu_device::mulu_w_aips_dd_dpm, + &m68000_mcu_device::mulu_w_pais_dd_dpm, + &m68000_mcu_device::mulu_w_das_dd_dpm, + &m68000_mcu_device::mulu_w_dais_dd_dpm, + &m68000_mcu_device::mulu_w_adr16_dd_dpm, + &m68000_mcu_device::mulu_w_adr32_dd_dpm, + &m68000_mcu_device::mulu_w_dpc_dd_dpm, + &m68000_mcu_device::mulu_w_dpci_dd_dpm, + &m68000_mcu_device::mulu_w_imm16_dd_dpm, + &m68000_mcu_device::abcd_ds_dd_dpm, + &m68000_mcu_device::abcd_pais_paid_dpm, + &m68000_mcu_device::and_b_dd_ais_dpm, + &m68000_mcu_device::and_b_dd_aips_dpm, + &m68000_mcu_device::and_b_dd_pais_dpm, + &m68000_mcu_device::and_b_dd_das_dpm, + &m68000_mcu_device::and_b_dd_dais_dpm, + &m68000_mcu_device::and_b_dd_adr16_dpm, + &m68000_mcu_device::and_b_dd_adr32_dpm, + &m68000_mcu_device::exg_dd_ds_dpm, + &m68000_mcu_device::exg_ad_as_dpm, + &m68000_mcu_device::and_w_dd_ais_dpm, + &m68000_mcu_device::and_w_dd_aips_dpm, + &m68000_mcu_device::and_w_dd_pais_dpm, + &m68000_mcu_device::and_w_dd_das_dpm, + &m68000_mcu_device::and_w_dd_dais_dpm, + &m68000_mcu_device::and_w_dd_adr16_dpm, + &m68000_mcu_device::and_w_dd_adr32_dpm, + &m68000_mcu_device::exg_dd_as_dpm, + &m68000_mcu_device::and_l_dd_ais_dpm, + &m68000_mcu_device::and_l_dd_aips_dpm, + &m68000_mcu_device::and_l_dd_pais_dpm, + &m68000_mcu_device::and_l_dd_das_dpm, + &m68000_mcu_device::and_l_dd_dais_dpm, + &m68000_mcu_device::and_l_dd_adr16_dpm, + &m68000_mcu_device::and_l_dd_adr32_dpm, + &m68000_mcu_device::muls_w_ds_dd_dpm, + &m68000_mcu_device::muls_w_ais_dd_dpm, + &m68000_mcu_device::muls_w_aips_dd_dpm, + &m68000_mcu_device::muls_w_pais_dd_dpm, + &m68000_mcu_device::muls_w_das_dd_dpm, + &m68000_mcu_device::muls_w_dais_dd_dpm, + &m68000_mcu_device::muls_w_adr16_dd_dpm, + &m68000_mcu_device::muls_w_adr32_dd_dpm, + &m68000_mcu_device::muls_w_dpc_dd_dpm, + &m68000_mcu_device::muls_w_dpci_dd_dpm, + &m68000_mcu_device::muls_w_imm16_dd_dpm, + &m68000_mcu_device::add_b_ds_dd_dpm, + &m68000_mcu_device::add_b_ais_dd_dpm, + &m68000_mcu_device::add_b_aips_dd_dpm, + &m68000_mcu_device::add_b_pais_dd_dpm, + &m68000_mcu_device::add_b_das_dd_dpm, + &m68000_mcu_device::add_b_dais_dd_dpm, + &m68000_mcu_device::add_b_adr16_dd_dpm, + &m68000_mcu_device::add_b_adr32_dd_dpm, + &m68000_mcu_device::add_b_dpc_dd_dpm, + &m68000_mcu_device::add_b_dpci_dd_dpm, + &m68000_mcu_device::add_b_imm8_dd_dpm, + &m68000_mcu_device::add_w_ds_dd_dpm, + &m68000_mcu_device::add_w_as_dd_dpm, + &m68000_mcu_device::add_w_ais_dd_dpm, + &m68000_mcu_device::add_w_aips_dd_dpm, + &m68000_mcu_device::add_w_pais_dd_dpm, + &m68000_mcu_device::add_w_das_dd_dpm, + &m68000_mcu_device::add_w_dais_dd_dpm, + &m68000_mcu_device::add_w_adr16_dd_dpm, + &m68000_mcu_device::add_w_adr32_dd_dpm, + &m68000_mcu_device::add_w_dpc_dd_dpm, + &m68000_mcu_device::add_w_dpci_dd_dpm, + &m68000_mcu_device::add_w_imm16_dd_dpm, + &m68000_mcu_device::add_l_ds_dd_dpm, + &m68000_mcu_device::add_l_as_dd_dpm, + &m68000_mcu_device::add_l_ais_dd_dpm, + &m68000_mcu_device::add_l_aips_dd_dpm, + &m68000_mcu_device::add_l_pais_dd_dpm, + &m68000_mcu_device::add_l_das_dd_dpm, + &m68000_mcu_device::add_l_dais_dd_dpm, + &m68000_mcu_device::add_l_adr16_dd_dpm, + &m68000_mcu_device::add_l_adr32_dd_dpm, + &m68000_mcu_device::add_l_dpc_dd_dpm, + &m68000_mcu_device::add_l_dpci_dd_dpm, + &m68000_mcu_device::add_l_imm32_dd_dpm, + &m68000_mcu_device::adda_w_ds_ad_dpm, + &m68000_mcu_device::adda_w_as_ad_dpm, + &m68000_mcu_device::adda_w_ais_ad_dpm, + &m68000_mcu_device::adda_w_aips_ad_dpm, + &m68000_mcu_device::adda_w_pais_ad_dpm, + &m68000_mcu_device::adda_w_das_ad_dpm, + &m68000_mcu_device::adda_w_dais_ad_dpm, + &m68000_mcu_device::adda_w_adr16_ad_dpm, + &m68000_mcu_device::adda_w_adr32_ad_dpm, + &m68000_mcu_device::adda_w_dpc_ad_dpm, + &m68000_mcu_device::adda_w_dpci_ad_dpm, + &m68000_mcu_device::adda_w_imm16_ad_dpm, + &m68000_mcu_device::addx_b_ds_dd_dpm, + &m68000_mcu_device::addx_b_pais_paid_dpm, + &m68000_mcu_device::add_b_dd_ais_dpm, + &m68000_mcu_device::add_b_dd_aips_dpm, + &m68000_mcu_device::add_b_dd_pais_dpm, + &m68000_mcu_device::add_b_dd_das_dpm, + &m68000_mcu_device::add_b_dd_dais_dpm, + &m68000_mcu_device::add_b_dd_adr16_dpm, + &m68000_mcu_device::add_b_dd_adr32_dpm, + &m68000_mcu_device::addx_w_ds_dd_dpm, + &m68000_mcu_device::addx_w_pais_paid_dpm, + &m68000_mcu_device::add_w_dd_ais_dpm, + &m68000_mcu_device::add_w_dd_aips_dpm, + &m68000_mcu_device::add_w_dd_pais_dpm, + &m68000_mcu_device::add_w_dd_das_dpm, + &m68000_mcu_device::add_w_dd_dais_dpm, + &m68000_mcu_device::add_w_dd_adr16_dpm, + &m68000_mcu_device::add_w_dd_adr32_dpm, + &m68000_mcu_device::addx_l_ds_dd_dpm, + &m68000_mcu_device::addx_l_pais_paid_dpm, + &m68000_mcu_device::add_l_dd_ais_dpm, + &m68000_mcu_device::add_l_dd_aips_dpm, + &m68000_mcu_device::add_l_dd_pais_dpm, + &m68000_mcu_device::add_l_dd_das_dpm, + &m68000_mcu_device::add_l_dd_dais_dpm, + &m68000_mcu_device::add_l_dd_adr16_dpm, + &m68000_mcu_device::add_l_dd_adr32_dpm, + &m68000_mcu_device::adda_l_ds_ad_dpm, + &m68000_mcu_device::adda_l_as_ad_dpm, + &m68000_mcu_device::adda_l_ais_ad_dpm, + &m68000_mcu_device::adda_l_aips_ad_dpm, + &m68000_mcu_device::adda_l_pais_ad_dpm, + &m68000_mcu_device::adda_l_das_ad_dpm, + &m68000_mcu_device::adda_l_dais_ad_dpm, + &m68000_mcu_device::adda_l_adr16_ad_dpm, + &m68000_mcu_device::adda_l_adr32_ad_dpm, + &m68000_mcu_device::adda_l_dpc_ad_dpm, + &m68000_mcu_device::adda_l_dpci_ad_dpm, + &m68000_mcu_device::adda_l_imm32_ad_dpm, + &m68000_mcu_device::asr_b_imm3_ds_dpm, + &m68000_mcu_device::lsr_b_imm3_ds_dpm, + &m68000_mcu_device::roxr_b_imm3_ds_dpm, + &m68000_mcu_device::ror_b_imm3_ds_dpm, + &m68000_mcu_device::asr_b_dd_ds_dpm, + &m68000_mcu_device::lsr_b_dd_ds_dpm, + &m68000_mcu_device::roxr_b_dd_ds_dpm, + &m68000_mcu_device::ror_b_dd_ds_dpm, + &m68000_mcu_device::asr_w_imm3_ds_dpm, + &m68000_mcu_device::lsr_w_imm3_ds_dpm, + &m68000_mcu_device::roxr_w_imm3_ds_dpm, + &m68000_mcu_device::ror_w_imm3_ds_dpm, + &m68000_mcu_device::asr_w_dd_ds_dpm, + &m68000_mcu_device::lsr_w_dd_ds_dpm, + &m68000_mcu_device::roxr_w_dd_ds_dpm, + &m68000_mcu_device::ror_w_dd_ds_dpm, + &m68000_mcu_device::asr_l_imm3_ds_dpm, + &m68000_mcu_device::lsr_l_imm3_ds_dpm, + &m68000_mcu_device::roxr_l_imm3_ds_dpm, + &m68000_mcu_device::ror_l_imm3_ds_dpm, + &m68000_mcu_device::asr_l_dd_ds_dpm, + &m68000_mcu_device::lsr_l_dd_ds_dpm, + &m68000_mcu_device::roxr_l_dd_ds_dpm, + &m68000_mcu_device::ror_l_dd_ds_dpm, + &m68000_mcu_device::asr_ais_dpm, + &m68000_mcu_device::asr_aips_dpm, + &m68000_mcu_device::asr_pais_dpm, + &m68000_mcu_device::asr_das_dpm, + &m68000_mcu_device::asr_dais_dpm, + &m68000_mcu_device::asr_adr16_dpm, + &m68000_mcu_device::asr_adr32_dpm, + &m68000_mcu_device::asl_b_imm3_ds_dpm, + &m68000_mcu_device::lsl_b_imm3_ds_dpm, + &m68000_mcu_device::roxl_b_imm3_ds_dpm, + &m68000_mcu_device::rol_b_imm3_ds_dpm, + &m68000_mcu_device::asl_b_dd_ds_dpm, + &m68000_mcu_device::lsl_b_dd_ds_dpm, + &m68000_mcu_device::roxl_b_dd_ds_dpm, + &m68000_mcu_device::rol_b_dd_ds_dpm, + &m68000_mcu_device::asl_w_imm3_ds_dpm, + &m68000_mcu_device::lsl_w_imm3_ds_dpm, + &m68000_mcu_device::roxl_w_imm3_ds_dpm, + &m68000_mcu_device::rol_w_imm3_ds_dpm, + &m68000_mcu_device::asl_w_dd_ds_dpm, + &m68000_mcu_device::lsl_w_dd_ds_dpm, + &m68000_mcu_device::roxl_w_dd_ds_dpm, + &m68000_mcu_device::rol_w_dd_ds_dpm, + &m68000_mcu_device::asl_l_imm3_ds_dpm, + &m68000_mcu_device::lsl_l_imm3_ds_dpm, + &m68000_mcu_device::roxl_l_imm3_ds_dpm, + &m68000_mcu_device::rol_l_imm3_ds_dpm, + &m68000_mcu_device::asl_l_dd_ds_dpm, + &m68000_mcu_device::lsl_l_dd_ds_dpm, + &m68000_mcu_device::roxl_l_dd_ds_dpm, + &m68000_mcu_device::rol_l_dd_ds_dpm, + &m68000_mcu_device::asl_ais_dpm, + &m68000_mcu_device::asl_aips_dpm, + &m68000_mcu_device::asl_pais_dpm, + &m68000_mcu_device::asl_das_dpm, + &m68000_mcu_device::asl_dais_dpm, + &m68000_mcu_device::asl_adr16_dpm, + &m68000_mcu_device::asl_adr32_dpm, + &m68000_mcu_device::lsr_ais_dpm, + &m68000_mcu_device::lsr_aips_dpm, + &m68000_mcu_device::lsr_pais_dpm, + &m68000_mcu_device::lsr_das_dpm, + &m68000_mcu_device::lsr_dais_dpm, + &m68000_mcu_device::lsr_adr16_dpm, + &m68000_mcu_device::lsr_adr32_dpm, + &m68000_mcu_device::lsl_ais_dpm, + &m68000_mcu_device::lsl_aips_dpm, + &m68000_mcu_device::lsl_pais_dpm, + &m68000_mcu_device::lsl_das_dpm, + &m68000_mcu_device::lsl_dais_dpm, + &m68000_mcu_device::lsl_adr16_dpm, + &m68000_mcu_device::lsl_adr32_dpm, + &m68000_mcu_device::roxr_ais_dpm, + &m68000_mcu_device::roxr_aips_dpm, + &m68000_mcu_device::roxr_pais_dpm, + &m68000_mcu_device::roxr_das_dpm, + &m68000_mcu_device::roxr_dais_dpm, + &m68000_mcu_device::roxr_adr16_dpm, + &m68000_mcu_device::roxr_adr32_dpm, + &m68000_mcu_device::roxl_ais_dpm, + &m68000_mcu_device::roxl_aips_dpm, + &m68000_mcu_device::roxl_pais_dpm, + &m68000_mcu_device::roxl_das_dpm, + &m68000_mcu_device::roxl_dais_dpm, + &m68000_mcu_device::roxl_adr16_dpm, + &m68000_mcu_device::roxl_adr32_dpm, + &m68000_mcu_device::ror_ais_dpm, + &m68000_mcu_device::ror_aips_dpm, + &m68000_mcu_device::ror_pais_dpm, + &m68000_mcu_device::ror_das_dpm, + &m68000_mcu_device::ror_dais_dpm, + &m68000_mcu_device::ror_adr16_dpm, + &m68000_mcu_device::ror_adr32_dpm, + &m68000_mcu_device::rol_ais_dpm, + &m68000_mcu_device::rol_aips_dpm, + &m68000_mcu_device::rol_pais_dpm, + &m68000_mcu_device::rol_das_dpm, + &m68000_mcu_device::rol_dais_dpm, + &m68000_mcu_device::rol_adr16_dpm, + &m68000_mcu_device::rol_adr32_dpm, }; diff --git a/src/devices/cpu/m68000/m68000-sifm.cpp b/src/devices/cpu/m68000/m68000mcu-sifm.cpp similarity index 96% rename from src/devices/cpu/m68000/m68000-sifm.cpp rename to src/devices/cpu/m68000/m68000mcu-sifm.cpp index a634899dd46..0f6d00d0ee1 100644 --- a/src/devices/cpu/m68000/m68000-sifm.cpp +++ b/src/devices/cpu/m68000/m68000mcu-sifm.cpp @@ -1,11 +1,11 @@ // Instruction handlers for the m68000 (indirect, full, mcu) // -// Generated by m68000gen.py sifm m68000.lst m68000-sifm.cpp +// Generated by m68000gen.py sifm m68000.lst m68000mcu-sifm.cpp #include "emu.h" -#include "m68000.h" +#include "m68000mcu.h" -void m68000_device::state_reset_ifm() +void m68000_mcu_device::state_reset_ifm() { // 002 rstp3 m_icount -= 2; @@ -172,7 +172,7 @@ void m68000_device::state_reset_ifm() return; } -void m68000_device::state_bus_error_ifm() +void m68000_mcu_device::state_bus_error_ifm() { // 003 bser1 m_ssw = m_base_ssw | (m_sr & SR_S ? SSW_S : 0); @@ -451,7 +451,7 @@ void m68000_device::state_bus_error_ifm() return; } -void m68000_device::state_address_error_ifm() +void m68000_mcu_device::state_address_error_ifm() { // 003 bser1 m_ssw = m_base_ssw | (m_sr & SR_S ? SSW_S : 0); @@ -730,13 +730,13 @@ void m68000_device::state_address_error_ifm() return; } -void m68000_device::state_double_fault_ifm() +void m68000_mcu_device::state_double_fault_ifm() { // 001 halt1 m_icount = m_bcount; } -void m68000_device::state_interrupt_ifm() +void m68000_mcu_device::state_interrupt_ifm() { // 1c4 itlx1 m_ftu = m_sr; @@ -956,7 +956,7 @@ void m68000_device::state_interrupt_ifm() return; } -void m68000_device::state_trace_ifm() +void m68000_mcu_device::state_trace_ifm() { // 1c0 trac1 m_ftu = m_sr; @@ -1140,7 +1140,7 @@ void m68000_device::state_trace_ifm() return; } -void m68000_device::state_illegal_ifm() +void m68000_mcu_device::state_illegal_ifm() { // 1c0 trac1 m_ftu = m_sr; @@ -1324,7 +1324,7 @@ void m68000_device::state_illegal_ifm() return; } -void m68000_device::state_priviledge_ifm() +void m68000_mcu_device::state_priviledge_ifm() { // 1c0 trac1 m_ftu = m_sr; @@ -1508,7 +1508,7 @@ void m68000_device::state_priviledge_ifm() return; } -void m68000_device::state_linea_ifm() +void m68000_mcu_device::state_linea_ifm() { // 1c0 trac1 m_ftu = m_sr; @@ -1692,7 +1692,7 @@ void m68000_device::state_linea_ifm() return; } -void m68000_device::state_linef_ifm() +void m68000_mcu_device::state_linef_ifm() { // 1c0 trac1 m_ftu = m_sr; @@ -1876,7 +1876,7 @@ void m68000_device::state_linef_ifm() return; } -void m68000_device::ori_b_imm8_ds_ifm() // 0000 fff8 +void m68000_mcu_device::ori_b_imm8_ds_ifm() // 0000 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -1941,7 +1941,7 @@ void m68000_device::ori_b_imm8_ds_ifm() // 0000 fff8 return; } -void m68000_device::ori_b_imm8_ais_ifm() // 0010 fff8 +void m68000_mcu_device::ori_b_imm8_ais_ifm() // 0010 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -2041,7 +2041,7 @@ void m68000_device::ori_b_imm8_ais_ifm() // 0010 fff8 return; } -void m68000_device::ori_b_imm8_aips_ifm() // 0018 fff8 +void m68000_mcu_device::ori_b_imm8_aips_ifm() // 0018 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -2146,7 +2146,7 @@ void m68000_device::ori_b_imm8_aips_ifm() // 0018 fff8 return; } -void m68000_device::ori_b_imm8_pais_ifm() // 0020 fff8 +void m68000_mcu_device::ori_b_imm8_pais_ifm() // 0020 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -2253,7 +2253,7 @@ void m68000_device::ori_b_imm8_pais_ifm() // 0020 fff8 return; } -void m68000_device::ori_b_imm8_das_ifm() // 0028 fff8 +void m68000_mcu_device::ori_b_imm8_das_ifm() // 0028 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -2376,7 +2376,7 @@ void m68000_device::ori_b_imm8_das_ifm() // 0028 fff8 return; } -void m68000_device::ori_b_imm8_dais_ifm() // 0030 fff8 +void m68000_mcu_device::ori_b_imm8_dais_ifm() // 0030 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -2539,7 +2539,7 @@ adsw2: return; } -void m68000_device::ori_b_imm8_adr16_ifm() // 0038 ffff +void m68000_mcu_device::ori_b_imm8_adr16_ifm() // 0038 ffff { // 2b9 o#w1 m_aob = m_au; @@ -2661,7 +2661,7 @@ void m68000_device::ori_b_imm8_adr16_ifm() // 0038 ffff return; } -void m68000_device::ori_b_imm8_adr32_ifm() // 0039 ffff +void m68000_mcu_device::ori_b_imm8_adr32_ifm() // 0039 ffff { // 2b9 o#w1 m_aob = m_au; @@ -2805,7 +2805,7 @@ void m68000_device::ori_b_imm8_adr32_ifm() // 0039 ffff return; } -void m68000_device::ori_imm8_ccr_ifm() // 003c ffff +void m68000_mcu_device::ori_imm8_ccr_ifm() // 003c ffff { // 2b9 o#w1 m_aob = m_au; @@ -2910,7 +2910,7 @@ void m68000_device::ori_imm8_ccr_ifm() // 003c ffff return; } -void m68000_device::ori_w_imm16_ds_ifm() // 0040 fff8 +void m68000_mcu_device::ori_w_imm16_ds_ifm() // 0040 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -2975,7 +2975,7 @@ void m68000_device::ori_w_imm16_ds_ifm() // 0040 fff8 return; } -void m68000_device::ori_w_imm16_ais_ifm() // 0050 fff8 +void m68000_mcu_device::ori_w_imm16_ais_ifm() // 0050 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -3083,7 +3083,7 @@ void m68000_device::ori_w_imm16_ais_ifm() // 0050 fff8 return; } -void m68000_device::ori_w_imm16_aips_ifm() // 0058 fff8 +void m68000_mcu_device::ori_w_imm16_aips_ifm() // 0058 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -3196,7 +3196,7 @@ void m68000_device::ori_w_imm16_aips_ifm() // 0058 fff8 return; } -void m68000_device::ori_w_imm16_pais_ifm() // 0060 fff8 +void m68000_mcu_device::ori_w_imm16_pais_ifm() // 0060 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -3311,7 +3311,7 @@ void m68000_device::ori_w_imm16_pais_ifm() // 0060 fff8 return; } -void m68000_device::ori_w_imm16_das_ifm() // 0068 fff8 +void m68000_mcu_device::ori_w_imm16_das_ifm() // 0068 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -3442,7 +3442,7 @@ void m68000_device::ori_w_imm16_das_ifm() // 0068 fff8 return; } -void m68000_device::ori_w_imm16_dais_ifm() // 0070 fff8 +void m68000_mcu_device::ori_w_imm16_dais_ifm() // 0070 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -3613,7 +3613,7 @@ adsw2: return; } -void m68000_device::ori_w_imm16_adr16_ifm() // 0078 ffff +void m68000_mcu_device::ori_w_imm16_adr16_ifm() // 0078 ffff { // 2b9 o#w1 m_aob = m_au; @@ -3743,7 +3743,7 @@ void m68000_device::ori_w_imm16_adr16_ifm() // 0078 ffff return; } -void m68000_device::ori_w_imm16_adr32_ifm() // 0079 ffff +void m68000_mcu_device::ori_w_imm16_adr32_ifm() // 0079 ffff { // 2b9 o#w1 m_aob = m_au; @@ -3895,7 +3895,7 @@ void m68000_device::ori_w_imm16_adr32_ifm() // 0079 ffff return; } -void m68000_device::ori_i16u_sr_ifm() // 007c ffff +void m68000_mcu_device::ori_i16u_sr_ifm() // 007c ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -4006,7 +4006,7 @@ void m68000_device::ori_i16u_sr_ifm() // 007c ffff return; } -void m68000_device::ori_l_imm32_ds_ifm() // 0080 fff8 +void m68000_mcu_device::ori_l_imm32_ds_ifm() // 0080 fff8 { int ry = m_irdi & 7; // 3e0 o#l1 @@ -4102,7 +4102,7 @@ void m68000_device::ori_l_imm32_ds_ifm() // 0080 fff8 return; } -void m68000_device::ori_l_imm32_ais_ifm() // 0090 fff8 +void m68000_mcu_device::ori_l_imm32_ais_ifm() // 0090 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -4276,7 +4276,7 @@ void m68000_device::ori_l_imm32_ais_ifm() // 0090 fff8 return; } -void m68000_device::ori_l_imm32_aips_ifm() // 0098 fff8 +void m68000_mcu_device::ori_l_imm32_aips_ifm() // 0098 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -4454,7 +4454,7 @@ void m68000_device::ori_l_imm32_aips_ifm() // 0098 fff8 return; } -void m68000_device::ori_l_imm32_pais_ifm() // 00a0 fff8 +void m68000_mcu_device::ori_l_imm32_pais_ifm() // 00a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -4633,7 +4633,7 @@ void m68000_device::ori_l_imm32_pais_ifm() // 00a0 fff8 return; } -void m68000_device::ori_l_imm32_das_ifm() // 00a8 fff8 +void m68000_mcu_device::ori_l_imm32_das_ifm() // 00a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -4829,7 +4829,7 @@ void m68000_device::ori_l_imm32_das_ifm() // 00a8 fff8 return; } -void m68000_device::ori_l_imm32_dais_ifm() // 00b0 fff8 +void m68000_mcu_device::ori_l_imm32_dais_ifm() // 00b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -5065,7 +5065,7 @@ adsl2: return; } -void m68000_device::ori_l_imm32_adr16_ifm() // 00b8 ffff +void m68000_mcu_device::ori_l_imm32_adr16_ifm() // 00b8 ffff { // 3e0 o#l1 m_aob = m_au; @@ -5264,7 +5264,7 @@ void m68000_device::ori_l_imm32_adr16_ifm() // 00b8 ffff return; } -void m68000_device::ori_l_imm32_adr32_ifm() // 00b9 ffff +void m68000_mcu_device::ori_l_imm32_adr32_ifm() // 00b9 ffff { // 3e0 o#l1 m_aob = m_au; @@ -5485,7 +5485,7 @@ void m68000_device::ori_l_imm32_adr32_ifm() // 00b9 ffff return; } -void m68000_device::btst_dd_ds_ifm() // 0100 f1f8 +void m68000_mcu_device::btst_dd_ds_ifm() // 0100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -5555,7 +5555,7 @@ btsr3: return; } -void m68000_device::movep_w_das_dd_ifm() // 0108 f1f8 +void m68000_mcu_device::movep_w_das_dd_ifm() // 0108 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -5651,7 +5651,7 @@ void m68000_device::movep_w_das_dd_ifm() // 0108 f1f8 return; } -void m68000_device::btst_dd_ais_ifm() // 0110 f1f8 +void m68000_mcu_device::btst_dd_ais_ifm() // 0110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -5714,7 +5714,7 @@ void m68000_device::btst_dd_ais_ifm() // 0110 f1f8 return; } -void m68000_device::btst_dd_aips_ifm() // 0118 f1f8 +void m68000_mcu_device::btst_dd_aips_ifm() // 0118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -5782,7 +5782,7 @@ void m68000_device::btst_dd_aips_ifm() // 0118 f1f8 return; } -void m68000_device::btst_dd_pais_ifm() // 0120 f1f8 +void m68000_mcu_device::btst_dd_pais_ifm() // 0120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -5852,7 +5852,7 @@ void m68000_device::btst_dd_pais_ifm() // 0120 f1f8 return; } -void m68000_device::btst_dd_das_ifm() // 0128 f1f8 +void m68000_mcu_device::btst_dd_das_ifm() // 0128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -5938,7 +5938,7 @@ void m68000_device::btst_dd_das_ifm() // 0128 f1f8 return; } -void m68000_device::btst_dd_dais_ifm() // 0130 f1f8 +void m68000_mcu_device::btst_dd_dais_ifm() // 0130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6064,7 +6064,7 @@ adsw2: return; } -void m68000_device::btst_dd_adr16_ifm() // 0138 f1ff +void m68000_mcu_device::btst_dd_adr16_ifm() // 0138 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -6149,7 +6149,7 @@ void m68000_device::btst_dd_adr16_ifm() // 0138 f1ff return; } -void m68000_device::btst_dd_adr32_ifm() // 0139 f1ff +void m68000_mcu_device::btst_dd_adr32_ifm() // 0139 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -6256,7 +6256,7 @@ void m68000_device::btst_dd_adr32_ifm() // 0139 f1ff return; } -void m68000_device::btst_dd_dpc_ifm() // 013a f1ff +void m68000_mcu_device::btst_dd_dpc_ifm() // 013a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -6341,7 +6341,7 @@ void m68000_device::btst_dd_dpc_ifm() // 013a f1ff return; } -void m68000_device::btst_dd_dpci_ifm() // 013b f1ff +void m68000_mcu_device::btst_dd_dpci_ifm() // 013b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -6466,7 +6466,7 @@ adsw2: return; } -void m68000_device::btst_dd_imm_ifm() // 013c f1ff +void m68000_mcu_device::btst_dd_imm_ifm() // 013c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -6558,7 +6558,7 @@ btsr3: return; } -void m68000_device::bchg_dd_ds_ifm() // 0140 f1f8 +void m68000_mcu_device::bchg_dd_ds_ifm() // 0140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -6634,7 +6634,7 @@ bcsr3: return; } -void m68000_device::movep_l_das_dd_ifm() // 0148 f1f8 +void m68000_mcu_device::movep_l_das_dd_ifm() // 0148 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6767,7 +6767,7 @@ void m68000_device::movep_l_das_dd_ifm() // 0148 f1f8 return; } -void m68000_device::bchg_dd_ais_ifm() // 0150 f1f8 +void m68000_mcu_device::bchg_dd_ais_ifm() // 0150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6845,7 +6845,7 @@ void m68000_device::bchg_dd_ais_ifm() // 0150 f1f8 return; } -void m68000_device::bchg_dd_aips_ifm() // 0158 f1f8 +void m68000_mcu_device::bchg_dd_aips_ifm() // 0158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6928,7 +6928,7 @@ void m68000_device::bchg_dd_aips_ifm() // 0158 f1f8 return; } -void m68000_device::bchg_dd_pais_ifm() // 0160 f1f8 +void m68000_mcu_device::bchg_dd_pais_ifm() // 0160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7013,7 +7013,7 @@ void m68000_device::bchg_dd_pais_ifm() // 0160 f1f8 return; } -void m68000_device::bchg_dd_das_ifm() // 0168 f1f8 +void m68000_mcu_device::bchg_dd_das_ifm() // 0168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7114,7 +7114,7 @@ void m68000_device::bchg_dd_das_ifm() // 0168 f1f8 return; } -void m68000_device::bchg_dd_dais_ifm() // 0170 f1f8 +void m68000_mcu_device::bchg_dd_dais_ifm() // 0170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7255,7 +7255,7 @@ adsw2: return; } -void m68000_device::bchg_dd_adr16_ifm() // 0178 f1ff +void m68000_mcu_device::bchg_dd_adr16_ifm() // 0178 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -7355,7 +7355,7 @@ void m68000_device::bchg_dd_adr16_ifm() // 0178 f1ff return; } -void m68000_device::bchg_dd_adr32_ifm() // 0179 f1ff +void m68000_mcu_device::bchg_dd_adr32_ifm() // 0179 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -7477,7 +7477,7 @@ void m68000_device::bchg_dd_adr32_ifm() // 0179 f1ff return; } -void m68000_device::bclr_dd_ds_ifm() // 0180 f1f8 +void m68000_mcu_device::bclr_dd_ds_ifm() // 0180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -7561,7 +7561,7 @@ bclr3: return; } -void m68000_device::movep_w_dd_das_ifm() // 0188 f1f8 +void m68000_mcu_device::movep_w_dd_das_ifm() // 0188 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7655,7 +7655,7 @@ void m68000_device::movep_w_dd_das_ifm() // 0188 f1f8 return; } -void m68000_device::bclr_dd_ais_ifm() // 0190 f1f8 +void m68000_mcu_device::bclr_dd_ais_ifm() // 0190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7737,7 +7737,7 @@ void m68000_device::bclr_dd_ais_ifm() // 0190 f1f8 return; } -void m68000_device::bclr_dd_aips_ifm() // 0198 f1f8 +void m68000_mcu_device::bclr_dd_aips_ifm() // 0198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7824,7 +7824,7 @@ void m68000_device::bclr_dd_aips_ifm() // 0198 f1f8 return; } -void m68000_device::bclr_dd_pais_ifm() // 01a0 f1f8 +void m68000_mcu_device::bclr_dd_pais_ifm() // 01a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7913,7 +7913,7 @@ void m68000_device::bclr_dd_pais_ifm() // 01a0 f1f8 return; } -void m68000_device::bclr_dd_das_ifm() // 01a8 f1f8 +void m68000_mcu_device::bclr_dd_das_ifm() // 01a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8018,7 +8018,7 @@ void m68000_device::bclr_dd_das_ifm() // 01a8 f1f8 return; } -void m68000_device::bclr_dd_dais_ifm() // 01b0 f1f8 +void m68000_mcu_device::bclr_dd_dais_ifm() // 01b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8163,7 +8163,7 @@ adsw2: return; } -void m68000_device::bclr_dd_adr16_ifm() // 01b8 f1ff +void m68000_mcu_device::bclr_dd_adr16_ifm() // 01b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -8267,7 +8267,7 @@ void m68000_device::bclr_dd_adr16_ifm() // 01b8 f1ff return; } -void m68000_device::bclr_dd_adr32_ifm() // 01b9 f1ff +void m68000_mcu_device::bclr_dd_adr32_ifm() // 01b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -8393,7 +8393,7 @@ void m68000_device::bclr_dd_adr32_ifm() // 01b9 f1ff return; } -void m68000_device::bset_dd_ds_ifm() // 01c0 f1f8 +void m68000_mcu_device::bset_dd_ds_ifm() // 01c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -8469,7 +8469,7 @@ bcsr3: return; } -void m68000_device::movep_l_dd_das_ifm() // 01c8 f1f8 +void m68000_mcu_device::movep_l_dd_das_ifm() // 01c8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8595,7 +8595,7 @@ void m68000_device::movep_l_dd_das_ifm() // 01c8 f1f8 return; } -void m68000_device::bset_dd_ais_ifm() // 01d0 f1f8 +void m68000_mcu_device::bset_dd_ais_ifm() // 01d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8673,7 +8673,7 @@ void m68000_device::bset_dd_ais_ifm() // 01d0 f1f8 return; } -void m68000_device::bset_dd_aips_ifm() // 01d8 f1f8 +void m68000_mcu_device::bset_dd_aips_ifm() // 01d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8756,7 +8756,7 @@ void m68000_device::bset_dd_aips_ifm() // 01d8 f1f8 return; } -void m68000_device::bset_dd_pais_ifm() // 01e0 f1f8 +void m68000_mcu_device::bset_dd_pais_ifm() // 01e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8841,7 +8841,7 @@ void m68000_device::bset_dd_pais_ifm() // 01e0 f1f8 return; } -void m68000_device::bset_dd_das_ifm() // 01e8 f1f8 +void m68000_mcu_device::bset_dd_das_ifm() // 01e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8942,7 +8942,7 @@ void m68000_device::bset_dd_das_ifm() // 01e8 f1f8 return; } -void m68000_device::bset_dd_dais_ifm() // 01f0 f1f8 +void m68000_mcu_device::bset_dd_dais_ifm() // 01f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -9083,7 +9083,7 @@ adsw2: return; } -void m68000_device::bset_dd_adr16_ifm() // 01f8 f1ff +void m68000_mcu_device::bset_dd_adr16_ifm() // 01f8 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -9183,7 +9183,7 @@ void m68000_device::bset_dd_adr16_ifm() // 01f8 f1ff return; } -void m68000_device::bset_dd_adr32_ifm() // 01f9 f1ff +void m68000_mcu_device::bset_dd_adr32_ifm() // 01f9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -9305,7 +9305,7 @@ void m68000_device::bset_dd_adr32_ifm() // 01f9 f1ff return; } -void m68000_device::andi_b_imm8_ds_ifm() // 0200 fff8 +void m68000_mcu_device::andi_b_imm8_ds_ifm() // 0200 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -9370,7 +9370,7 @@ void m68000_device::andi_b_imm8_ds_ifm() // 0200 fff8 return; } -void m68000_device::andi_b_imm8_ais_ifm() // 0210 fff8 +void m68000_mcu_device::andi_b_imm8_ais_ifm() // 0210 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -9470,7 +9470,7 @@ void m68000_device::andi_b_imm8_ais_ifm() // 0210 fff8 return; } -void m68000_device::andi_b_imm8_aips_ifm() // 0218 fff8 +void m68000_mcu_device::andi_b_imm8_aips_ifm() // 0218 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -9575,7 +9575,7 @@ void m68000_device::andi_b_imm8_aips_ifm() // 0218 fff8 return; } -void m68000_device::andi_b_imm8_pais_ifm() // 0220 fff8 +void m68000_mcu_device::andi_b_imm8_pais_ifm() // 0220 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -9682,7 +9682,7 @@ void m68000_device::andi_b_imm8_pais_ifm() // 0220 fff8 return; } -void m68000_device::andi_b_imm8_das_ifm() // 0228 fff8 +void m68000_mcu_device::andi_b_imm8_das_ifm() // 0228 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -9805,7 +9805,7 @@ void m68000_device::andi_b_imm8_das_ifm() // 0228 fff8 return; } -void m68000_device::andi_b_imm8_dais_ifm() // 0230 fff8 +void m68000_mcu_device::andi_b_imm8_dais_ifm() // 0230 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -9968,7 +9968,7 @@ adsw2: return; } -void m68000_device::andi_b_imm8_adr16_ifm() // 0238 ffff +void m68000_mcu_device::andi_b_imm8_adr16_ifm() // 0238 ffff { // 2b9 o#w1 m_aob = m_au; @@ -10090,7 +10090,7 @@ void m68000_device::andi_b_imm8_adr16_ifm() // 0238 ffff return; } -void m68000_device::andi_b_imm8_adr32_ifm() // 0239 ffff +void m68000_mcu_device::andi_b_imm8_adr32_ifm() // 0239 ffff { // 2b9 o#w1 m_aob = m_au; @@ -10234,7 +10234,7 @@ void m68000_device::andi_b_imm8_adr32_ifm() // 0239 ffff return; } -void m68000_device::andi_imm8_ccr_ifm() // 023c ffff +void m68000_mcu_device::andi_imm8_ccr_ifm() // 023c ffff { // 2b9 o#w1 m_aob = m_au; @@ -10339,7 +10339,7 @@ void m68000_device::andi_imm8_ccr_ifm() // 023c ffff return; } -void m68000_device::andi_w_imm16_ds_ifm() // 0240 fff8 +void m68000_mcu_device::andi_w_imm16_ds_ifm() // 0240 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -10404,7 +10404,7 @@ void m68000_device::andi_w_imm16_ds_ifm() // 0240 fff8 return; } -void m68000_device::andi_w_imm16_ais_ifm() // 0250 fff8 +void m68000_mcu_device::andi_w_imm16_ais_ifm() // 0250 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -10512,7 +10512,7 @@ void m68000_device::andi_w_imm16_ais_ifm() // 0250 fff8 return; } -void m68000_device::andi_w_imm16_aips_ifm() // 0258 fff8 +void m68000_mcu_device::andi_w_imm16_aips_ifm() // 0258 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -10625,7 +10625,7 @@ void m68000_device::andi_w_imm16_aips_ifm() // 0258 fff8 return; } -void m68000_device::andi_w_imm16_pais_ifm() // 0260 fff8 +void m68000_mcu_device::andi_w_imm16_pais_ifm() // 0260 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -10740,7 +10740,7 @@ void m68000_device::andi_w_imm16_pais_ifm() // 0260 fff8 return; } -void m68000_device::andi_w_imm16_das_ifm() // 0268 fff8 +void m68000_mcu_device::andi_w_imm16_das_ifm() // 0268 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -10871,7 +10871,7 @@ void m68000_device::andi_w_imm16_das_ifm() // 0268 fff8 return; } -void m68000_device::andi_w_imm16_dais_ifm() // 0270 fff8 +void m68000_mcu_device::andi_w_imm16_dais_ifm() // 0270 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -11042,7 +11042,7 @@ adsw2: return; } -void m68000_device::andi_w_imm16_adr16_ifm() // 0278 ffff +void m68000_mcu_device::andi_w_imm16_adr16_ifm() // 0278 ffff { // 2b9 o#w1 m_aob = m_au; @@ -11172,7 +11172,7 @@ void m68000_device::andi_w_imm16_adr16_ifm() // 0278 ffff return; } -void m68000_device::andi_w_imm16_adr32_ifm() // 0279 ffff +void m68000_mcu_device::andi_w_imm16_adr32_ifm() // 0279 ffff { // 2b9 o#w1 m_aob = m_au; @@ -11324,7 +11324,7 @@ void m68000_device::andi_w_imm16_adr32_ifm() // 0279 ffff return; } -void m68000_device::andi_i16u_sr_ifm() // 027c ffff +void m68000_mcu_device::andi_i16u_sr_ifm() // 027c ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -11435,7 +11435,7 @@ void m68000_device::andi_i16u_sr_ifm() // 027c ffff return; } -void m68000_device::andi_l_imm32_ds_ifm() // 0280 fff8 +void m68000_mcu_device::andi_l_imm32_ds_ifm() // 0280 fff8 { int ry = m_irdi & 7; // 3e0 o#l1 @@ -11531,7 +11531,7 @@ void m68000_device::andi_l_imm32_ds_ifm() // 0280 fff8 return; } -void m68000_device::andi_l_imm32_ais_ifm() // 0290 fff8 +void m68000_mcu_device::andi_l_imm32_ais_ifm() // 0290 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -11705,7 +11705,7 @@ void m68000_device::andi_l_imm32_ais_ifm() // 0290 fff8 return; } -void m68000_device::andi_l_imm32_aips_ifm() // 0298 fff8 +void m68000_mcu_device::andi_l_imm32_aips_ifm() // 0298 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -11883,7 +11883,7 @@ void m68000_device::andi_l_imm32_aips_ifm() // 0298 fff8 return; } -void m68000_device::andi_l_imm32_pais_ifm() // 02a0 fff8 +void m68000_mcu_device::andi_l_imm32_pais_ifm() // 02a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -12062,7 +12062,7 @@ void m68000_device::andi_l_imm32_pais_ifm() // 02a0 fff8 return; } -void m68000_device::andi_l_imm32_das_ifm() // 02a8 fff8 +void m68000_mcu_device::andi_l_imm32_das_ifm() // 02a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -12258,7 +12258,7 @@ void m68000_device::andi_l_imm32_das_ifm() // 02a8 fff8 return; } -void m68000_device::andi_l_imm32_dais_ifm() // 02b0 fff8 +void m68000_mcu_device::andi_l_imm32_dais_ifm() // 02b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -12494,7 +12494,7 @@ adsl2: return; } -void m68000_device::andi_l_imm32_adr16_ifm() // 02b8 ffff +void m68000_mcu_device::andi_l_imm32_adr16_ifm() // 02b8 ffff { // 3e0 o#l1 m_aob = m_au; @@ -12693,7 +12693,7 @@ void m68000_device::andi_l_imm32_adr16_ifm() // 02b8 ffff return; } -void m68000_device::andi_l_imm32_adr32_ifm() // 02b9 ffff +void m68000_mcu_device::andi_l_imm32_adr32_ifm() // 02b9 ffff { // 3e0 o#l1 m_aob = m_au; @@ -12914,7 +12914,7 @@ void m68000_device::andi_l_imm32_adr32_ifm() // 02b9 ffff return; } -void m68000_device::subi_b_imm8_ds_ifm() // 0400 fff8 +void m68000_mcu_device::subi_b_imm8_ds_ifm() // 0400 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -12977,7 +12977,7 @@ void m68000_device::subi_b_imm8_ds_ifm() // 0400 fff8 return; } -void m68000_device::subi_b_imm8_ais_ifm() // 0410 fff8 +void m68000_mcu_device::subi_b_imm8_ais_ifm() // 0410 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -13074,7 +13074,7 @@ void m68000_device::subi_b_imm8_ais_ifm() // 0410 fff8 return; } -void m68000_device::subi_b_imm8_aips_ifm() // 0418 fff8 +void m68000_mcu_device::subi_b_imm8_aips_ifm() // 0418 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -13175,7 +13175,7 @@ void m68000_device::subi_b_imm8_aips_ifm() // 0418 fff8 return; } -void m68000_device::subi_b_imm8_pais_ifm() // 0420 fff8 +void m68000_mcu_device::subi_b_imm8_pais_ifm() // 0420 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -13278,7 +13278,7 @@ void m68000_device::subi_b_imm8_pais_ifm() // 0420 fff8 return; } -void m68000_device::subi_b_imm8_das_ifm() // 0428 fff8 +void m68000_mcu_device::subi_b_imm8_das_ifm() // 0428 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -13397,7 +13397,7 @@ void m68000_device::subi_b_imm8_das_ifm() // 0428 fff8 return; } -void m68000_device::subi_b_imm8_dais_ifm() // 0430 fff8 +void m68000_mcu_device::subi_b_imm8_dais_ifm() // 0430 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -13554,7 +13554,7 @@ adsw2: return; } -void m68000_device::subi_b_imm8_adr16_ifm() // 0438 ffff +void m68000_mcu_device::subi_b_imm8_adr16_ifm() // 0438 ffff { // 2b9 o#w1 m_aob = m_au; @@ -13672,7 +13672,7 @@ void m68000_device::subi_b_imm8_adr16_ifm() // 0438 ffff return; } -void m68000_device::subi_b_imm8_adr32_ifm() // 0439 ffff +void m68000_mcu_device::subi_b_imm8_adr32_ifm() // 0439 ffff { // 2b9 o#w1 m_aob = m_au; @@ -13811,7 +13811,7 @@ void m68000_device::subi_b_imm8_adr32_ifm() // 0439 ffff return; } -void m68000_device::subi_w_imm16_ds_ifm() // 0440 fff8 +void m68000_mcu_device::subi_w_imm16_ds_ifm() // 0440 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -13874,7 +13874,7 @@ void m68000_device::subi_w_imm16_ds_ifm() // 0440 fff8 return; } -void m68000_device::subi_w_imm16_ais_ifm() // 0450 fff8 +void m68000_mcu_device::subi_w_imm16_ais_ifm() // 0450 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -13979,7 +13979,7 @@ void m68000_device::subi_w_imm16_ais_ifm() // 0450 fff8 return; } -void m68000_device::subi_w_imm16_aips_ifm() // 0458 fff8 +void m68000_mcu_device::subi_w_imm16_aips_ifm() // 0458 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -14088,7 +14088,7 @@ void m68000_device::subi_w_imm16_aips_ifm() // 0458 fff8 return; } -void m68000_device::subi_w_imm16_pais_ifm() // 0460 fff8 +void m68000_mcu_device::subi_w_imm16_pais_ifm() // 0460 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -14199,7 +14199,7 @@ void m68000_device::subi_w_imm16_pais_ifm() // 0460 fff8 return; } -void m68000_device::subi_w_imm16_das_ifm() // 0468 fff8 +void m68000_mcu_device::subi_w_imm16_das_ifm() // 0468 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -14326,7 +14326,7 @@ void m68000_device::subi_w_imm16_das_ifm() // 0468 fff8 return; } -void m68000_device::subi_w_imm16_dais_ifm() // 0470 fff8 +void m68000_mcu_device::subi_w_imm16_dais_ifm() // 0470 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -14491,7 +14491,7 @@ adsw2: return; } -void m68000_device::subi_w_imm16_adr16_ifm() // 0478 ffff +void m68000_mcu_device::subi_w_imm16_adr16_ifm() // 0478 ffff { // 2b9 o#w1 m_aob = m_au; @@ -14617,7 +14617,7 @@ void m68000_device::subi_w_imm16_adr16_ifm() // 0478 ffff return; } -void m68000_device::subi_w_imm16_adr32_ifm() // 0479 ffff +void m68000_mcu_device::subi_w_imm16_adr32_ifm() // 0479 ffff { // 2b9 o#w1 m_aob = m_au; @@ -14764,7 +14764,7 @@ void m68000_device::subi_w_imm16_adr32_ifm() // 0479 ffff return; } -void m68000_device::subi_l_imm32_ds_ifm() // 0480 fff8 +void m68000_mcu_device::subi_l_imm32_ds_ifm() // 0480 fff8 { int ry = m_irdi & 7; // 3e0 o#l1 @@ -14856,7 +14856,7 @@ void m68000_device::subi_l_imm32_ds_ifm() // 0480 fff8 return; } -void m68000_device::subi_l_imm32_ais_ifm() // 0490 fff8 +void m68000_mcu_device::subi_l_imm32_ais_ifm() // 0490 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -15026,7 +15026,7 @@ void m68000_device::subi_l_imm32_ais_ifm() // 0490 fff8 return; } -void m68000_device::subi_l_imm32_aips_ifm() // 0498 fff8 +void m68000_mcu_device::subi_l_imm32_aips_ifm() // 0498 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -15199,7 +15199,7 @@ void m68000_device::subi_l_imm32_aips_ifm() // 0498 fff8 return; } -void m68000_device::subi_l_imm32_pais_ifm() // 04a0 fff8 +void m68000_mcu_device::subi_l_imm32_pais_ifm() // 04a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -15373,7 +15373,7 @@ void m68000_device::subi_l_imm32_pais_ifm() // 04a0 fff8 return; } -void m68000_device::subi_l_imm32_das_ifm() // 04a8 fff8 +void m68000_mcu_device::subi_l_imm32_das_ifm() // 04a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -15564,7 +15564,7 @@ void m68000_device::subi_l_imm32_das_ifm() // 04a8 fff8 return; } -void m68000_device::subi_l_imm32_dais_ifm() // 04b0 fff8 +void m68000_mcu_device::subi_l_imm32_dais_ifm() // 04b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -15793,7 +15793,7 @@ adsl2: return; } -void m68000_device::subi_l_imm32_adr16_ifm() // 04b8 ffff +void m68000_mcu_device::subi_l_imm32_adr16_ifm() // 04b8 ffff { // 3e0 o#l1 m_aob = m_au; @@ -15986,7 +15986,7 @@ void m68000_device::subi_l_imm32_adr16_ifm() // 04b8 ffff return; } -void m68000_device::subi_l_imm32_adr32_ifm() // 04b9 ffff +void m68000_mcu_device::subi_l_imm32_adr32_ifm() // 04b9 ffff { // 3e0 o#l1 m_aob = m_au; @@ -16200,7 +16200,7 @@ void m68000_device::subi_l_imm32_adr32_ifm() // 04b9 ffff return; } -void m68000_device::addi_b_imm8_ds_ifm() // 0600 fff8 +void m68000_mcu_device::addi_b_imm8_ds_ifm() // 0600 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -16263,7 +16263,7 @@ void m68000_device::addi_b_imm8_ds_ifm() // 0600 fff8 return; } -void m68000_device::addi_b_imm8_ais_ifm() // 0610 fff8 +void m68000_mcu_device::addi_b_imm8_ais_ifm() // 0610 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -16360,7 +16360,7 @@ void m68000_device::addi_b_imm8_ais_ifm() // 0610 fff8 return; } -void m68000_device::addi_b_imm8_aips_ifm() // 0618 fff8 +void m68000_mcu_device::addi_b_imm8_aips_ifm() // 0618 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -16461,7 +16461,7 @@ void m68000_device::addi_b_imm8_aips_ifm() // 0618 fff8 return; } -void m68000_device::addi_b_imm8_pais_ifm() // 0620 fff8 +void m68000_mcu_device::addi_b_imm8_pais_ifm() // 0620 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -16564,7 +16564,7 @@ void m68000_device::addi_b_imm8_pais_ifm() // 0620 fff8 return; } -void m68000_device::addi_b_imm8_das_ifm() // 0628 fff8 +void m68000_mcu_device::addi_b_imm8_das_ifm() // 0628 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -16683,7 +16683,7 @@ void m68000_device::addi_b_imm8_das_ifm() // 0628 fff8 return; } -void m68000_device::addi_b_imm8_dais_ifm() // 0630 fff8 +void m68000_mcu_device::addi_b_imm8_dais_ifm() // 0630 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -16840,7 +16840,7 @@ adsw2: return; } -void m68000_device::addi_b_imm8_adr16_ifm() // 0638 ffff +void m68000_mcu_device::addi_b_imm8_adr16_ifm() // 0638 ffff { // 2b9 o#w1 m_aob = m_au; @@ -16958,7 +16958,7 @@ void m68000_device::addi_b_imm8_adr16_ifm() // 0638 ffff return; } -void m68000_device::addi_b_imm8_adr32_ifm() // 0639 ffff +void m68000_mcu_device::addi_b_imm8_adr32_ifm() // 0639 ffff { // 2b9 o#w1 m_aob = m_au; @@ -17097,7 +17097,7 @@ void m68000_device::addi_b_imm8_adr32_ifm() // 0639 ffff return; } -void m68000_device::addi_w_imm16_ds_ifm() // 0640 fff8 +void m68000_mcu_device::addi_w_imm16_ds_ifm() // 0640 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -17160,7 +17160,7 @@ void m68000_device::addi_w_imm16_ds_ifm() // 0640 fff8 return; } -void m68000_device::addi_w_imm16_ais_ifm() // 0650 fff8 +void m68000_mcu_device::addi_w_imm16_ais_ifm() // 0650 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -17265,7 +17265,7 @@ void m68000_device::addi_w_imm16_ais_ifm() // 0650 fff8 return; } -void m68000_device::addi_w_imm16_aips_ifm() // 0658 fff8 +void m68000_mcu_device::addi_w_imm16_aips_ifm() // 0658 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -17374,7 +17374,7 @@ void m68000_device::addi_w_imm16_aips_ifm() // 0658 fff8 return; } -void m68000_device::addi_w_imm16_pais_ifm() // 0660 fff8 +void m68000_mcu_device::addi_w_imm16_pais_ifm() // 0660 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -17485,7 +17485,7 @@ void m68000_device::addi_w_imm16_pais_ifm() // 0660 fff8 return; } -void m68000_device::addi_w_imm16_das_ifm() // 0668 fff8 +void m68000_mcu_device::addi_w_imm16_das_ifm() // 0668 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -17612,7 +17612,7 @@ void m68000_device::addi_w_imm16_das_ifm() // 0668 fff8 return; } -void m68000_device::addi_w_imm16_dais_ifm() // 0670 fff8 +void m68000_mcu_device::addi_w_imm16_dais_ifm() // 0670 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -17777,7 +17777,7 @@ adsw2: return; } -void m68000_device::addi_w_imm16_adr16_ifm() // 0678 ffff +void m68000_mcu_device::addi_w_imm16_adr16_ifm() // 0678 ffff { // 2b9 o#w1 m_aob = m_au; @@ -17903,7 +17903,7 @@ void m68000_device::addi_w_imm16_adr16_ifm() // 0678 ffff return; } -void m68000_device::addi_w_imm16_adr32_ifm() // 0679 ffff +void m68000_mcu_device::addi_w_imm16_adr32_ifm() // 0679 ffff { // 2b9 o#w1 m_aob = m_au; @@ -18050,7 +18050,7 @@ void m68000_device::addi_w_imm16_adr32_ifm() // 0679 ffff return; } -void m68000_device::addi_l_imm32_ds_ifm() // 0680 fff8 +void m68000_mcu_device::addi_l_imm32_ds_ifm() // 0680 fff8 { int ry = m_irdi & 7; // 3e0 o#l1 @@ -18142,7 +18142,7 @@ void m68000_device::addi_l_imm32_ds_ifm() // 0680 fff8 return; } -void m68000_device::addi_l_imm32_ais_ifm() // 0690 fff8 +void m68000_mcu_device::addi_l_imm32_ais_ifm() // 0690 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -18312,7 +18312,7 @@ void m68000_device::addi_l_imm32_ais_ifm() // 0690 fff8 return; } -void m68000_device::addi_l_imm32_aips_ifm() // 0698 fff8 +void m68000_mcu_device::addi_l_imm32_aips_ifm() // 0698 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -18485,7 +18485,7 @@ void m68000_device::addi_l_imm32_aips_ifm() // 0698 fff8 return; } -void m68000_device::addi_l_imm32_pais_ifm() // 06a0 fff8 +void m68000_mcu_device::addi_l_imm32_pais_ifm() // 06a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -18659,7 +18659,7 @@ void m68000_device::addi_l_imm32_pais_ifm() // 06a0 fff8 return; } -void m68000_device::addi_l_imm32_das_ifm() // 06a8 fff8 +void m68000_mcu_device::addi_l_imm32_das_ifm() // 06a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -18850,7 +18850,7 @@ void m68000_device::addi_l_imm32_das_ifm() // 06a8 fff8 return; } -void m68000_device::addi_l_imm32_dais_ifm() // 06b0 fff8 +void m68000_mcu_device::addi_l_imm32_dais_ifm() // 06b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -19079,7 +19079,7 @@ adsl2: return; } -void m68000_device::addi_l_imm32_adr16_ifm() // 06b8 ffff +void m68000_mcu_device::addi_l_imm32_adr16_ifm() // 06b8 ffff { // 3e0 o#l1 m_aob = m_au; @@ -19272,7 +19272,7 @@ void m68000_device::addi_l_imm32_adr16_ifm() // 06b8 ffff return; } -void m68000_device::addi_l_imm32_adr32_ifm() // 06b9 ffff +void m68000_mcu_device::addi_l_imm32_adr32_ifm() // 06b9 ffff { // 3e0 o#l1 m_aob = m_au; @@ -19486,7 +19486,7 @@ void m68000_device::addi_l_imm32_adr32_ifm() // 06b9 ffff return; } -void m68000_device::btst_imm8_ds_ifm() // 0800 fff8 +void m68000_mcu_device::btst_imm8_ds_ifm() // 0800 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -19579,7 +19579,7 @@ btsr3: return; } -void m68000_device::btst_imm8_ais_ifm() // 0810 fff8 +void m68000_mcu_device::btst_imm8_ais_ifm() // 0810 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -19665,7 +19665,7 @@ void m68000_device::btst_imm8_ais_ifm() // 0810 fff8 return; } -void m68000_device::btst_imm8_aips_ifm() // 0818 fff8 +void m68000_mcu_device::btst_imm8_aips_ifm() // 0818 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -19756,7 +19756,7 @@ void m68000_device::btst_imm8_aips_ifm() // 0818 fff8 return; } -void m68000_device::btst_imm8_pais_ifm() // 0820 fff8 +void m68000_mcu_device::btst_imm8_pais_ifm() // 0820 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -19849,7 +19849,7 @@ void m68000_device::btst_imm8_pais_ifm() // 0820 fff8 return; } -void m68000_device::btst_imm8_das_ifm() // 0828 fff8 +void m68000_mcu_device::btst_imm8_das_ifm() // 0828 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -19958,7 +19958,7 @@ void m68000_device::btst_imm8_das_ifm() // 0828 fff8 return; } -void m68000_device::btst_imm8_dais_ifm() // 0830 fff8 +void m68000_mcu_device::btst_imm8_dais_ifm() // 0830 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -20107,7 +20107,7 @@ adsw2: return; } -void m68000_device::btst_imm8_adr16_ifm() // 0838 ffff +void m68000_mcu_device::btst_imm8_adr16_ifm() // 0838 ffff { // 2b9 o#w1 m_aob = m_au; @@ -20215,7 +20215,7 @@ void m68000_device::btst_imm8_adr16_ifm() // 0838 ffff return; } -void m68000_device::btst_imm8_adr32_ifm() // 0839 ffff +void m68000_mcu_device::btst_imm8_adr32_ifm() // 0839 ffff { // 2b9 o#w1 m_aob = m_au; @@ -20345,7 +20345,7 @@ void m68000_device::btst_imm8_adr32_ifm() // 0839 ffff return; } -void m68000_device::btst_imm8_dpc_ifm() // 083a ffff +void m68000_mcu_device::btst_imm8_dpc_ifm() // 083a ffff { // 2b9 o#w1 m_aob = m_au; @@ -20453,7 +20453,7 @@ void m68000_device::btst_imm8_dpc_ifm() // 083a ffff return; } -void m68000_device::btst_imm8_dpci_ifm() // 083b ffff +void m68000_mcu_device::btst_imm8_dpci_ifm() // 083b ffff { // 2b9 o#w1 m_aob = m_au; @@ -20601,7 +20601,7 @@ adsw2: return; } -void m68000_device::bchg_imm8_ds_ifm() // 0840 fff8 +void m68000_mcu_device::bchg_imm8_ds_ifm() // 0840 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -20700,7 +20700,7 @@ bcsr3: return; } -void m68000_device::bchg_imm8_ais_ifm() // 0850 fff8 +void m68000_mcu_device::bchg_imm8_ais_ifm() // 0850 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -20801,7 +20801,7 @@ void m68000_device::bchg_imm8_ais_ifm() // 0850 fff8 return; } -void m68000_device::bchg_imm8_aips_ifm() // 0858 fff8 +void m68000_mcu_device::bchg_imm8_aips_ifm() // 0858 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -20907,7 +20907,7 @@ void m68000_device::bchg_imm8_aips_ifm() // 0858 fff8 return; } -void m68000_device::bchg_imm8_pais_ifm() // 0860 fff8 +void m68000_mcu_device::bchg_imm8_pais_ifm() // 0860 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -21015,7 +21015,7 @@ void m68000_device::bchg_imm8_pais_ifm() // 0860 fff8 return; } -void m68000_device::bchg_imm8_das_ifm() // 0868 fff8 +void m68000_mcu_device::bchg_imm8_das_ifm() // 0868 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -21139,7 +21139,7 @@ void m68000_device::bchg_imm8_das_ifm() // 0868 fff8 return; } -void m68000_device::bchg_imm8_dais_ifm() // 0870 fff8 +void m68000_mcu_device::bchg_imm8_dais_ifm() // 0870 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -21303,7 +21303,7 @@ adsw2: return; } -void m68000_device::bchg_imm8_adr16_ifm() // 0878 ffff +void m68000_mcu_device::bchg_imm8_adr16_ifm() // 0878 ffff { // 2b9 o#w1 m_aob = m_au; @@ -21426,7 +21426,7 @@ void m68000_device::bchg_imm8_adr16_ifm() // 0878 ffff return; } -void m68000_device::bchg_imm8_adr32_ifm() // 0879 ffff +void m68000_mcu_device::bchg_imm8_adr32_ifm() // 0879 ffff { // 2b9 o#w1 m_aob = m_au; @@ -21571,7 +21571,7 @@ void m68000_device::bchg_imm8_adr32_ifm() // 0879 ffff return; } -void m68000_device::bclr_imm8_ds_ifm() // 0880 fff8 +void m68000_mcu_device::bclr_imm8_ds_ifm() // 0880 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -21678,7 +21678,7 @@ bclr3: return; } -void m68000_device::bclr_imm8_ais_ifm() // 0890 fff8 +void m68000_mcu_device::bclr_imm8_ais_ifm() // 0890 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -21783,7 +21783,7 @@ void m68000_device::bclr_imm8_ais_ifm() // 0890 fff8 return; } -void m68000_device::bclr_imm8_aips_ifm() // 0898 fff8 +void m68000_mcu_device::bclr_imm8_aips_ifm() // 0898 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -21893,7 +21893,7 @@ void m68000_device::bclr_imm8_aips_ifm() // 0898 fff8 return; } -void m68000_device::bclr_imm8_pais_ifm() // 08a0 fff8 +void m68000_mcu_device::bclr_imm8_pais_ifm() // 08a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -22005,7 +22005,7 @@ void m68000_device::bclr_imm8_pais_ifm() // 08a0 fff8 return; } -void m68000_device::bclr_imm8_das_ifm() // 08a8 fff8 +void m68000_mcu_device::bclr_imm8_das_ifm() // 08a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -22133,7 +22133,7 @@ void m68000_device::bclr_imm8_das_ifm() // 08a8 fff8 return; } -void m68000_device::bclr_imm8_dais_ifm() // 08b0 fff8 +void m68000_mcu_device::bclr_imm8_dais_ifm() // 08b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -22301,7 +22301,7 @@ adsw2: return; } -void m68000_device::bclr_imm8_adr16_ifm() // 08b8 ffff +void m68000_mcu_device::bclr_imm8_adr16_ifm() // 08b8 ffff { // 2b9 o#w1 m_aob = m_au; @@ -22428,7 +22428,7 @@ void m68000_device::bclr_imm8_adr16_ifm() // 08b8 ffff return; } -void m68000_device::bclr_imm8_adr32_ifm() // 08b9 ffff +void m68000_mcu_device::bclr_imm8_adr32_ifm() // 08b9 ffff { // 2b9 o#w1 m_aob = m_au; @@ -22577,7 +22577,7 @@ void m68000_device::bclr_imm8_adr32_ifm() // 08b9 ffff return; } -void m68000_device::bset_imm8_ds_ifm() // 08c0 fff8 +void m68000_mcu_device::bset_imm8_ds_ifm() // 08c0 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -22676,7 +22676,7 @@ bcsr3: return; } -void m68000_device::bset_imm8_ais_ifm() // 08d0 fff8 +void m68000_mcu_device::bset_imm8_ais_ifm() // 08d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -22777,7 +22777,7 @@ void m68000_device::bset_imm8_ais_ifm() // 08d0 fff8 return; } -void m68000_device::bset_imm8_aips_ifm() // 08d8 fff8 +void m68000_mcu_device::bset_imm8_aips_ifm() // 08d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -22883,7 +22883,7 @@ void m68000_device::bset_imm8_aips_ifm() // 08d8 fff8 return; } -void m68000_device::bset_imm8_pais_ifm() // 08e0 fff8 +void m68000_mcu_device::bset_imm8_pais_ifm() // 08e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -22991,7 +22991,7 @@ void m68000_device::bset_imm8_pais_ifm() // 08e0 fff8 return; } -void m68000_device::bset_imm8_das_ifm() // 08e8 fff8 +void m68000_mcu_device::bset_imm8_das_ifm() // 08e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -23115,7 +23115,7 @@ void m68000_device::bset_imm8_das_ifm() // 08e8 fff8 return; } -void m68000_device::bset_imm8_dais_ifm() // 08f0 fff8 +void m68000_mcu_device::bset_imm8_dais_ifm() // 08f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -23279,7 +23279,7 @@ adsw2: return; } -void m68000_device::bset_imm8_adr16_ifm() // 08f8 ffff +void m68000_mcu_device::bset_imm8_adr16_ifm() // 08f8 ffff { // 2b9 o#w1 m_aob = m_au; @@ -23402,7 +23402,7 @@ void m68000_device::bset_imm8_adr16_ifm() // 08f8 ffff return; } -void m68000_device::bset_imm8_adr32_ifm() // 08f9 ffff +void m68000_mcu_device::bset_imm8_adr32_ifm() // 08f9 ffff { // 2b9 o#w1 m_aob = m_au; @@ -23547,7 +23547,7 @@ void m68000_device::bset_imm8_adr32_ifm() // 08f9 ffff return; } -void m68000_device::eori_b_imm8_ds_ifm() // 0a00 fff8 +void m68000_mcu_device::eori_b_imm8_ds_ifm() // 0a00 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -23612,7 +23612,7 @@ void m68000_device::eori_b_imm8_ds_ifm() // 0a00 fff8 return; } -void m68000_device::eori_b_imm8_ais_ifm() // 0a10 fff8 +void m68000_mcu_device::eori_b_imm8_ais_ifm() // 0a10 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -23712,7 +23712,7 @@ void m68000_device::eori_b_imm8_ais_ifm() // 0a10 fff8 return; } -void m68000_device::eori_b_imm8_aips_ifm() // 0a18 fff8 +void m68000_mcu_device::eori_b_imm8_aips_ifm() // 0a18 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -23817,7 +23817,7 @@ void m68000_device::eori_b_imm8_aips_ifm() // 0a18 fff8 return; } -void m68000_device::eori_b_imm8_pais_ifm() // 0a20 fff8 +void m68000_mcu_device::eori_b_imm8_pais_ifm() // 0a20 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -23924,7 +23924,7 @@ void m68000_device::eori_b_imm8_pais_ifm() // 0a20 fff8 return; } -void m68000_device::eori_b_imm8_das_ifm() // 0a28 fff8 +void m68000_mcu_device::eori_b_imm8_das_ifm() // 0a28 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -24047,7 +24047,7 @@ void m68000_device::eori_b_imm8_das_ifm() // 0a28 fff8 return; } -void m68000_device::eori_b_imm8_dais_ifm() // 0a30 fff8 +void m68000_mcu_device::eori_b_imm8_dais_ifm() // 0a30 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -24210,7 +24210,7 @@ adsw2: return; } -void m68000_device::eori_b_imm8_adr16_ifm() // 0a38 ffff +void m68000_mcu_device::eori_b_imm8_adr16_ifm() // 0a38 ffff { // 2b9 o#w1 m_aob = m_au; @@ -24332,7 +24332,7 @@ void m68000_device::eori_b_imm8_adr16_ifm() // 0a38 ffff return; } -void m68000_device::eori_b_imm8_adr32_ifm() // 0a39 ffff +void m68000_mcu_device::eori_b_imm8_adr32_ifm() // 0a39 ffff { // 2b9 o#w1 m_aob = m_au; @@ -24476,7 +24476,7 @@ void m68000_device::eori_b_imm8_adr32_ifm() // 0a39 ffff return; } -void m68000_device::eori_imm8_ccr_ifm() // 0a3c ffff +void m68000_mcu_device::eori_imm8_ccr_ifm() // 0a3c ffff { // 2b9 o#w1 m_aob = m_au; @@ -24581,7 +24581,7 @@ void m68000_device::eori_imm8_ccr_ifm() // 0a3c ffff return; } -void m68000_device::eori_w_imm16_ds_ifm() // 0a40 fff8 +void m68000_mcu_device::eori_w_imm16_ds_ifm() // 0a40 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -24646,7 +24646,7 @@ void m68000_device::eori_w_imm16_ds_ifm() // 0a40 fff8 return; } -void m68000_device::eori_w_imm16_ais_ifm() // 0a50 fff8 +void m68000_mcu_device::eori_w_imm16_ais_ifm() // 0a50 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -24754,7 +24754,7 @@ void m68000_device::eori_w_imm16_ais_ifm() // 0a50 fff8 return; } -void m68000_device::eori_w_imm16_aips_ifm() // 0a58 fff8 +void m68000_mcu_device::eori_w_imm16_aips_ifm() // 0a58 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -24867,7 +24867,7 @@ void m68000_device::eori_w_imm16_aips_ifm() // 0a58 fff8 return; } -void m68000_device::eori_w_imm16_pais_ifm() // 0a60 fff8 +void m68000_mcu_device::eori_w_imm16_pais_ifm() // 0a60 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -24982,7 +24982,7 @@ void m68000_device::eori_w_imm16_pais_ifm() // 0a60 fff8 return; } -void m68000_device::eori_w_imm16_das_ifm() // 0a68 fff8 +void m68000_mcu_device::eori_w_imm16_das_ifm() // 0a68 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -25113,7 +25113,7 @@ void m68000_device::eori_w_imm16_das_ifm() // 0a68 fff8 return; } -void m68000_device::eori_w_imm16_dais_ifm() // 0a70 fff8 +void m68000_mcu_device::eori_w_imm16_dais_ifm() // 0a70 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -25284,7 +25284,7 @@ adsw2: return; } -void m68000_device::eori_w_imm16_adr16_ifm() // 0a78 ffff +void m68000_mcu_device::eori_w_imm16_adr16_ifm() // 0a78 ffff { // 2b9 o#w1 m_aob = m_au; @@ -25414,7 +25414,7 @@ void m68000_device::eori_w_imm16_adr16_ifm() // 0a78 ffff return; } -void m68000_device::eori_w_imm16_adr32_ifm() // 0a79 ffff +void m68000_mcu_device::eori_w_imm16_adr32_ifm() // 0a79 ffff { // 2b9 o#w1 m_aob = m_au; @@ -25566,7 +25566,7 @@ void m68000_device::eori_w_imm16_adr32_ifm() // 0a79 ffff return; } -void m68000_device::eori_i16u_sr_ifm() // 0a7c ffff +void m68000_mcu_device::eori_i16u_sr_ifm() // 0a7c ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -25677,7 +25677,7 @@ void m68000_device::eori_i16u_sr_ifm() // 0a7c ffff return; } -void m68000_device::eori_l_imm32_ds_ifm() // 0a80 fff8 +void m68000_mcu_device::eori_l_imm32_ds_ifm() // 0a80 fff8 { int ry = m_irdi & 7; // 3e0 o#l1 @@ -25773,7 +25773,7 @@ void m68000_device::eori_l_imm32_ds_ifm() // 0a80 fff8 return; } -void m68000_device::eori_l_imm32_ais_ifm() // 0a90 fff8 +void m68000_mcu_device::eori_l_imm32_ais_ifm() // 0a90 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -25947,7 +25947,7 @@ void m68000_device::eori_l_imm32_ais_ifm() // 0a90 fff8 return; } -void m68000_device::eori_l_imm32_aips_ifm() // 0a98 fff8 +void m68000_mcu_device::eori_l_imm32_aips_ifm() // 0a98 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -26125,7 +26125,7 @@ void m68000_device::eori_l_imm32_aips_ifm() // 0a98 fff8 return; } -void m68000_device::eori_l_imm32_pais_ifm() // 0aa0 fff8 +void m68000_mcu_device::eori_l_imm32_pais_ifm() // 0aa0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -26304,7 +26304,7 @@ void m68000_device::eori_l_imm32_pais_ifm() // 0aa0 fff8 return; } -void m68000_device::eori_l_imm32_das_ifm() // 0aa8 fff8 +void m68000_mcu_device::eori_l_imm32_das_ifm() // 0aa8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -26500,7 +26500,7 @@ void m68000_device::eori_l_imm32_das_ifm() // 0aa8 fff8 return; } -void m68000_device::eori_l_imm32_dais_ifm() // 0ab0 fff8 +void m68000_mcu_device::eori_l_imm32_dais_ifm() // 0ab0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -26736,7 +26736,7 @@ adsl2: return; } -void m68000_device::eori_l_imm32_adr16_ifm() // 0ab8 ffff +void m68000_mcu_device::eori_l_imm32_adr16_ifm() // 0ab8 ffff { // 3e0 o#l1 m_aob = m_au; @@ -26935,7 +26935,7 @@ void m68000_device::eori_l_imm32_adr16_ifm() // 0ab8 ffff return; } -void m68000_device::eori_l_imm32_adr32_ifm() // 0ab9 ffff +void m68000_mcu_device::eori_l_imm32_adr32_ifm() // 0ab9 ffff { // 3e0 o#l1 m_aob = m_au; @@ -27156,7 +27156,7 @@ void m68000_device::eori_l_imm32_adr32_ifm() // 0ab9 ffff return; } -void m68000_device::cmpi_b_imm8_ds_ifm() // 0c00 fff8 +void m68000_mcu_device::cmpi_b_imm8_ds_ifm() // 0c00 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -27218,7 +27218,7 @@ void m68000_device::cmpi_b_imm8_ds_ifm() // 0c00 fff8 return; } -void m68000_device::cmpi_b_imm8_ais_ifm() // 0c10 fff8 +void m68000_mcu_device::cmpi_b_imm8_ais_ifm() // 0c10 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -27301,7 +27301,7 @@ void m68000_device::cmpi_b_imm8_ais_ifm() // 0c10 fff8 return; } -void m68000_device::cmpi_b_imm8_aips_ifm() // 0c18 fff8 +void m68000_mcu_device::cmpi_b_imm8_aips_ifm() // 0c18 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -27388,7 +27388,7 @@ void m68000_device::cmpi_b_imm8_aips_ifm() // 0c18 fff8 return; } -void m68000_device::cmpi_b_imm8_pais_ifm() // 0c20 fff8 +void m68000_mcu_device::cmpi_b_imm8_pais_ifm() // 0c20 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -27477,7 +27477,7 @@ void m68000_device::cmpi_b_imm8_pais_ifm() // 0c20 fff8 return; } -void m68000_device::cmpi_b_imm8_das_ifm() // 0c28 fff8 +void m68000_mcu_device::cmpi_b_imm8_das_ifm() // 0c28 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -27582,7 +27582,7 @@ void m68000_device::cmpi_b_imm8_das_ifm() // 0c28 fff8 return; } -void m68000_device::cmpi_b_imm8_dais_ifm() // 0c30 fff8 +void m68000_mcu_device::cmpi_b_imm8_dais_ifm() // 0c30 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -27725,7 +27725,7 @@ adsw2: return; } -void m68000_device::cmpi_b_imm8_adr16_ifm() // 0c38 ffff +void m68000_mcu_device::cmpi_b_imm8_adr16_ifm() // 0c38 ffff { // 2b9 o#w1 m_aob = m_au; @@ -27829,7 +27829,7 @@ void m68000_device::cmpi_b_imm8_adr16_ifm() // 0c38 ffff return; } -void m68000_device::cmpi_b_imm8_adr32_ifm() // 0c39 ffff +void m68000_mcu_device::cmpi_b_imm8_adr32_ifm() // 0c39 ffff { // 2b9 o#w1 m_aob = m_au; @@ -27954,7 +27954,7 @@ void m68000_device::cmpi_b_imm8_adr32_ifm() // 0c39 ffff return; } -void m68000_device::cmpi_w_imm16_ds_ifm() // 0c40 fff8 +void m68000_mcu_device::cmpi_w_imm16_ds_ifm() // 0c40 fff8 { int ry = m_irdi & 7; // 2b9 o#w1 @@ -28016,7 +28016,7 @@ void m68000_device::cmpi_w_imm16_ds_ifm() // 0c40 fff8 return; } -void m68000_device::cmpi_w_imm16_ais_ifm() // 0c50 fff8 +void m68000_mcu_device::cmpi_w_imm16_ais_ifm() // 0c50 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -28102,7 +28102,7 @@ void m68000_device::cmpi_w_imm16_ais_ifm() // 0c50 fff8 return; } -void m68000_device::cmpi_w_imm16_aips_ifm() // 0c58 fff8 +void m68000_mcu_device::cmpi_w_imm16_aips_ifm() // 0c58 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -28192,7 +28192,7 @@ void m68000_device::cmpi_w_imm16_aips_ifm() // 0c58 fff8 return; } -void m68000_device::cmpi_w_imm16_pais_ifm() // 0c60 fff8 +void m68000_mcu_device::cmpi_w_imm16_pais_ifm() // 0c60 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -28284,7 +28284,7 @@ void m68000_device::cmpi_w_imm16_pais_ifm() // 0c60 fff8 return; } -void m68000_device::cmpi_w_imm16_das_ifm() // 0c68 fff8 +void m68000_mcu_device::cmpi_w_imm16_das_ifm() // 0c68 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -28392,7 +28392,7 @@ void m68000_device::cmpi_w_imm16_das_ifm() // 0c68 fff8 return; } -void m68000_device::cmpi_w_imm16_dais_ifm() // 0c70 fff8 +void m68000_mcu_device::cmpi_w_imm16_dais_ifm() // 0c70 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 @@ -28538,7 +28538,7 @@ adsw2: return; } -void m68000_device::cmpi_w_imm16_adr16_ifm() // 0c78 ffff +void m68000_mcu_device::cmpi_w_imm16_adr16_ifm() // 0c78 ffff { // 2b9 o#w1 m_aob = m_au; @@ -28645,7 +28645,7 @@ void m68000_device::cmpi_w_imm16_adr16_ifm() // 0c78 ffff return; } -void m68000_device::cmpi_w_imm16_adr32_ifm() // 0c79 ffff +void m68000_mcu_device::cmpi_w_imm16_adr32_ifm() // 0c79 ffff { // 2b9 o#w1 m_aob = m_au; @@ -28773,7 +28773,7 @@ void m68000_device::cmpi_w_imm16_adr32_ifm() // 0c79 ffff return; } -void m68000_device::cmpi_l_imm32_ds_ifm() // 0c80 fff8 +void m68000_mcu_device::cmpi_l_imm32_ds_ifm() // 0c80 fff8 { int ry = m_irdi & 7; // 3e0 o#l1 @@ -28862,7 +28862,7 @@ void m68000_device::cmpi_l_imm32_ds_ifm() // 0c80 fff8 return; } -void m68000_device::cmpi_l_imm32_ais_ifm() // 0c90 fff8 +void m68000_mcu_device::cmpi_l_imm32_ais_ifm() // 0c90 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -28993,7 +28993,7 @@ void m68000_device::cmpi_l_imm32_ais_ifm() // 0c90 fff8 return; } -void m68000_device::cmpi_l_imm32_aips_ifm() // 0c98 fff8 +void m68000_mcu_device::cmpi_l_imm32_aips_ifm() // 0c98 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -29127,7 +29127,7 @@ void m68000_device::cmpi_l_imm32_aips_ifm() // 0c98 fff8 return; } -void m68000_device::cmpi_l_imm32_pais_ifm() // 0ca0 fff8 +void m68000_mcu_device::cmpi_l_imm32_pais_ifm() // 0ca0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -29262,7 +29262,7 @@ void m68000_device::cmpi_l_imm32_pais_ifm() // 0ca0 fff8 return; } -void m68000_device::cmpi_l_imm32_das_ifm() // 0ca8 fff8 +void m68000_mcu_device::cmpi_l_imm32_das_ifm() // 0ca8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -29414,7 +29414,7 @@ void m68000_device::cmpi_l_imm32_das_ifm() // 0ca8 fff8 return; } -void m68000_device::cmpi_l_imm32_dais_ifm() // 0cb0 fff8 +void m68000_mcu_device::cmpi_l_imm32_dais_ifm() // 0cb0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3e0 o#l1 @@ -29604,7 +29604,7 @@ adsl2: return; } -void m68000_device::cmpi_l_imm32_adr16_ifm() // 0cb8 ffff +void m68000_mcu_device::cmpi_l_imm32_adr16_ifm() // 0cb8 ffff { // 3e0 o#l1 m_aob = m_au; @@ -29758,7 +29758,7 @@ void m68000_device::cmpi_l_imm32_adr16_ifm() // 0cb8 ffff return; } -void m68000_device::cmpi_l_imm32_adr32_ifm() // 0cb9 ffff +void m68000_mcu_device::cmpi_l_imm32_adr32_ifm() // 0cb9 ffff { // 3e0 o#l1 m_aob = m_au; @@ -29933,7 +29933,7 @@ void m68000_device::cmpi_l_imm32_adr32_ifm() // 0cb9 ffff return; } -void m68000_device::move_b_ds_dd_ifm() // 1000 f1f8 +void m68000_mcu_device::move_b_ds_dd_ifm() // 1000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -29976,7 +29976,7 @@ void m68000_device::move_b_ds_dd_ifm() // 1000 f1f8 return; } -void m68000_device::move_b_ais_dd_ifm() // 1010 f1f8 +void m68000_mcu_device::move_b_ais_dd_ifm() // 1010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -30038,7 +30038,7 @@ void m68000_device::move_b_ais_dd_ifm() // 1010 f1f8 return; } -void m68000_device::move_b_aips_dd_ifm() // 1018 f1f8 +void m68000_mcu_device::move_b_aips_dd_ifm() // 1018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -30104,7 +30104,7 @@ void m68000_device::move_b_aips_dd_ifm() // 1018 f1f8 return; } -void m68000_device::move_b_pais_dd_ifm() // 1020 f1f8 +void m68000_mcu_device::move_b_pais_dd_ifm() // 1020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -30172,7 +30172,7 @@ void m68000_device::move_b_pais_dd_ifm() // 1020 f1f8 return; } -void m68000_device::move_b_das_dd_ifm() // 1028 f1f8 +void m68000_mcu_device::move_b_das_dd_ifm() // 1028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -30256,7 +30256,7 @@ void m68000_device::move_b_das_dd_ifm() // 1028 f1f8 return; } -void m68000_device::move_b_dais_dd_ifm() // 1030 f1f8 +void m68000_mcu_device::move_b_dais_dd_ifm() // 1030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -30378,7 +30378,7 @@ adsw2: return; } -void m68000_device::move_b_adr16_dd_ifm() // 1038 f1ff +void m68000_mcu_device::move_b_adr16_dd_ifm() // 1038 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -30461,7 +30461,7 @@ void m68000_device::move_b_adr16_dd_ifm() // 1038 f1ff return; } -void m68000_device::move_b_adr32_dd_ifm() // 1039 f1ff +void m68000_mcu_device::move_b_adr32_dd_ifm() // 1039 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -30565,7 +30565,7 @@ void m68000_device::move_b_adr32_dd_ifm() // 1039 f1ff return; } -void m68000_device::move_b_dpc_dd_ifm() // 103a f1ff +void m68000_mcu_device::move_b_dpc_dd_ifm() // 103a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -30648,7 +30648,7 @@ void m68000_device::move_b_dpc_dd_ifm() // 103a f1ff return; } -void m68000_device::move_b_dpci_dd_ifm() // 103b f1ff +void m68000_mcu_device::move_b_dpci_dd_ifm() // 103b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -30769,7 +30769,7 @@ adsw2: return; } -void m68000_device::move_b_imm8_dd_ifm() // 103c f1ff +void m68000_mcu_device::move_b_imm8_dd_ifm() // 103c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -30835,7 +30835,7 @@ void m68000_device::move_b_imm8_dd_ifm() // 103c f1ff return; } -void m68000_device::move_b_ds_aid_ifm() // 1080 f1f8 +void m68000_mcu_device::move_b_ds_aid_ifm() // 1080 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -30891,7 +30891,7 @@ void m68000_device::move_b_ds_aid_ifm() // 1080 f1f8 return; } -void m68000_device::move_b_ais_aid_ifm() // 1090 f1f8 +void m68000_mcu_device::move_b_ais_aid_ifm() // 1090 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -30967,7 +30967,7 @@ void m68000_device::move_b_ais_aid_ifm() // 1090 f1f8 return; } -void m68000_device::move_b_aips_aid_ifm() // 1098 f1f8 +void m68000_mcu_device::move_b_aips_aid_ifm() // 1098 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -31047,7 +31047,7 @@ void m68000_device::move_b_aips_aid_ifm() // 1098 f1f8 return; } -void m68000_device::move_b_pais_aid_ifm() // 10a0 f1f8 +void m68000_mcu_device::move_b_pais_aid_ifm() // 10a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -31129,7 +31129,7 @@ void m68000_device::move_b_pais_aid_ifm() // 10a0 f1f8 return; } -void m68000_device::move_b_das_aid_ifm() // 10a8 f1f8 +void m68000_mcu_device::move_b_das_aid_ifm() // 10a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -31227,7 +31227,7 @@ void m68000_device::move_b_das_aid_ifm() // 10a8 f1f8 return; } -void m68000_device::move_b_dais_aid_ifm() // 10b0 f1f8 +void m68000_mcu_device::move_b_dais_aid_ifm() // 10b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -31363,7 +31363,7 @@ adsw2: return; } -void m68000_device::move_b_adr16_aid_ifm() // 10b8 f1ff +void m68000_mcu_device::move_b_adr16_aid_ifm() // 10b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -31460,7 +31460,7 @@ void m68000_device::move_b_adr16_aid_ifm() // 10b8 f1ff return; } -void m68000_device::move_b_adr32_aid_ifm() // 10b9 f1ff +void m68000_mcu_device::move_b_adr32_aid_ifm() // 10b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -31578,7 +31578,7 @@ void m68000_device::move_b_adr32_aid_ifm() // 10b9 f1ff return; } -void m68000_device::move_b_dpc_aid_ifm() // 10ba f1ff +void m68000_mcu_device::move_b_dpc_aid_ifm() // 10ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -31675,7 +31675,7 @@ void m68000_device::move_b_dpc_aid_ifm() // 10ba f1ff return; } -void m68000_device::move_b_dpci_aid_ifm() // 10bb f1ff +void m68000_mcu_device::move_b_dpci_aid_ifm() // 10bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -31810,7 +31810,7 @@ adsw2: return; } -void m68000_device::move_b_imm8_aid_ifm() // 10bc f1ff +void m68000_mcu_device::move_b_imm8_aid_ifm() // 10bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -31889,7 +31889,7 @@ void m68000_device::move_b_imm8_aid_ifm() // 10bc f1ff return; } -void m68000_device::move_b_ds_aipd_ifm() // 10c0 f1f8 +void m68000_mcu_device::move_b_ds_aipd_ifm() // 10c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -31944,7 +31944,7 @@ void m68000_device::move_b_ds_aipd_ifm() // 10c0 f1f8 return; } -void m68000_device::move_b_ais_aipd_ifm() // 10d0 f1f8 +void m68000_mcu_device::move_b_ais_aipd_ifm() // 10d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -32020,7 +32020,7 @@ void m68000_device::move_b_ais_aipd_ifm() // 10d0 f1f8 return; } -void m68000_device::move_b_aips_aipd_ifm() // 10d8 f1f8 +void m68000_mcu_device::move_b_aips_aipd_ifm() // 10d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -32100,7 +32100,7 @@ void m68000_device::move_b_aips_aipd_ifm() // 10d8 f1f8 return; } -void m68000_device::move_b_pais_aipd_ifm() // 10e0 f1f8 +void m68000_mcu_device::move_b_pais_aipd_ifm() // 10e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -32182,7 +32182,7 @@ void m68000_device::move_b_pais_aipd_ifm() // 10e0 f1f8 return; } -void m68000_device::move_b_das_aipd_ifm() // 10e8 f1f8 +void m68000_mcu_device::move_b_das_aipd_ifm() // 10e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -32280,7 +32280,7 @@ void m68000_device::move_b_das_aipd_ifm() // 10e8 f1f8 return; } -void m68000_device::move_b_dais_aipd_ifm() // 10f0 f1f8 +void m68000_mcu_device::move_b_dais_aipd_ifm() // 10f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -32416,7 +32416,7 @@ adsw2: return; } -void m68000_device::move_b_adr16_aipd_ifm() // 10f8 f1ff +void m68000_mcu_device::move_b_adr16_aipd_ifm() // 10f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -32513,7 +32513,7 @@ void m68000_device::move_b_adr16_aipd_ifm() // 10f8 f1ff return; } -void m68000_device::move_b_adr32_aipd_ifm() // 10f9 f1ff +void m68000_mcu_device::move_b_adr32_aipd_ifm() // 10f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -32631,7 +32631,7 @@ void m68000_device::move_b_adr32_aipd_ifm() // 10f9 f1ff return; } -void m68000_device::move_b_dpc_aipd_ifm() // 10fa f1ff +void m68000_mcu_device::move_b_dpc_aipd_ifm() // 10fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -32728,7 +32728,7 @@ void m68000_device::move_b_dpc_aipd_ifm() // 10fa f1ff return; } -void m68000_device::move_b_dpci_aipd_ifm() // 10fb f1ff +void m68000_mcu_device::move_b_dpci_aipd_ifm() // 10fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -32863,7 +32863,7 @@ adsw2: return; } -void m68000_device::move_b_imm8_aipd_ifm() // 10fc f1ff +void m68000_mcu_device::move_b_imm8_aipd_ifm() // 10fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -32941,7 +32941,7 @@ void m68000_device::move_b_imm8_aipd_ifm() // 10fc f1ff return; } -void m68000_device::move_b_ds_paid_ifm() // 1100 f1f8 +void m68000_mcu_device::move_b_ds_paid_ifm() // 1100 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -32996,7 +32996,7 @@ void m68000_device::move_b_ds_paid_ifm() // 1100 f1f8 return; } -void m68000_device::move_b_ais_paid_ifm() // 1110 f1f8 +void m68000_mcu_device::move_b_ais_paid_ifm() // 1110 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -33072,7 +33072,7 @@ void m68000_device::move_b_ais_paid_ifm() // 1110 f1f8 return; } -void m68000_device::move_b_aips_paid_ifm() // 1118 f1f8 +void m68000_mcu_device::move_b_aips_paid_ifm() // 1118 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -33152,7 +33152,7 @@ void m68000_device::move_b_aips_paid_ifm() // 1118 f1f8 return; } -void m68000_device::move_b_pais_paid_ifm() // 1120 f1f8 +void m68000_mcu_device::move_b_pais_paid_ifm() // 1120 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -33234,7 +33234,7 @@ void m68000_device::move_b_pais_paid_ifm() // 1120 f1f8 return; } -void m68000_device::move_b_das_paid_ifm() // 1128 f1f8 +void m68000_mcu_device::move_b_das_paid_ifm() // 1128 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -33332,7 +33332,7 @@ void m68000_device::move_b_das_paid_ifm() // 1128 f1f8 return; } -void m68000_device::move_b_dais_paid_ifm() // 1130 f1f8 +void m68000_mcu_device::move_b_dais_paid_ifm() // 1130 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -33468,7 +33468,7 @@ adsw2: return; } -void m68000_device::move_b_adr16_paid_ifm() // 1138 f1ff +void m68000_mcu_device::move_b_adr16_paid_ifm() // 1138 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -33565,7 +33565,7 @@ void m68000_device::move_b_adr16_paid_ifm() // 1138 f1ff return; } -void m68000_device::move_b_adr32_paid_ifm() // 1139 f1ff +void m68000_mcu_device::move_b_adr32_paid_ifm() // 1139 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -33683,7 +33683,7 @@ void m68000_device::move_b_adr32_paid_ifm() // 1139 f1ff return; } -void m68000_device::move_b_dpc_paid_ifm() // 113a f1ff +void m68000_mcu_device::move_b_dpc_paid_ifm() // 113a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -33780,7 +33780,7 @@ void m68000_device::move_b_dpc_paid_ifm() // 113a f1ff return; } -void m68000_device::move_b_dpci_paid_ifm() // 113b f1ff +void m68000_mcu_device::move_b_dpci_paid_ifm() // 113b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -33915,7 +33915,7 @@ adsw2: return; } -void m68000_device::move_b_imm8_paid_ifm() // 113c f1ff +void m68000_mcu_device::move_b_imm8_paid_ifm() // 113c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -33993,7 +33993,7 @@ void m68000_device::move_b_imm8_paid_ifm() // 113c f1ff return; } -void m68000_device::move_b_ds_dad_ifm() // 1140 f1f8 +void m68000_mcu_device::move_b_ds_dad_ifm() // 1140 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -34070,7 +34070,7 @@ void m68000_device::move_b_ds_dad_ifm() // 1140 f1f8 return; } -void m68000_device::move_b_ais_dad_ifm() // 1150 f1f8 +void m68000_mcu_device::move_b_ais_dad_ifm() // 1150 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -34172,7 +34172,7 @@ void m68000_device::move_b_ais_dad_ifm() // 1150 f1f8 return; } -void m68000_device::move_b_aips_dad_ifm() // 1158 f1f8 +void m68000_mcu_device::move_b_aips_dad_ifm() // 1158 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -34278,7 +34278,7 @@ void m68000_device::move_b_aips_dad_ifm() // 1158 f1f8 return; } -void m68000_device::move_b_pais_dad_ifm() // 1160 f1f8 +void m68000_mcu_device::move_b_pais_dad_ifm() // 1160 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -34386,7 +34386,7 @@ void m68000_device::move_b_pais_dad_ifm() // 1160 f1f8 return; } -void m68000_device::move_b_das_dad_ifm() // 1168 f1f8 +void m68000_mcu_device::move_b_das_dad_ifm() // 1168 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -34510,7 +34510,7 @@ void m68000_device::move_b_das_dad_ifm() // 1168 f1f8 return; } -void m68000_device::move_b_dais_dad_ifm() // 1170 f1f8 +void m68000_mcu_device::move_b_dais_dad_ifm() // 1170 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -34672,7 +34672,7 @@ adsw2: return; } -void m68000_device::move_b_adr16_dad_ifm() // 1178 f1ff +void m68000_mcu_device::move_b_adr16_dad_ifm() // 1178 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -34795,7 +34795,7 @@ void m68000_device::move_b_adr16_dad_ifm() // 1178 f1ff return; } -void m68000_device::move_b_adr32_dad_ifm() // 1179 f1ff +void m68000_mcu_device::move_b_adr32_dad_ifm() // 1179 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -34939,7 +34939,7 @@ void m68000_device::move_b_adr32_dad_ifm() // 1179 f1ff return; } -void m68000_device::move_b_dpc_dad_ifm() // 117a f1ff +void m68000_mcu_device::move_b_dpc_dad_ifm() // 117a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -35062,7 +35062,7 @@ void m68000_device::move_b_dpc_dad_ifm() // 117a f1ff return; } -void m68000_device::move_b_dpci_dad_ifm() // 117b f1ff +void m68000_mcu_device::move_b_dpci_dad_ifm() // 117b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -35223,7 +35223,7 @@ adsw2: return; } -void m68000_device::move_b_imm8_dad_ifm() // 117c f1ff +void m68000_mcu_device::move_b_imm8_dad_ifm() // 117c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -35323,7 +35323,7 @@ void m68000_device::move_b_imm8_dad_ifm() // 117c f1ff return; } -void m68000_device::move_b_ds_daid_ifm() // 1180 f1f8 +void m68000_mcu_device::move_b_ds_daid_ifm() // 1180 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -35439,7 +35439,7 @@ rmdw2: return; } -void m68000_device::move_b_ais_daid_ifm() // 1190 f1f8 +void m68000_mcu_device::move_b_ais_daid_ifm() // 1190 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -35579,7 +35579,7 @@ maww2: return; } -void m68000_device::move_b_aips_daid_ifm() // 1198 f1f8 +void m68000_mcu_device::move_b_aips_daid_ifm() // 1198 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -35723,7 +35723,7 @@ maww2: return; } -void m68000_device::move_b_pais_daid_ifm() // 11a0 f1f8 +void m68000_mcu_device::move_b_pais_daid_ifm() // 11a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -35869,7 +35869,7 @@ maww2: return; } -void m68000_device::move_b_das_daid_ifm() // 11a8 f1f8 +void m68000_mcu_device::move_b_das_daid_ifm() // 11a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -36031,7 +36031,7 @@ maww2: return; } -void m68000_device::move_b_dais_daid_ifm() // 11b0 f1f8 +void m68000_mcu_device::move_b_dais_daid_ifm() // 11b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -36231,7 +36231,7 @@ maww2: return; } -void m68000_device::move_b_adr16_daid_ifm() // 11b8 f1ff +void m68000_mcu_device::move_b_adr16_daid_ifm() // 11b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -36392,7 +36392,7 @@ maww2: return; } -void m68000_device::move_b_adr32_daid_ifm() // 11b9 f1ff +void m68000_mcu_device::move_b_adr32_daid_ifm() // 11b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -36574,7 +36574,7 @@ maww2: return; } -void m68000_device::move_b_dpc_daid_ifm() // 11ba f1ff +void m68000_mcu_device::move_b_dpc_daid_ifm() // 11ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -36735,7 +36735,7 @@ maww2: return; } -void m68000_device::move_b_dpci_daid_ifm() // 11bb f1ff +void m68000_mcu_device::move_b_dpci_daid_ifm() // 11bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -36934,7 +36934,7 @@ maww2: return; } -void m68000_device::move_b_imm8_daid_ifm() // 11bc f1ff +void m68000_mcu_device::move_b_imm8_daid_ifm() // 11bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -37073,7 +37073,7 @@ rmdw2: return; } -void m68000_device::move_b_ds_adr16_ifm() // 11c0 fff8 +void m68000_mcu_device::move_b_ds_adr16_ifm() // 11c0 fff8 { int ry = m_irdi & 7; // 2d9 raww1 @@ -37154,7 +37154,7 @@ void m68000_device::move_b_ds_adr16_ifm() // 11c0 fff8 return; } -void m68000_device::move_b_ais_adr16_ifm() // 11d0 fff8 +void m68000_mcu_device::move_b_ais_adr16_ifm() // 11d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -37255,7 +37255,7 @@ void m68000_device::move_b_ais_adr16_ifm() // 11d0 fff8 return; } -void m68000_device::move_b_aips_adr16_ifm() // 11d8 fff8 +void m68000_mcu_device::move_b_aips_adr16_ifm() // 11d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -37360,7 +37360,7 @@ void m68000_device::move_b_aips_adr16_ifm() // 11d8 fff8 return; } -void m68000_device::move_b_pais_adr16_ifm() // 11e0 fff8 +void m68000_mcu_device::move_b_pais_adr16_ifm() // 11e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -37467,7 +37467,7 @@ void m68000_device::move_b_pais_adr16_ifm() // 11e0 fff8 return; } -void m68000_device::move_b_das_adr16_ifm() // 11e8 fff8 +void m68000_mcu_device::move_b_das_adr16_ifm() // 11e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -37590,7 +37590,7 @@ void m68000_device::move_b_das_adr16_ifm() // 11e8 fff8 return; } -void m68000_device::move_b_dais_adr16_ifm() // 11f0 fff8 +void m68000_mcu_device::move_b_dais_adr16_ifm() // 11f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -37751,7 +37751,7 @@ adsw2: return; } -void m68000_device::move_b_adr16_adr16_ifm() // 11f8 ffff +void m68000_mcu_device::move_b_adr16_adr16_ifm() // 11f8 ffff { // 00a abwl1 m_aob = m_au; @@ -37873,7 +37873,7 @@ void m68000_device::move_b_adr16_adr16_ifm() // 11f8 ffff return; } -void m68000_device::move_b_adr32_adr16_ifm() // 11f9 ffff +void m68000_mcu_device::move_b_adr32_adr16_ifm() // 11f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -38016,7 +38016,7 @@ void m68000_device::move_b_adr32_adr16_ifm() // 11f9 ffff return; } -void m68000_device::move_b_dpc_adr16_ifm() // 11fa ffff +void m68000_mcu_device::move_b_dpc_adr16_ifm() // 11fa ffff { // 1c2 adsw1 m_aob = m_au; @@ -38138,7 +38138,7 @@ void m68000_device::move_b_dpc_adr16_ifm() // 11fa ffff return; } -void m68000_device::move_b_dpci_adr16_ifm() // 11fb ffff +void m68000_mcu_device::move_b_dpci_adr16_ifm() // 11fb ffff { // 1e3 aixl0 // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 @@ -38298,7 +38298,7 @@ adsw2: return; } -void m68000_device::move_b_imm8_adr16_ifm() // 11fc ffff +void m68000_mcu_device::move_b_imm8_adr16_ifm() // 11fc ffff { // 0ea e#w1 m_aob = m_au; @@ -38402,7 +38402,7 @@ void m68000_device::move_b_imm8_adr16_ifm() // 11fc ffff return; } -void m68000_device::move_b_ds_adr32_ifm() // 13c0 fff8 +void m68000_mcu_device::move_b_ds_adr32_ifm() // 13c0 fff8 { int ry = m_irdi & 7; // 1ea ralw1 @@ -38504,7 +38504,7 @@ void m68000_device::move_b_ds_adr32_ifm() // 13c0 fff8 return; } -void m68000_device::move_b_ais_adr32_ifm() // 13d0 fff8 +void m68000_mcu_device::move_b_ais_adr32_ifm() // 13d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -38625,7 +38625,7 @@ void m68000_device::move_b_ais_adr32_ifm() // 13d0 fff8 return; } -void m68000_device::move_b_aips_adr32_ifm() // 13d8 fff8 +void m68000_mcu_device::move_b_aips_adr32_ifm() // 13d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -38750,7 +38750,7 @@ void m68000_device::move_b_aips_adr32_ifm() // 13d8 fff8 return; } -void m68000_device::move_b_pais_adr32_ifm() // 13e0 fff8 +void m68000_mcu_device::move_b_pais_adr32_ifm() // 13e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -38877,7 +38877,7 @@ void m68000_device::move_b_pais_adr32_ifm() // 13e0 fff8 return; } -void m68000_device::move_b_das_adr32_ifm() // 13e8 fff8 +void m68000_mcu_device::move_b_das_adr32_ifm() // 13e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -39020,7 +39020,7 @@ void m68000_device::move_b_das_adr32_ifm() // 13e8 fff8 return; } -void m68000_device::move_b_dais_adr32_ifm() // 13f0 fff8 +void m68000_mcu_device::move_b_dais_adr32_ifm() // 13f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -39201,7 +39201,7 @@ adsw2: return; } -void m68000_device::move_b_adr16_adr32_ifm() // 13f8 ffff +void m68000_mcu_device::move_b_adr16_adr32_ifm() // 13f8 ffff { // 00a abwl1 m_aob = m_au; @@ -39343,7 +39343,7 @@ void m68000_device::move_b_adr16_adr32_ifm() // 13f8 ffff return; } -void m68000_device::move_b_adr32_adr32_ifm() // 13f9 ffff +void m68000_mcu_device::move_b_adr32_adr32_ifm() // 13f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -39506,7 +39506,7 @@ void m68000_device::move_b_adr32_adr32_ifm() // 13f9 ffff return; } -void m68000_device::move_b_dpc_adr32_ifm() // 13fa ffff +void m68000_mcu_device::move_b_dpc_adr32_ifm() // 13fa ffff { // 1c2 adsw1 m_aob = m_au; @@ -39648,7 +39648,7 @@ void m68000_device::move_b_dpc_adr32_ifm() // 13fa ffff return; } -void m68000_device::move_b_dpci_adr32_ifm() // 13fb ffff +void m68000_mcu_device::move_b_dpci_adr32_ifm() // 13fb ffff { // 1e3 aixl0 // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 @@ -39828,7 +39828,7 @@ adsw2: return; } -void m68000_device::move_b_imm8_adr32_ifm() // 13fc ffff +void m68000_mcu_device::move_b_imm8_adr32_ifm() // 13fc ffff { // 0ea e#w1 m_aob = m_au; @@ -39953,7 +39953,7 @@ void m68000_device::move_b_imm8_adr32_ifm() // 13fc ffff return; } -void m68000_device::move_l_ds_dd_ifm() // 2000 f1f8 +void m68000_mcu_device::move_l_ds_dd_ifm() // 2000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -39998,7 +39998,7 @@ void m68000_device::move_l_ds_dd_ifm() // 2000 f1f8 return; } -void m68000_device::move_l_as_dd_ifm() // 2008 f1f8 +void m68000_mcu_device::move_l_as_dd_ifm() // 2008 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -40043,7 +40043,7 @@ void m68000_device::move_l_as_dd_ifm() // 2008 f1f8 return; } -void m68000_device::move_l_ais_dd_ifm() // 2010 f1f8 +void m68000_mcu_device::move_l_ais_dd_ifm() // 2010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -40133,7 +40133,7 @@ void m68000_device::move_l_ais_dd_ifm() // 2010 f1f8 return; } -void m68000_device::move_l_aips_dd_ifm() // 2018 f1f8 +void m68000_mcu_device::move_l_aips_dd_ifm() // 2018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -40226,7 +40226,7 @@ void m68000_device::move_l_aips_dd_ifm() // 2018 f1f8 return; } -void m68000_device::move_l_pais_dd_ifm() // 2020 f1f8 +void m68000_mcu_device::move_l_pais_dd_ifm() // 2020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -40320,7 +40320,7 @@ void m68000_device::move_l_pais_dd_ifm() // 2020 f1f8 return; } -void m68000_device::move_l_das_dd_ifm() // 2028 f1f8 +void m68000_mcu_device::move_l_das_dd_ifm() // 2028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -40431,7 +40431,7 @@ void m68000_device::move_l_das_dd_ifm() // 2028 f1f8 return; } -void m68000_device::move_l_dais_dd_ifm() // 2030 f1f8 +void m68000_mcu_device::move_l_dais_dd_ifm() // 2030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -40580,7 +40580,7 @@ adsl2: return; } -void m68000_device::move_l_adr16_dd_ifm() // 2038 f1ff +void m68000_mcu_device::move_l_adr16_dd_ifm() // 2038 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -40693,7 +40693,7 @@ void m68000_device::move_l_adr16_dd_ifm() // 2038 f1ff return; } -void m68000_device::move_l_adr32_dd_ifm() // 2039 f1ff +void m68000_mcu_device::move_l_adr32_dd_ifm() // 2039 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -40827,7 +40827,7 @@ void m68000_device::move_l_adr32_dd_ifm() // 2039 f1ff return; } -void m68000_device::move_l_dpc_dd_ifm() // 203a f1ff +void m68000_mcu_device::move_l_dpc_dd_ifm() // 203a f1ff { int rx = (m_irdi >> 9) & 7; // 1c6 adsl1 @@ -40937,7 +40937,7 @@ void m68000_device::move_l_dpc_dd_ifm() // 203a f1ff return; } -void m68000_device::move_l_dpci_dd_ifm() // 203b f1ff +void m68000_mcu_device::move_l_dpci_dd_ifm() // 203b f1ff { int rx = (m_irdi >> 9) & 7; // 1e7 aixw0 @@ -41085,7 +41085,7 @@ adsl2: return; } -void m68000_device::move_l_imm32_dd_ifm() // 203c f1ff +void m68000_mcu_device::move_l_imm32_dd_ifm() // 203c f1ff { int rx = (m_irdi >> 9) & 7; // 0a7 e#l1 @@ -41174,7 +41174,7 @@ void m68000_device::move_l_imm32_dd_ifm() // 203c f1ff return; } -void m68000_device::movea_l_ds_ad_ifm() // 2040 f1f8 +void m68000_mcu_device::movea_l_ds_ad_ifm() // 2040 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -41217,7 +41217,7 @@ void m68000_device::movea_l_ds_ad_ifm() // 2040 f1f8 return; } -void m68000_device::movea_l_as_ad_ifm() // 2048 f1f8 +void m68000_mcu_device::movea_l_as_ad_ifm() // 2048 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -41260,7 +41260,7 @@ void m68000_device::movea_l_as_ad_ifm() // 2048 f1f8 return; } -void m68000_device::movea_l_ais_ad_ifm() // 2050 f1f8 +void m68000_mcu_device::movea_l_ais_ad_ifm() // 2050 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -41348,7 +41348,7 @@ void m68000_device::movea_l_ais_ad_ifm() // 2050 f1f8 return; } -void m68000_device::movea_l_aips_ad_ifm() // 2058 f1f8 +void m68000_mcu_device::movea_l_aips_ad_ifm() // 2058 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -41439,7 +41439,7 @@ void m68000_device::movea_l_aips_ad_ifm() // 2058 f1f8 return; } -void m68000_device::movea_l_pais_ad_ifm() // 2060 f1f8 +void m68000_mcu_device::movea_l_pais_ad_ifm() // 2060 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -41531,7 +41531,7 @@ void m68000_device::movea_l_pais_ad_ifm() // 2060 f1f8 return; } -void m68000_device::movea_l_das_ad_ifm() // 2068 f1f8 +void m68000_mcu_device::movea_l_das_ad_ifm() // 2068 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -41640,7 +41640,7 @@ void m68000_device::movea_l_das_ad_ifm() // 2068 f1f8 return; } -void m68000_device::movea_l_dais_ad_ifm() // 2070 f1f8 +void m68000_mcu_device::movea_l_dais_ad_ifm() // 2070 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -41787,7 +41787,7 @@ adsl2: return; } -void m68000_device::movea_l_adr16_ad_ifm() // 2078 f1ff +void m68000_mcu_device::movea_l_adr16_ad_ifm() // 2078 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -41898,7 +41898,7 @@ void m68000_device::movea_l_adr16_ad_ifm() // 2078 f1ff return; } -void m68000_device::movea_l_adr32_ad_ifm() // 2079 f1ff +void m68000_mcu_device::movea_l_adr32_ad_ifm() // 2079 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -42030,7 +42030,7 @@ void m68000_device::movea_l_adr32_ad_ifm() // 2079 f1ff return; } -void m68000_device::movea_l_dpc_ad_ifm() // 207a f1ff +void m68000_mcu_device::movea_l_dpc_ad_ifm() // 207a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -42138,7 +42138,7 @@ void m68000_device::movea_l_dpc_ad_ifm() // 207a f1ff return; } -void m68000_device::movea_l_dpci_ad_ifm() // 207b f1ff +void m68000_mcu_device::movea_l_dpci_ad_ifm() // 207b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -42284,7 +42284,7 @@ adsl2: return; } -void m68000_device::movea_l_imm32_ad_ifm() // 207c f1ff +void m68000_mcu_device::movea_l_imm32_ad_ifm() // 207c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -42371,7 +42371,7 @@ void m68000_device::movea_l_imm32_ad_ifm() // 207c f1ff return; } -void m68000_device::move_l_ds_aid_ifm() // 2080 f1f8 +void m68000_mcu_device::move_l_ds_aid_ifm() // 2080 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -42455,7 +42455,7 @@ void m68000_device::move_l_ds_aid_ifm() // 2080 f1f8 return; } -void m68000_device::move_l_as_aid_ifm() // 2088 f1f8 +void m68000_mcu_device::move_l_as_aid_ifm() // 2088 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -42539,7 +42539,7 @@ void m68000_device::move_l_as_aid_ifm() // 2088 f1f8 return; } -void m68000_device::move_l_ais_aid_ifm() // 2090 f1f8 +void m68000_mcu_device::move_l_ais_aid_ifm() // 2090 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -42668,7 +42668,7 @@ void m68000_device::move_l_ais_aid_ifm() // 2090 f1f8 return; } -void m68000_device::move_l_aips_aid_ifm() // 2098 f1f8 +void m68000_mcu_device::move_l_aips_aid_ifm() // 2098 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -42800,7 +42800,7 @@ void m68000_device::move_l_aips_aid_ifm() // 2098 f1f8 return; } -void m68000_device::move_l_pais_aid_ifm() // 20a0 f1f8 +void m68000_mcu_device::move_l_pais_aid_ifm() // 20a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -42933,7 +42933,7 @@ void m68000_device::move_l_pais_aid_ifm() // 20a0 f1f8 return; } -void m68000_device::move_l_das_aid_ifm() // 20a8 f1f8 +void m68000_mcu_device::move_l_das_aid_ifm() // 20a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -43083,7 +43083,7 @@ void m68000_device::move_l_das_aid_ifm() // 20a8 f1f8 return; } -void m68000_device::move_l_dais_aid_ifm() // 20b0 f1f8 +void m68000_mcu_device::move_l_dais_aid_ifm() // 20b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -43271,7 +43271,7 @@ adsl2: return; } -void m68000_device::move_l_adr16_aid_ifm() // 20b8 f1ff +void m68000_mcu_device::move_l_adr16_aid_ifm() // 20b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -43423,7 +43423,7 @@ void m68000_device::move_l_adr16_aid_ifm() // 20b8 f1ff return; } -void m68000_device::move_l_adr32_aid_ifm() // 20b9 f1ff +void m68000_mcu_device::move_l_adr32_aid_ifm() // 20b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -43596,7 +43596,7 @@ void m68000_device::move_l_adr32_aid_ifm() // 20b9 f1ff return; } -void m68000_device::move_l_dpc_aid_ifm() // 20ba f1ff +void m68000_mcu_device::move_l_dpc_aid_ifm() // 20ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -43745,7 +43745,7 @@ void m68000_device::move_l_dpc_aid_ifm() // 20ba f1ff return; } -void m68000_device::move_l_dpci_aid_ifm() // 20bb f1ff +void m68000_mcu_device::move_l_dpci_aid_ifm() // 20bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -43932,7 +43932,7 @@ adsl2: return; } -void m68000_device::move_l_imm32_aid_ifm() // 20bc f1ff +void m68000_mcu_device::move_l_imm32_aid_ifm() // 20bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -44060,7 +44060,7 @@ void m68000_device::move_l_imm32_aid_ifm() // 20bc f1ff return; } -void m68000_device::move_l_ds_aipd_ifm() // 20c0 f1f8 +void m68000_mcu_device::move_l_ds_aipd_ifm() // 20c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -44144,7 +44144,7 @@ void m68000_device::move_l_ds_aipd_ifm() // 20c0 f1f8 return; } -void m68000_device::move_l_as_aipd_ifm() // 20c8 f1f8 +void m68000_mcu_device::move_l_as_aipd_ifm() // 20c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -44228,7 +44228,7 @@ void m68000_device::move_l_as_aipd_ifm() // 20c8 f1f8 return; } -void m68000_device::move_l_ais_aipd_ifm() // 20d0 f1f8 +void m68000_mcu_device::move_l_ais_aipd_ifm() // 20d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -44356,7 +44356,7 @@ void m68000_device::move_l_ais_aipd_ifm() // 20d0 f1f8 return; } -void m68000_device::move_l_aips_aipd_ifm() // 20d8 f1f8 +void m68000_mcu_device::move_l_aips_aipd_ifm() // 20d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -44487,7 +44487,7 @@ void m68000_device::move_l_aips_aipd_ifm() // 20d8 f1f8 return; } -void m68000_device::move_l_pais_aipd_ifm() // 20e0 f1f8 +void m68000_mcu_device::move_l_pais_aipd_ifm() // 20e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -44619,7 +44619,7 @@ void m68000_device::move_l_pais_aipd_ifm() // 20e0 f1f8 return; } -void m68000_device::move_l_das_aipd_ifm() // 20e8 f1f8 +void m68000_mcu_device::move_l_das_aipd_ifm() // 20e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -44768,7 +44768,7 @@ void m68000_device::move_l_das_aipd_ifm() // 20e8 f1f8 return; } -void m68000_device::move_l_dais_aipd_ifm() // 20f0 f1f8 +void m68000_mcu_device::move_l_dais_aipd_ifm() // 20f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -44955,7 +44955,7 @@ adsl2: return; } -void m68000_device::move_l_adr16_aipd_ifm() // 20f8 f1ff +void m68000_mcu_device::move_l_adr16_aipd_ifm() // 20f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -45106,7 +45106,7 @@ void m68000_device::move_l_adr16_aipd_ifm() // 20f8 f1ff return; } -void m68000_device::move_l_adr32_aipd_ifm() // 20f9 f1ff +void m68000_mcu_device::move_l_adr32_aipd_ifm() // 20f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -45278,7 +45278,7 @@ void m68000_device::move_l_adr32_aipd_ifm() // 20f9 f1ff return; } -void m68000_device::move_l_dpc_aipd_ifm() // 20fa f1ff +void m68000_mcu_device::move_l_dpc_aipd_ifm() // 20fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -45426,7 +45426,7 @@ void m68000_device::move_l_dpc_aipd_ifm() // 20fa f1ff return; } -void m68000_device::move_l_dpci_aipd_ifm() // 20fb f1ff +void m68000_mcu_device::move_l_dpci_aipd_ifm() // 20fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -45612,7 +45612,7 @@ adsl2: return; } -void m68000_device::move_l_imm32_aipd_ifm() // 20fc f1ff +void m68000_mcu_device::move_l_imm32_aipd_ifm() // 20fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -45740,7 +45740,7 @@ void m68000_device::move_l_imm32_aipd_ifm() // 20fc f1ff return; } -void m68000_device::move_l_ds_paid_ifm() // 2100 f1f8 +void m68000_mcu_device::move_l_ds_paid_ifm() // 2100 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -45823,7 +45823,7 @@ void m68000_device::move_l_ds_paid_ifm() // 2100 f1f8 return; } -void m68000_device::move_l_as_paid_ifm() // 2108 f1f8 +void m68000_mcu_device::move_l_as_paid_ifm() // 2108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -45906,7 +45906,7 @@ void m68000_device::move_l_as_paid_ifm() // 2108 f1f8 return; } -void m68000_device::move_l_ais_paid_ifm() // 2110 f1f8 +void m68000_mcu_device::move_l_ais_paid_ifm() // 2110 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -46034,7 +46034,7 @@ void m68000_device::move_l_ais_paid_ifm() // 2110 f1f8 return; } -void m68000_device::move_l_aips_paid_ifm() // 2118 f1f8 +void m68000_mcu_device::move_l_aips_paid_ifm() // 2118 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -46165,7 +46165,7 @@ void m68000_device::move_l_aips_paid_ifm() // 2118 f1f8 return; } -void m68000_device::move_l_pais_paid_ifm() // 2120 f1f8 +void m68000_mcu_device::move_l_pais_paid_ifm() // 2120 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -46297,7 +46297,7 @@ void m68000_device::move_l_pais_paid_ifm() // 2120 f1f8 return; } -void m68000_device::move_l_das_paid_ifm() // 2128 f1f8 +void m68000_mcu_device::move_l_das_paid_ifm() // 2128 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -46446,7 +46446,7 @@ void m68000_device::move_l_das_paid_ifm() // 2128 f1f8 return; } -void m68000_device::move_l_dais_paid_ifm() // 2130 f1f8 +void m68000_mcu_device::move_l_dais_paid_ifm() // 2130 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -46633,7 +46633,7 @@ adsl2: return; } -void m68000_device::move_l_adr16_paid_ifm() // 2138 f1ff +void m68000_mcu_device::move_l_adr16_paid_ifm() // 2138 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -46784,7 +46784,7 @@ void m68000_device::move_l_adr16_paid_ifm() // 2138 f1ff return; } -void m68000_device::move_l_adr32_paid_ifm() // 2139 f1ff +void m68000_mcu_device::move_l_adr32_paid_ifm() // 2139 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -46956,7 +46956,7 @@ void m68000_device::move_l_adr32_paid_ifm() // 2139 f1ff return; } -void m68000_device::move_l_dpc_paid_ifm() // 213a f1ff +void m68000_mcu_device::move_l_dpc_paid_ifm() // 213a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -47104,7 +47104,7 @@ void m68000_device::move_l_dpc_paid_ifm() // 213a f1ff return; } -void m68000_device::move_l_dpci_paid_ifm() // 213b f1ff +void m68000_mcu_device::move_l_dpci_paid_ifm() // 213b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -47290,7 +47290,7 @@ adsl2: return; } -void m68000_device::move_l_imm32_paid_ifm() // 213c f1ff +void m68000_mcu_device::move_l_imm32_paid_ifm() // 213c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -47417,7 +47417,7 @@ void m68000_device::move_l_imm32_paid_ifm() // 213c f1ff return; } -void m68000_device::move_l_ds_dad_ifm() // 2140 f1f8 +void m68000_mcu_device::move_l_ds_dad_ifm() // 2140 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -47524,7 +47524,7 @@ void m68000_device::move_l_ds_dad_ifm() // 2140 f1f8 return; } -void m68000_device::move_l_as_dad_ifm() // 2148 f1f8 +void m68000_mcu_device::move_l_as_dad_ifm() // 2148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -47631,7 +47631,7 @@ void m68000_device::move_l_as_dad_ifm() // 2148 f1f8 return; } -void m68000_device::move_l_ais_dad_ifm() // 2150 f1f8 +void m68000_mcu_device::move_l_ais_dad_ifm() // 2150 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -47786,7 +47786,7 @@ void m68000_device::move_l_ais_dad_ifm() // 2150 f1f8 return; } -void m68000_device::move_l_aips_dad_ifm() // 2158 f1f8 +void m68000_mcu_device::move_l_aips_dad_ifm() // 2158 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -47944,7 +47944,7 @@ void m68000_device::move_l_aips_dad_ifm() // 2158 f1f8 return; } -void m68000_device::move_l_pais_dad_ifm() // 2160 f1f8 +void m68000_mcu_device::move_l_pais_dad_ifm() // 2160 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -48103,7 +48103,7 @@ void m68000_device::move_l_pais_dad_ifm() // 2160 f1f8 return; } -void m68000_device::move_l_das_dad_ifm() // 2168 f1f8 +void m68000_mcu_device::move_l_das_dad_ifm() // 2168 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -48279,7 +48279,7 @@ void m68000_device::move_l_das_dad_ifm() // 2168 f1f8 return; } -void m68000_device::move_l_dais_dad_ifm() // 2170 f1f8 +void m68000_mcu_device::move_l_dais_dad_ifm() // 2170 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -48493,7 +48493,7 @@ adsl2: return; } -void m68000_device::move_l_adr16_dad_ifm() // 2178 f1ff +void m68000_mcu_device::move_l_adr16_dad_ifm() // 2178 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -48671,7 +48671,7 @@ void m68000_device::move_l_adr16_dad_ifm() // 2178 f1ff return; } -void m68000_device::move_l_adr32_dad_ifm() // 2179 f1ff +void m68000_mcu_device::move_l_adr32_dad_ifm() // 2179 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -48870,7 +48870,7 @@ void m68000_device::move_l_adr32_dad_ifm() // 2179 f1ff return; } -void m68000_device::move_l_dpc_dad_ifm() // 217a f1ff +void m68000_mcu_device::move_l_dpc_dad_ifm() // 217a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -49045,7 +49045,7 @@ void m68000_device::move_l_dpc_dad_ifm() // 217a f1ff return; } -void m68000_device::move_l_dpci_dad_ifm() // 217b f1ff +void m68000_mcu_device::move_l_dpci_dad_ifm() // 217b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -49258,7 +49258,7 @@ adsl2: return; } -void m68000_device::move_l_imm32_dad_ifm() // 217c f1ff +void m68000_mcu_device::move_l_imm32_dad_ifm() // 217c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -49409,7 +49409,7 @@ void m68000_device::move_l_imm32_dad_ifm() // 217c f1ff return; } -void m68000_device::move_l_ds_daid_ifm() // 2180 f1f8 +void m68000_mcu_device::move_l_ds_daid_ifm() // 2180 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -49555,7 +49555,7 @@ rmdl2: return; } -void m68000_device::move_l_as_daid_ifm() // 2188 f1f8 +void m68000_mcu_device::move_l_as_daid_ifm() // 2188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -49701,7 +49701,7 @@ rmdl2: return; } -void m68000_device::move_l_ais_daid_ifm() // 2190 f1f8 +void m68000_mcu_device::move_l_ais_daid_ifm() // 2190 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -49894,7 +49894,7 @@ mawl2: return; } -void m68000_device::move_l_aips_daid_ifm() // 2198 f1f8 +void m68000_mcu_device::move_l_aips_daid_ifm() // 2198 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50090,7 +50090,7 @@ mawl2: return; } -void m68000_device::move_l_pais_daid_ifm() // 21a0 f1f8 +void m68000_mcu_device::move_l_pais_daid_ifm() // 21a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50287,7 +50287,7 @@ mawl2: return; } -void m68000_device::move_l_das_daid_ifm() // 21a8 f1f8 +void m68000_mcu_device::move_l_das_daid_ifm() // 21a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50501,7 +50501,7 @@ mawl2: return; } -void m68000_device::move_l_dais_daid_ifm() // 21b0 f1f8 +void m68000_mcu_device::move_l_dais_daid_ifm() // 21b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50753,7 +50753,7 @@ mawl2: return; } -void m68000_device::move_l_adr16_daid_ifm() // 21b8 f1ff +void m68000_mcu_device::move_l_adr16_daid_ifm() // 21b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -50969,7 +50969,7 @@ mawl2: return; } -void m68000_device::move_l_adr32_daid_ifm() // 21b9 f1ff +void m68000_mcu_device::move_l_adr32_daid_ifm() // 21b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -51206,7 +51206,7 @@ mawl2: return; } -void m68000_device::move_l_dpc_daid_ifm() // 21ba f1ff +void m68000_mcu_device::move_l_dpc_daid_ifm() // 21ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -51419,7 +51419,7 @@ mawl2: return; } -void m68000_device::move_l_dpci_daid_ifm() // 21bb f1ff +void m68000_mcu_device::move_l_dpci_daid_ifm() // 21bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -51670,7 +51670,7 @@ mawl2: return; } -void m68000_device::move_l_imm32_daid_ifm() // 21bc f1ff +void m68000_mcu_device::move_l_imm32_daid_ifm() // 21bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -51860,7 +51860,7 @@ rmdl2: return; } -void m68000_device::move_l_ds_adr16_ifm() // 21c0 fff8 +void m68000_mcu_device::move_l_ds_adr16_ifm() // 21c0 fff8 { int ry = m_irdi & 7; // 2dd rawl1 @@ -51970,7 +51970,7 @@ void m68000_device::move_l_ds_adr16_ifm() // 21c0 fff8 return; } -void m68000_device::move_l_as_adr16_ifm() // 21c8 fff8 +void m68000_mcu_device::move_l_as_adr16_ifm() // 21c8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2dd rawl1 @@ -52080,7 +52080,7 @@ void m68000_device::move_l_as_adr16_ifm() // 21c8 fff8 return; } -void m68000_device::move_l_ais_adr16_ifm() // 21d0 fff8 +void m68000_mcu_device::move_l_ais_adr16_ifm() // 21d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -52234,7 +52234,7 @@ void m68000_device::move_l_ais_adr16_ifm() // 21d0 fff8 return; } -void m68000_device::move_l_aips_adr16_ifm() // 21d8 fff8 +void m68000_mcu_device::move_l_aips_adr16_ifm() // 21d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -52391,7 +52391,7 @@ void m68000_device::move_l_aips_adr16_ifm() // 21d8 fff8 return; } -void m68000_device::move_l_pais_adr16_ifm() // 21e0 fff8 +void m68000_mcu_device::move_l_pais_adr16_ifm() // 21e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -52549,7 +52549,7 @@ void m68000_device::move_l_pais_adr16_ifm() // 21e0 fff8 return; } -void m68000_device::move_l_das_adr16_ifm() // 21e8 fff8 +void m68000_mcu_device::move_l_das_adr16_ifm() // 21e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -52724,7 +52724,7 @@ void m68000_device::move_l_das_adr16_ifm() // 21e8 fff8 return; } -void m68000_device::move_l_dais_adr16_ifm() // 21f0 fff8 +void m68000_mcu_device::move_l_dais_adr16_ifm() // 21f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -52937,7 +52937,7 @@ adsl2: return; } -void m68000_device::move_l_adr16_adr16_ifm() // 21f8 ffff +void m68000_mcu_device::move_l_adr16_adr16_ifm() // 21f8 ffff { // 00e abww1 m_aob = m_au; @@ -53114,7 +53114,7 @@ void m68000_device::move_l_adr16_adr16_ifm() // 21f8 ffff return; } -void m68000_device::move_l_adr32_adr16_ifm() // 21f9 ffff +void m68000_mcu_device::move_l_adr32_adr16_ifm() // 21f9 ffff { // 1e6 ablw1 m_aob = m_au; @@ -53312,7 +53312,7 @@ void m68000_device::move_l_adr32_adr16_ifm() // 21f9 ffff return; } -void m68000_device::move_l_dpc_adr16_ifm() // 21fa ffff +void m68000_mcu_device::move_l_dpc_adr16_ifm() // 21fa ffff { // 1c6 adsl1 m_aob = m_au; @@ -53486,7 +53486,7 @@ void m68000_device::move_l_dpc_adr16_ifm() // 21fa ffff return; } -void m68000_device::move_l_dpci_adr16_ifm() // 21fb ffff +void m68000_mcu_device::move_l_dpci_adr16_ifm() // 21fb ffff { // 1e7 aixw0 // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -53698,7 +53698,7 @@ adsl2: return; } -void m68000_device::move_l_imm32_adr16_ifm() // 21fc ffff +void m68000_mcu_device::move_l_imm32_adr16_ifm() // 21fc ffff { // 0a7 e#l1 m_aob = m_au; @@ -53852,7 +53852,7 @@ void m68000_device::move_l_imm32_adr16_ifm() // 21fc ffff return; } -void m68000_device::move_l_ds_adr32_ifm() // 23c0 fff8 +void m68000_mcu_device::move_l_ds_adr32_ifm() // 23c0 fff8 { int ry = m_irdi & 7; // 1ee rall1 @@ -53983,7 +53983,7 @@ void m68000_device::move_l_ds_adr32_ifm() // 23c0 fff8 return; } -void m68000_device::move_l_as_adr32_ifm() // 23c8 fff8 +void m68000_mcu_device::move_l_as_adr32_ifm() // 23c8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1ee rall1 @@ -54114,7 +54114,7 @@ void m68000_device::move_l_as_adr32_ifm() // 23c8 fff8 return; } -void m68000_device::move_l_ais_adr32_ifm() // 23d0 fff8 +void m68000_mcu_device::move_l_ais_adr32_ifm() // 23d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -54290,7 +54290,7 @@ void m68000_device::move_l_ais_adr32_ifm() // 23d0 fff8 return; } -void m68000_device::move_l_aips_adr32_ifm() // 23d8 fff8 +void m68000_mcu_device::move_l_aips_adr32_ifm() // 23d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -54469,7 +54469,7 @@ void m68000_device::move_l_aips_adr32_ifm() // 23d8 fff8 return; } -void m68000_device::move_l_pais_adr32_ifm() // 23e0 fff8 +void m68000_mcu_device::move_l_pais_adr32_ifm() // 23e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -54649,7 +54649,7 @@ void m68000_device::move_l_pais_adr32_ifm() // 23e0 fff8 return; } -void m68000_device::move_l_das_adr32_ifm() // 23e8 fff8 +void m68000_mcu_device::move_l_das_adr32_ifm() // 23e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -54846,7 +54846,7 @@ void m68000_device::move_l_das_adr32_ifm() // 23e8 fff8 return; } -void m68000_device::move_l_dais_adr32_ifm() // 23f0 fff8 +void m68000_mcu_device::move_l_dais_adr32_ifm() // 23f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -55081,7 +55081,7 @@ adsl2: return; } -void m68000_device::move_l_adr16_adr32_ifm() // 23f8 ffff +void m68000_mcu_device::move_l_adr16_adr32_ifm() // 23f8 ffff { // 00e abww1 m_aob = m_au; @@ -55280,7 +55280,7 @@ void m68000_device::move_l_adr16_adr32_ifm() // 23f8 ffff return; } -void m68000_device::move_l_adr32_adr32_ifm() // 23f9 ffff +void m68000_mcu_device::move_l_adr32_adr32_ifm() // 23f9 ffff { // 1e6 ablw1 m_aob = m_au; @@ -55500,7 +55500,7 @@ void m68000_device::move_l_adr32_adr32_ifm() // 23f9 ffff return; } -void m68000_device::move_l_dpc_adr32_ifm() // 23fa ffff +void m68000_mcu_device::move_l_dpc_adr32_ifm() // 23fa ffff { // 1c6 adsl1 m_aob = m_au; @@ -55696,7 +55696,7 @@ void m68000_device::move_l_dpc_adr32_ifm() // 23fa ffff return; } -void m68000_device::move_l_dpci_adr32_ifm() // 23fb ffff +void m68000_mcu_device::move_l_dpci_adr32_ifm() // 23fb ffff { // 1e7 aixw0 // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -55930,7 +55930,7 @@ adsl2: return; } -void m68000_device::move_l_imm32_adr32_ifm() // 23fc ffff +void m68000_mcu_device::move_l_imm32_adr32_ifm() // 23fc ffff { // 0a7 e#l1 m_aob = m_au; @@ -56105,7 +56105,7 @@ void m68000_device::move_l_imm32_adr32_ifm() // 23fc ffff return; } -void m68000_device::move_w_ds_dd_ifm() // 3000 f1f8 +void m68000_mcu_device::move_w_ds_dd_ifm() // 3000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -56148,7 +56148,7 @@ void m68000_device::move_w_ds_dd_ifm() // 3000 f1f8 return; } -void m68000_device::move_w_as_dd_ifm() // 3008 f1f8 +void m68000_mcu_device::move_w_as_dd_ifm() // 3008 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -56191,7 +56191,7 @@ void m68000_device::move_w_as_dd_ifm() // 3008 f1f8 return; } -void m68000_device::move_w_ais_dd_ifm() // 3010 f1f8 +void m68000_mcu_device::move_w_ais_dd_ifm() // 3010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -56256,7 +56256,7 @@ void m68000_device::move_w_ais_dd_ifm() // 3010 f1f8 return; } -void m68000_device::move_w_aips_dd_ifm() // 3018 f1f8 +void m68000_mcu_device::move_w_aips_dd_ifm() // 3018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -56325,7 +56325,7 @@ void m68000_device::move_w_aips_dd_ifm() // 3018 f1f8 return; } -void m68000_device::move_w_pais_dd_ifm() // 3020 f1f8 +void m68000_mcu_device::move_w_pais_dd_ifm() // 3020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -56396,7 +56396,7 @@ void m68000_device::move_w_pais_dd_ifm() // 3020 f1f8 return; } -void m68000_device::move_w_das_dd_ifm() // 3028 f1f8 +void m68000_mcu_device::move_w_das_dd_ifm() // 3028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -56483,7 +56483,7 @@ void m68000_device::move_w_das_dd_ifm() // 3028 f1f8 return; } -void m68000_device::move_w_dais_dd_ifm() // 3030 f1f8 +void m68000_mcu_device::move_w_dais_dd_ifm() // 3030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -56608,7 +56608,7 @@ adsw2: return; } -void m68000_device::move_w_adr16_dd_ifm() // 3038 f1ff +void m68000_mcu_device::move_w_adr16_dd_ifm() // 3038 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -56694,7 +56694,7 @@ void m68000_device::move_w_adr16_dd_ifm() // 3038 f1ff return; } -void m68000_device::move_w_adr32_dd_ifm() // 3039 f1ff +void m68000_mcu_device::move_w_adr32_dd_ifm() // 3039 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -56801,7 +56801,7 @@ void m68000_device::move_w_adr32_dd_ifm() // 3039 f1ff return; } -void m68000_device::move_w_dpc_dd_ifm() // 303a f1ff +void m68000_mcu_device::move_w_dpc_dd_ifm() // 303a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -56887,7 +56887,7 @@ void m68000_device::move_w_dpc_dd_ifm() // 303a f1ff return; } -void m68000_device::move_w_dpci_dd_ifm() // 303b f1ff +void m68000_mcu_device::move_w_dpci_dd_ifm() // 303b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -57011,7 +57011,7 @@ adsw2: return; } -void m68000_device::move_w_imm16_dd_ifm() // 303c f1ff +void m68000_mcu_device::move_w_imm16_dd_ifm() // 303c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -57077,7 +57077,7 @@ void m68000_device::move_w_imm16_dd_ifm() // 303c f1ff return; } -void m68000_device::movea_w_ds_ad_ifm() // 3040 f1f8 +void m68000_mcu_device::movea_w_ds_ad_ifm() // 3040 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -57118,7 +57118,7 @@ void m68000_device::movea_w_ds_ad_ifm() // 3040 f1f8 return; } -void m68000_device::movea_w_as_ad_ifm() // 3048 f1f8 +void m68000_mcu_device::movea_w_as_ad_ifm() // 3048 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57159,7 +57159,7 @@ void m68000_device::movea_w_as_ad_ifm() // 3048 f1f8 return; } -void m68000_device::movea_w_ais_ad_ifm() // 3050 f1f8 +void m68000_mcu_device::movea_w_ais_ad_ifm() // 3050 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57221,7 +57221,7 @@ void m68000_device::movea_w_ais_ad_ifm() // 3050 f1f8 return; } -void m68000_device::movea_w_aips_ad_ifm() // 3058 f1f8 +void m68000_mcu_device::movea_w_aips_ad_ifm() // 3058 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57287,7 +57287,7 @@ void m68000_device::movea_w_aips_ad_ifm() // 3058 f1f8 return; } -void m68000_device::movea_w_pais_ad_ifm() // 3060 f1f8 +void m68000_mcu_device::movea_w_pais_ad_ifm() // 3060 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57355,7 +57355,7 @@ void m68000_device::movea_w_pais_ad_ifm() // 3060 f1f8 return; } -void m68000_device::movea_w_das_ad_ifm() // 3068 f1f8 +void m68000_mcu_device::movea_w_das_ad_ifm() // 3068 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57439,7 +57439,7 @@ void m68000_device::movea_w_das_ad_ifm() // 3068 f1f8 return; } -void m68000_device::movea_w_dais_ad_ifm() // 3070 f1f8 +void m68000_mcu_device::movea_w_dais_ad_ifm() // 3070 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57561,7 +57561,7 @@ adsw2: return; } -void m68000_device::movea_w_adr16_ad_ifm() // 3078 f1ff +void m68000_mcu_device::movea_w_adr16_ad_ifm() // 3078 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -57644,7 +57644,7 @@ void m68000_device::movea_w_adr16_ad_ifm() // 3078 f1ff return; } -void m68000_device::movea_w_adr32_ad_ifm() // 3079 f1ff +void m68000_mcu_device::movea_w_adr32_ad_ifm() // 3079 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -57748,7 +57748,7 @@ void m68000_device::movea_w_adr32_ad_ifm() // 3079 f1ff return; } -void m68000_device::movea_w_dpc_ad_ifm() // 307a f1ff +void m68000_mcu_device::movea_w_dpc_ad_ifm() // 307a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -57831,7 +57831,7 @@ void m68000_device::movea_w_dpc_ad_ifm() // 307a f1ff return; } -void m68000_device::movea_w_dpci_ad_ifm() // 307b f1ff +void m68000_mcu_device::movea_w_dpci_ad_ifm() // 307b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -57952,7 +57952,7 @@ adsw2: return; } -void m68000_device::movea_w_imm16_ad_ifm() // 307c f1ff +void m68000_mcu_device::movea_w_imm16_ad_ifm() // 307c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -58016,7 +58016,7 @@ void m68000_device::movea_w_imm16_ad_ifm() // 307c f1ff return; } -void m68000_device::move_w_ds_aid_ifm() // 3080 f1f8 +void m68000_mcu_device::move_w_ds_aid_ifm() // 3080 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -58077,7 +58077,7 @@ void m68000_device::move_w_ds_aid_ifm() // 3080 f1f8 return; } -void m68000_device::move_w_as_aid_ifm() // 3088 f1f8 +void m68000_mcu_device::move_w_as_aid_ifm() // 3088 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -58138,7 +58138,7 @@ void m68000_device::move_w_as_aid_ifm() // 3088 f1f8 return; } -void m68000_device::move_w_ais_aid_ifm() // 3090 f1f8 +void m68000_mcu_device::move_w_ais_aid_ifm() // 3090 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -58222,7 +58222,7 @@ void m68000_device::move_w_ais_aid_ifm() // 3090 f1f8 return; } -void m68000_device::move_w_aips_aid_ifm() // 3098 f1f8 +void m68000_mcu_device::move_w_aips_aid_ifm() // 3098 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -58310,7 +58310,7 @@ void m68000_device::move_w_aips_aid_ifm() // 3098 f1f8 return; } -void m68000_device::move_w_pais_aid_ifm() // 30a0 f1f8 +void m68000_mcu_device::move_w_pais_aid_ifm() // 30a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -58400,7 +58400,7 @@ void m68000_device::move_w_pais_aid_ifm() // 30a0 f1f8 return; } -void m68000_device::move_w_das_aid_ifm() // 30a8 f1f8 +void m68000_mcu_device::move_w_das_aid_ifm() // 30a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -58506,7 +58506,7 @@ void m68000_device::move_w_das_aid_ifm() // 30a8 f1f8 return; } -void m68000_device::move_w_dais_aid_ifm() // 30b0 f1f8 +void m68000_mcu_device::move_w_dais_aid_ifm() // 30b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -58650,7 +58650,7 @@ adsw2: return; } -void m68000_device::move_w_adr16_aid_ifm() // 30b8 f1ff +void m68000_mcu_device::move_w_adr16_aid_ifm() // 30b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -58755,7 +58755,7 @@ void m68000_device::move_w_adr16_aid_ifm() // 30b8 f1ff return; } -void m68000_device::move_w_adr32_aid_ifm() // 30b9 f1ff +void m68000_mcu_device::move_w_adr32_aid_ifm() // 30b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -58881,7 +58881,7 @@ void m68000_device::move_w_adr32_aid_ifm() // 30b9 f1ff return; } -void m68000_device::move_w_dpc_aid_ifm() // 30ba f1ff +void m68000_mcu_device::move_w_dpc_aid_ifm() // 30ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -58986,7 +58986,7 @@ void m68000_device::move_w_dpc_aid_ifm() // 30ba f1ff return; } -void m68000_device::move_w_dpci_aid_ifm() // 30bb f1ff +void m68000_mcu_device::move_w_dpci_aid_ifm() // 30bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -59129,7 +59129,7 @@ adsw2: return; } -void m68000_device::move_w_imm16_aid_ifm() // 30bc f1ff +void m68000_mcu_device::move_w_imm16_aid_ifm() // 30bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -59213,7 +59213,7 @@ void m68000_device::move_w_imm16_aid_ifm() // 30bc f1ff return; } -void m68000_device::move_w_ds_aipd_ifm() // 30c0 f1f8 +void m68000_mcu_device::move_w_ds_aipd_ifm() // 30c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -59273,7 +59273,7 @@ void m68000_device::move_w_ds_aipd_ifm() // 30c0 f1f8 return; } -void m68000_device::move_w_as_aipd_ifm() // 30c8 f1f8 +void m68000_mcu_device::move_w_as_aipd_ifm() // 30c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -59333,7 +59333,7 @@ void m68000_device::move_w_as_aipd_ifm() // 30c8 f1f8 return; } -void m68000_device::move_w_ais_aipd_ifm() // 30d0 f1f8 +void m68000_mcu_device::move_w_ais_aipd_ifm() // 30d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -59417,7 +59417,7 @@ void m68000_device::move_w_ais_aipd_ifm() // 30d0 f1f8 return; } -void m68000_device::move_w_aips_aipd_ifm() // 30d8 f1f8 +void m68000_mcu_device::move_w_aips_aipd_ifm() // 30d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -59505,7 +59505,7 @@ void m68000_device::move_w_aips_aipd_ifm() // 30d8 f1f8 return; } -void m68000_device::move_w_pais_aipd_ifm() // 30e0 f1f8 +void m68000_mcu_device::move_w_pais_aipd_ifm() // 30e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -59595,7 +59595,7 @@ void m68000_device::move_w_pais_aipd_ifm() // 30e0 f1f8 return; } -void m68000_device::move_w_das_aipd_ifm() // 30e8 f1f8 +void m68000_mcu_device::move_w_das_aipd_ifm() // 30e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -59701,7 +59701,7 @@ void m68000_device::move_w_das_aipd_ifm() // 30e8 f1f8 return; } -void m68000_device::move_w_dais_aipd_ifm() // 30f0 f1f8 +void m68000_mcu_device::move_w_dais_aipd_ifm() // 30f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -59845,7 +59845,7 @@ adsw2: return; } -void m68000_device::move_w_adr16_aipd_ifm() // 30f8 f1ff +void m68000_mcu_device::move_w_adr16_aipd_ifm() // 30f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -59950,7 +59950,7 @@ void m68000_device::move_w_adr16_aipd_ifm() // 30f8 f1ff return; } -void m68000_device::move_w_adr32_aipd_ifm() // 30f9 f1ff +void m68000_mcu_device::move_w_adr32_aipd_ifm() // 30f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -60076,7 +60076,7 @@ void m68000_device::move_w_adr32_aipd_ifm() // 30f9 f1ff return; } -void m68000_device::move_w_dpc_aipd_ifm() // 30fa f1ff +void m68000_mcu_device::move_w_dpc_aipd_ifm() // 30fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -60181,7 +60181,7 @@ void m68000_device::move_w_dpc_aipd_ifm() // 30fa f1ff return; } -void m68000_device::move_w_dpci_aipd_ifm() // 30fb f1ff +void m68000_mcu_device::move_w_dpci_aipd_ifm() // 30fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -60324,7 +60324,7 @@ adsw2: return; } -void m68000_device::move_w_imm16_aipd_ifm() // 30fc f1ff +void m68000_mcu_device::move_w_imm16_aipd_ifm() // 30fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -60407,7 +60407,7 @@ void m68000_device::move_w_imm16_aipd_ifm() // 30fc f1ff return; } -void m68000_device::move_w_ds_paid_ifm() // 3100 f1f8 +void m68000_mcu_device::move_w_ds_paid_ifm() // 3100 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -60467,7 +60467,7 @@ void m68000_device::move_w_ds_paid_ifm() // 3100 f1f8 return; } -void m68000_device::move_w_as_paid_ifm() // 3108 f1f8 +void m68000_mcu_device::move_w_as_paid_ifm() // 3108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -60527,7 +60527,7 @@ void m68000_device::move_w_as_paid_ifm() // 3108 f1f8 return; } -void m68000_device::move_w_ais_paid_ifm() // 3110 f1f8 +void m68000_mcu_device::move_w_ais_paid_ifm() // 3110 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -60611,7 +60611,7 @@ void m68000_device::move_w_ais_paid_ifm() // 3110 f1f8 return; } -void m68000_device::move_w_aips_paid_ifm() // 3118 f1f8 +void m68000_mcu_device::move_w_aips_paid_ifm() // 3118 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -60699,7 +60699,7 @@ void m68000_device::move_w_aips_paid_ifm() // 3118 f1f8 return; } -void m68000_device::move_w_pais_paid_ifm() // 3120 f1f8 +void m68000_mcu_device::move_w_pais_paid_ifm() // 3120 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -60789,7 +60789,7 @@ void m68000_device::move_w_pais_paid_ifm() // 3120 f1f8 return; } -void m68000_device::move_w_das_paid_ifm() // 3128 f1f8 +void m68000_mcu_device::move_w_das_paid_ifm() // 3128 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -60895,7 +60895,7 @@ void m68000_device::move_w_das_paid_ifm() // 3128 f1f8 return; } -void m68000_device::move_w_dais_paid_ifm() // 3130 f1f8 +void m68000_mcu_device::move_w_dais_paid_ifm() // 3130 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -61039,7 +61039,7 @@ adsw2: return; } -void m68000_device::move_w_adr16_paid_ifm() // 3138 f1ff +void m68000_mcu_device::move_w_adr16_paid_ifm() // 3138 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -61144,7 +61144,7 @@ void m68000_device::move_w_adr16_paid_ifm() // 3138 f1ff return; } -void m68000_device::move_w_adr32_paid_ifm() // 3139 f1ff +void m68000_mcu_device::move_w_adr32_paid_ifm() // 3139 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -61270,7 +61270,7 @@ void m68000_device::move_w_adr32_paid_ifm() // 3139 f1ff return; } -void m68000_device::move_w_dpc_paid_ifm() // 313a f1ff +void m68000_mcu_device::move_w_dpc_paid_ifm() // 313a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -61375,7 +61375,7 @@ void m68000_device::move_w_dpc_paid_ifm() // 313a f1ff return; } -void m68000_device::move_w_dpci_paid_ifm() // 313b f1ff +void m68000_mcu_device::move_w_dpci_paid_ifm() // 313b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -61518,7 +61518,7 @@ adsw2: return; } -void m68000_device::move_w_imm16_paid_ifm() // 313c f1ff +void m68000_mcu_device::move_w_imm16_paid_ifm() // 313c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -61601,7 +61601,7 @@ void m68000_device::move_w_imm16_paid_ifm() // 313c f1ff return; } -void m68000_device::move_w_ds_dad_ifm() // 3140 f1f8 +void m68000_mcu_device::move_w_ds_dad_ifm() // 3140 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -61683,7 +61683,7 @@ void m68000_device::move_w_ds_dad_ifm() // 3140 f1f8 return; } -void m68000_device::move_w_as_dad_ifm() // 3148 f1f8 +void m68000_mcu_device::move_w_as_dad_ifm() // 3148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -61765,7 +61765,7 @@ void m68000_device::move_w_as_dad_ifm() // 3148 f1f8 return; } -void m68000_device::move_w_ais_dad_ifm() // 3150 f1f8 +void m68000_mcu_device::move_w_ais_dad_ifm() // 3150 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -61875,7 +61875,7 @@ void m68000_device::move_w_ais_dad_ifm() // 3150 f1f8 return; } -void m68000_device::move_w_aips_dad_ifm() // 3158 f1f8 +void m68000_mcu_device::move_w_aips_dad_ifm() // 3158 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -61989,7 +61989,7 @@ void m68000_device::move_w_aips_dad_ifm() // 3158 f1f8 return; } -void m68000_device::move_w_pais_dad_ifm() // 3160 f1f8 +void m68000_mcu_device::move_w_pais_dad_ifm() // 3160 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -62105,7 +62105,7 @@ void m68000_device::move_w_pais_dad_ifm() // 3160 f1f8 return; } -void m68000_device::move_w_das_dad_ifm() // 3168 f1f8 +void m68000_mcu_device::move_w_das_dad_ifm() // 3168 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -62237,7 +62237,7 @@ void m68000_device::move_w_das_dad_ifm() // 3168 f1f8 return; } -void m68000_device::move_w_dais_dad_ifm() // 3170 f1f8 +void m68000_mcu_device::move_w_dais_dad_ifm() // 3170 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -62407,7 +62407,7 @@ adsw2: return; } -void m68000_device::move_w_adr16_dad_ifm() // 3178 f1ff +void m68000_mcu_device::move_w_adr16_dad_ifm() // 3178 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -62538,7 +62538,7 @@ void m68000_device::move_w_adr16_dad_ifm() // 3178 f1ff return; } -void m68000_device::move_w_adr32_dad_ifm() // 3179 f1ff +void m68000_mcu_device::move_w_adr32_dad_ifm() // 3179 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -62690,7 +62690,7 @@ void m68000_device::move_w_adr32_dad_ifm() // 3179 f1ff return; } -void m68000_device::move_w_dpc_dad_ifm() // 317a f1ff +void m68000_mcu_device::move_w_dpc_dad_ifm() // 317a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -62821,7 +62821,7 @@ void m68000_device::move_w_dpc_dad_ifm() // 317a f1ff return; } -void m68000_device::move_w_dpci_dad_ifm() // 317b f1ff +void m68000_mcu_device::move_w_dpci_dad_ifm() // 317b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -62990,7 +62990,7 @@ adsw2: return; } -void m68000_device::move_w_imm16_dad_ifm() // 317c f1ff +void m68000_mcu_device::move_w_imm16_dad_ifm() // 317c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -63095,7 +63095,7 @@ void m68000_device::move_w_imm16_dad_ifm() // 317c f1ff return; } -void m68000_device::move_w_ds_daid_ifm() // 3180 f1f8 +void m68000_mcu_device::move_w_ds_daid_ifm() // 3180 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -63216,7 +63216,7 @@ rmdw2: return; } -void m68000_device::move_w_as_daid_ifm() // 3188 f1f8 +void m68000_mcu_device::move_w_as_daid_ifm() // 3188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -63337,7 +63337,7 @@ rmdw2: return; } -void m68000_device::move_w_ais_daid_ifm() // 3190 f1f8 +void m68000_mcu_device::move_w_ais_daid_ifm() // 3190 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -63485,7 +63485,7 @@ maww2: return; } -void m68000_device::move_w_aips_daid_ifm() // 3198 f1f8 +void m68000_mcu_device::move_w_aips_daid_ifm() // 3198 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -63637,7 +63637,7 @@ maww2: return; } -void m68000_device::move_w_pais_daid_ifm() // 31a0 f1f8 +void m68000_mcu_device::move_w_pais_daid_ifm() // 31a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -63791,7 +63791,7 @@ maww2: return; } -void m68000_device::move_w_das_daid_ifm() // 31a8 f1f8 +void m68000_mcu_device::move_w_das_daid_ifm() // 31a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -63961,7 +63961,7 @@ maww2: return; } -void m68000_device::move_w_dais_daid_ifm() // 31b0 f1f8 +void m68000_mcu_device::move_w_dais_daid_ifm() // 31b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -64169,7 +64169,7 @@ maww2: return; } -void m68000_device::move_w_adr16_daid_ifm() // 31b8 f1ff +void m68000_mcu_device::move_w_adr16_daid_ifm() // 31b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -64338,7 +64338,7 @@ maww2: return; } -void m68000_device::move_w_adr32_daid_ifm() // 31b9 f1ff +void m68000_mcu_device::move_w_adr32_daid_ifm() // 31b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -64528,7 +64528,7 @@ maww2: return; } -void m68000_device::move_w_dpc_daid_ifm() // 31ba f1ff +void m68000_mcu_device::move_w_dpc_daid_ifm() // 31ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -64697,7 +64697,7 @@ maww2: return; } -void m68000_device::move_w_dpci_daid_ifm() // 31bb f1ff +void m68000_mcu_device::move_w_dpci_daid_ifm() // 31bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -64904,7 +64904,7 @@ maww2: return; } -void m68000_device::move_w_imm16_daid_ifm() // 31bc f1ff +void m68000_mcu_device::move_w_imm16_daid_ifm() // 31bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -65048,7 +65048,7 @@ rmdw2: return; } -void m68000_device::move_w_ds_adr16_ifm() // 31c0 fff8 +void m68000_mcu_device::move_w_ds_adr16_ifm() // 31c0 fff8 { int ry = m_irdi & 7; // 2d9 raww1 @@ -65134,7 +65134,7 @@ void m68000_device::move_w_ds_adr16_ifm() // 31c0 fff8 return; } -void m68000_device::move_w_as_adr16_ifm() // 31c8 fff8 +void m68000_mcu_device::move_w_as_adr16_ifm() // 31c8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2d9 raww1 @@ -65220,7 +65220,7 @@ void m68000_device::move_w_as_adr16_ifm() // 31c8 fff8 return; } -void m68000_device::move_w_ais_adr16_ifm() // 31d0 fff8 +void m68000_mcu_device::move_w_ais_adr16_ifm() // 31d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -65329,7 +65329,7 @@ void m68000_device::move_w_ais_adr16_ifm() // 31d0 fff8 return; } -void m68000_device::move_w_aips_adr16_ifm() // 31d8 fff8 +void m68000_mcu_device::move_w_aips_adr16_ifm() // 31d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -65442,7 +65442,7 @@ void m68000_device::move_w_aips_adr16_ifm() // 31d8 fff8 return; } -void m68000_device::move_w_pais_adr16_ifm() // 31e0 fff8 +void m68000_mcu_device::move_w_pais_adr16_ifm() // 31e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -65557,7 +65557,7 @@ void m68000_device::move_w_pais_adr16_ifm() // 31e0 fff8 return; } -void m68000_device::move_w_das_adr16_ifm() // 31e8 fff8 +void m68000_mcu_device::move_w_das_adr16_ifm() // 31e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -65688,7 +65688,7 @@ void m68000_device::move_w_das_adr16_ifm() // 31e8 fff8 return; } -void m68000_device::move_w_dais_adr16_ifm() // 31f0 fff8 +void m68000_mcu_device::move_w_dais_adr16_ifm() // 31f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -65857,7 +65857,7 @@ adsw2: return; } -void m68000_device::move_w_adr16_adr16_ifm() // 31f8 ffff +void m68000_mcu_device::move_w_adr16_adr16_ifm() // 31f8 ffff { // 00a abwl1 m_aob = m_au; @@ -65987,7 +65987,7 @@ void m68000_device::move_w_adr16_adr16_ifm() // 31f8 ffff return; } -void m68000_device::move_w_adr32_adr16_ifm() // 31f9 ffff +void m68000_mcu_device::move_w_adr32_adr16_ifm() // 31f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -66138,7 +66138,7 @@ void m68000_device::move_w_adr32_adr16_ifm() // 31f9 ffff return; } -void m68000_device::move_w_dpc_adr16_ifm() // 31fa ffff +void m68000_mcu_device::move_w_dpc_adr16_ifm() // 31fa ffff { // 1c2 adsw1 m_aob = m_au; @@ -66268,7 +66268,7 @@ void m68000_device::move_w_dpc_adr16_ifm() // 31fa ffff return; } -void m68000_device::move_w_dpci_adr16_ifm() // 31fb ffff +void m68000_mcu_device::move_w_dpci_adr16_ifm() // 31fb ffff { // 1e3 aixl0 // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -66436,7 +66436,7 @@ adsw2: return; } -void m68000_device::move_w_imm16_adr16_ifm() // 31fc ffff +void m68000_mcu_device::move_w_imm16_adr16_ifm() // 31fc ffff { // 0ea e#w1 m_aob = m_au; @@ -66545,7 +66545,7 @@ void m68000_device::move_w_imm16_adr16_ifm() // 31fc ffff return; } -void m68000_device::move_w_ds_adr32_ifm() // 33c0 fff8 +void m68000_mcu_device::move_w_ds_adr32_ifm() // 33c0 fff8 { int ry = m_irdi & 7; // 1ea ralw1 @@ -66652,7 +66652,7 @@ void m68000_device::move_w_ds_adr32_ifm() // 33c0 fff8 return; } -void m68000_device::move_w_as_adr32_ifm() // 33c8 fff8 +void m68000_mcu_device::move_w_as_adr32_ifm() // 33c8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1ea ralw1 @@ -66759,7 +66759,7 @@ void m68000_device::move_w_as_adr32_ifm() // 33c8 fff8 return; } -void m68000_device::move_w_ais_adr32_ifm() // 33d0 fff8 +void m68000_mcu_device::move_w_ais_adr32_ifm() // 33d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -66888,7 +66888,7 @@ void m68000_device::move_w_ais_adr32_ifm() // 33d0 fff8 return; } -void m68000_device::move_w_aips_adr32_ifm() // 33d8 fff8 +void m68000_mcu_device::move_w_aips_adr32_ifm() // 33d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -67021,7 +67021,7 @@ void m68000_device::move_w_aips_adr32_ifm() // 33d8 fff8 return; } -void m68000_device::move_w_pais_adr32_ifm() // 33e0 fff8 +void m68000_mcu_device::move_w_pais_adr32_ifm() // 33e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -67156,7 +67156,7 @@ void m68000_device::move_w_pais_adr32_ifm() // 33e0 fff8 return; } -void m68000_device::move_w_das_adr32_ifm() // 33e8 fff8 +void m68000_mcu_device::move_w_das_adr32_ifm() // 33e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -67307,7 +67307,7 @@ void m68000_device::move_w_das_adr32_ifm() // 33e8 fff8 return; } -void m68000_device::move_w_dais_adr32_ifm() // 33f0 fff8 +void m68000_mcu_device::move_w_dais_adr32_ifm() // 33f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -67496,7 +67496,7 @@ adsw2: return; } -void m68000_device::move_w_adr16_adr32_ifm() // 33f8 ffff +void m68000_mcu_device::move_w_adr16_adr32_ifm() // 33f8 ffff { // 00a abwl1 m_aob = m_au; @@ -67646,7 +67646,7 @@ void m68000_device::move_w_adr16_adr32_ifm() // 33f8 ffff return; } -void m68000_device::move_w_adr32_adr32_ifm() // 33f9 ffff +void m68000_mcu_device::move_w_adr32_adr32_ifm() // 33f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -67817,7 +67817,7 @@ void m68000_device::move_w_adr32_adr32_ifm() // 33f9 ffff return; } -void m68000_device::move_w_dpc_adr32_ifm() // 33fa ffff +void m68000_mcu_device::move_w_dpc_adr32_ifm() // 33fa ffff { // 1c2 adsw1 m_aob = m_au; @@ -67967,7 +67967,7 @@ void m68000_device::move_w_dpc_adr32_ifm() // 33fa ffff return; } -void m68000_device::move_w_dpci_adr32_ifm() // 33fb ffff +void m68000_mcu_device::move_w_dpci_adr32_ifm() // 33fb ffff { // 1e3 aixl0 // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -68155,7 +68155,7 @@ adsw2: return; } -void m68000_device::move_w_imm16_adr32_ifm() // 33fc ffff +void m68000_mcu_device::move_w_imm16_adr32_ifm() // 33fc ffff { // 0ea e#w1 m_aob = m_au; @@ -68285,7 +68285,7 @@ void m68000_device::move_w_imm16_adr32_ifm() // 33fc ffff return; } -void m68000_device::negx_b_ds_ifm() // 4000 fff8 +void m68000_mcu_device::negx_b_ds_ifm() // 4000 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -68326,7 +68326,7 @@ void m68000_device::negx_b_ds_ifm() // 4000 fff8 return; } -void m68000_device::negx_b_ais_ifm() // 4010 fff8 +void m68000_mcu_device::negx_b_ais_ifm() // 4010 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -68400,7 +68400,7 @@ void m68000_device::negx_b_ais_ifm() // 4010 fff8 return; } -void m68000_device::negx_b_aips_ifm() // 4018 fff8 +void m68000_mcu_device::negx_b_aips_ifm() // 4018 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -68478,7 +68478,7 @@ void m68000_device::negx_b_aips_ifm() // 4018 fff8 return; } -void m68000_device::negx_b_pais_ifm() // 4020 fff8 +void m68000_mcu_device::negx_b_pais_ifm() // 4020 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -68558,7 +68558,7 @@ void m68000_device::negx_b_pais_ifm() // 4020 fff8 return; } -void m68000_device::negx_b_das_ifm() // 4028 fff8 +void m68000_mcu_device::negx_b_das_ifm() // 4028 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -68654,7 +68654,7 @@ void m68000_device::negx_b_das_ifm() // 4028 fff8 return; } -void m68000_device::negx_b_dais_ifm() // 4030 fff8 +void m68000_mcu_device::negx_b_dais_ifm() // 4030 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -68788,7 +68788,7 @@ adsw2: return; } -void m68000_device::negx_b_adr16_ifm() // 4038 ffff +void m68000_mcu_device::negx_b_adr16_ifm() // 4038 ffff { // 00a abwl1 m_aob = m_au; @@ -68883,7 +68883,7 @@ void m68000_device::negx_b_adr16_ifm() // 4038 ffff return; } -void m68000_device::negx_b_adr32_ifm() // 4039 ffff +void m68000_mcu_device::negx_b_adr32_ifm() // 4039 ffff { // 1e2 abll1 m_aob = m_au; @@ -68999,7 +68999,7 @@ void m68000_device::negx_b_adr32_ifm() // 4039 ffff return; } -void m68000_device::negx_w_ds_ifm() // 4040 fff8 +void m68000_mcu_device::negx_w_ds_ifm() // 4040 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -69040,7 +69040,7 @@ void m68000_device::negx_w_ds_ifm() // 4040 fff8 return; } -void m68000_device::negx_w_ais_ifm() // 4050 fff8 +void m68000_mcu_device::negx_w_ais_ifm() // 4050 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -69122,7 +69122,7 @@ void m68000_device::negx_w_ais_ifm() // 4050 fff8 return; } -void m68000_device::negx_w_aips_ifm() // 4058 fff8 +void m68000_mcu_device::negx_w_aips_ifm() // 4058 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -69208,7 +69208,7 @@ void m68000_device::negx_w_aips_ifm() // 4058 fff8 return; } -void m68000_device::negx_w_pais_ifm() // 4060 fff8 +void m68000_mcu_device::negx_w_pais_ifm() // 4060 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -69296,7 +69296,7 @@ void m68000_device::negx_w_pais_ifm() // 4060 fff8 return; } -void m68000_device::negx_w_das_ifm() // 4068 fff8 +void m68000_mcu_device::negx_w_das_ifm() // 4068 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -69400,7 +69400,7 @@ void m68000_device::negx_w_das_ifm() // 4068 fff8 return; } -void m68000_device::negx_w_dais_ifm() // 4070 fff8 +void m68000_mcu_device::negx_w_dais_ifm() // 4070 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -69542,7 +69542,7 @@ adsw2: return; } -void m68000_device::negx_w_adr16_ifm() // 4078 ffff +void m68000_mcu_device::negx_w_adr16_ifm() // 4078 ffff { // 00a abwl1 m_aob = m_au; @@ -69645,7 +69645,7 @@ void m68000_device::negx_w_adr16_ifm() // 4078 ffff return; } -void m68000_device::negx_w_adr32_ifm() // 4079 ffff +void m68000_mcu_device::negx_w_adr32_ifm() // 4079 ffff { // 1e2 abll1 m_aob = m_au; @@ -69769,7 +69769,7 @@ void m68000_device::negx_w_adr32_ifm() // 4079 ffff return; } -void m68000_device::negx_l_ds_ifm() // 4080 fff8 +void m68000_mcu_device::negx_l_ds_ifm() // 4080 fff8 { int ry = m_irdi & 7; // 137 nnrl1 @@ -69816,7 +69816,7 @@ void m68000_device::negx_l_ds_ifm() // 4080 fff8 return; } -void m68000_device::negx_l_ais_ifm() // 4090 fff8 +void m68000_mcu_device::negx_l_ais_ifm() // 4090 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -69942,7 +69942,7 @@ void m68000_device::negx_l_ais_ifm() // 4090 fff8 return; } -void m68000_device::negx_l_aips_ifm() // 4098 fff8 +void m68000_mcu_device::negx_l_aips_ifm() // 4098 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -70071,7 +70071,7 @@ void m68000_device::negx_l_aips_ifm() // 4098 fff8 return; } -void m68000_device::negx_l_pais_ifm() // 40a0 fff8 +void m68000_mcu_device::negx_l_pais_ifm() // 40a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -70201,7 +70201,7 @@ void m68000_device::negx_l_pais_ifm() // 40a0 fff8 return; } -void m68000_device::negx_l_das_ifm() // 40a8 fff8 +void m68000_mcu_device::negx_l_das_ifm() // 40a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -70348,7 +70348,7 @@ void m68000_device::negx_l_das_ifm() // 40a8 fff8 return; } -void m68000_device::negx_l_dais_ifm() // 40b0 fff8 +void m68000_mcu_device::negx_l_dais_ifm() // 40b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -70533,7 +70533,7 @@ adsl2: return; } -void m68000_device::negx_l_adr16_ifm() // 40b8 ffff +void m68000_mcu_device::negx_l_adr16_ifm() // 40b8 ffff { // 00e abww1 m_aob = m_au; @@ -70682,7 +70682,7 @@ void m68000_device::negx_l_adr16_ifm() // 40b8 ffff return; } -void m68000_device::negx_l_adr32_ifm() // 40b9 ffff +void m68000_mcu_device::negx_l_adr32_ifm() // 40b9 ffff { // 1e6 ablw1 m_aob = m_au; @@ -70852,7 +70852,7 @@ void m68000_device::negx_l_adr32_ifm() // 40b9 ffff return; } -void m68000_device::move_sr_ds_ifm() // 40c0 fff8 +void m68000_mcu_device::move_sr_ds_ifm() // 40c0 fff8 { int ry = m_irdi & 7; // 3a5 strw1 @@ -70892,7 +70892,7 @@ void m68000_device::move_sr_ds_ifm() // 40c0 fff8 return; } -void m68000_device::move_sr_ais_ifm() // 40d0 fff8 +void m68000_mcu_device::move_sr_ais_ifm() // 40d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -70975,7 +70975,7 @@ void m68000_device::move_sr_ais_ifm() // 40d0 fff8 return; } -void m68000_device::move_sr_aips_ifm() // 40d8 fff8 +void m68000_mcu_device::move_sr_aips_ifm() // 40d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -71062,7 +71062,7 @@ void m68000_device::move_sr_aips_ifm() // 40d8 fff8 return; } -void m68000_device::move_sr_pais_ifm() // 40e0 fff8 +void m68000_mcu_device::move_sr_pais_ifm() // 40e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -71151,7 +71151,7 @@ void m68000_device::move_sr_pais_ifm() // 40e0 fff8 return; } -void m68000_device::move_sr_das_ifm() // 40e8 fff8 +void m68000_mcu_device::move_sr_das_ifm() // 40e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -71256,7 +71256,7 @@ void m68000_device::move_sr_das_ifm() // 40e8 fff8 return; } -void m68000_device::move_sr_dais_ifm() // 40f0 fff8 +void m68000_mcu_device::move_sr_dais_ifm() // 40f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -71399,7 +71399,7 @@ adsw2: return; } -void m68000_device::move_sr_adr16_ifm() // 40f8 ffff +void m68000_mcu_device::move_sr_adr16_ifm() // 40f8 ffff { // 00a abwl1 m_aob = m_au; @@ -71503,7 +71503,7 @@ void m68000_device::move_sr_adr16_ifm() // 40f8 ffff return; } -void m68000_device::move_sr_adr32_ifm() // 40f9 ffff +void m68000_mcu_device::move_sr_adr32_ifm() // 40f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -71628,7 +71628,7 @@ void m68000_device::move_sr_adr32_ifm() // 40f9 ffff return; } -void m68000_device::chk_w_ds_dd_ifm() // 4180 f1f8 +void m68000_mcu_device::chk_w_ds_dd_ifm() // 4180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -71848,7 +71848,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_ais_dd_ifm() // 4190 f1f8 +void m68000_mcu_device::chk_w_ais_dd_ifm() // 4190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -72092,7 +72092,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_aips_dd_ifm() // 4198 f1f8 +void m68000_mcu_device::chk_w_aips_dd_ifm() // 4198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -72340,7 +72340,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_pais_dd_ifm() // 41a0 f1f8 +void m68000_mcu_device::chk_w_pais_dd_ifm() // 41a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -72590,7 +72590,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_das_dd_ifm() // 41a8 f1f8 +void m68000_mcu_device::chk_w_das_dd_ifm() // 41a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -72856,7 +72856,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_dais_dd_ifm() // 41b0 f1f8 +void m68000_mcu_device::chk_w_dais_dd_ifm() // 41b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -73160,7 +73160,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_adr16_dd_ifm() // 41b8 f1ff +void m68000_mcu_device::chk_w_adr16_dd_ifm() // 41b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -73425,7 +73425,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_adr32_dd_ifm() // 41b9 f1ff +void m68000_mcu_device::chk_w_adr32_dd_ifm() // 41b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -73711,7 +73711,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_dpc_dd_ifm() // 41ba f1ff +void m68000_mcu_device::chk_w_dpc_dd_ifm() // 41ba f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -73976,7 +73976,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_dpci_dd_ifm() // 41bb f1ff +void m68000_mcu_device::chk_w_dpci_dd_ifm() // 41bb f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -74279,7 +74279,7 @@ chkr4: goto mmrw3; } -void m68000_device::chk_w_imm16_dd_ifm() // 41bc f1ff +void m68000_mcu_device::chk_w_imm16_dd_ifm() // 41bc f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -74522,7 +74522,7 @@ chkr4: goto mmrw3; } -void m68000_device::lea_ais_ad_ifm() // 41d0 f1f8 +void m68000_mcu_device::lea_ais_ad_ifm() // 41d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -74563,7 +74563,7 @@ void m68000_device::lea_ais_ad_ifm() // 41d0 f1f8 return; } -void m68000_device::lea_das_ad_ifm() // 41e8 f1f8 +void m68000_mcu_device::lea_das_ad_ifm() // 41e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -74623,7 +74623,7 @@ void m68000_device::lea_das_ad_ifm() // 41e8 f1f8 return; } -void m68000_device::lea_dais_ad_ifm() // 41f0 f1f8 +void m68000_mcu_device::lea_dais_ad_ifm() // 41f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -74723,7 +74723,7 @@ leax4: return; } -void m68000_device::lea_adr16_ad_ifm() // 41f8 f1ff +void m68000_mcu_device::lea_adr16_ad_ifm() // 41f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 275 laaw1 @@ -74780,7 +74780,7 @@ void m68000_device::lea_adr16_ad_ifm() // 41f8 f1ff return; } -void m68000_device::lea_adr32_ad_ifm() // 41f9 f1ff +void m68000_mcu_device::lea_adr32_ad_ifm() // 41f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 3e4 laal1 @@ -74860,7 +74860,7 @@ void m68000_device::lea_adr32_ad_ifm() // 41f9 f1ff return; } -void m68000_device::lea_dpc_ad_ifm() // 41fa f1ff +void m68000_mcu_device::lea_dpc_ad_ifm() // 41fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 2f2 lead1 @@ -74919,7 +74919,7 @@ void m68000_device::lea_dpc_ad_ifm() // 41fa f1ff return; } -void m68000_device::lea_dpci_ad_ifm() // 41fb f1ff +void m68000_mcu_device::lea_dpci_ad_ifm() // 41fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1fb leax0 @@ -75018,7 +75018,7 @@ leax4: return; } -void m68000_device::clr_b_ds_ifm() // 4200 fff8 +void m68000_mcu_device::clr_b_ds_ifm() // 4200 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -75060,7 +75060,7 @@ void m68000_device::clr_b_ds_ifm() // 4200 fff8 return; } -void m68000_device::clr_b_ais_ifm() // 4210 fff8 +void m68000_mcu_device::clr_b_ais_ifm() // 4210 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -75136,7 +75136,7 @@ void m68000_device::clr_b_ais_ifm() // 4210 fff8 return; } -void m68000_device::clr_b_aips_ifm() // 4218 fff8 +void m68000_mcu_device::clr_b_aips_ifm() // 4218 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -75217,7 +75217,7 @@ void m68000_device::clr_b_aips_ifm() // 4218 fff8 return; } -void m68000_device::clr_b_pais_ifm() // 4220 fff8 +void m68000_mcu_device::clr_b_pais_ifm() // 4220 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -75300,7 +75300,7 @@ void m68000_device::clr_b_pais_ifm() // 4220 fff8 return; } -void m68000_device::clr_b_das_ifm() // 4228 fff8 +void m68000_mcu_device::clr_b_das_ifm() // 4228 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -75399,7 +75399,7 @@ void m68000_device::clr_b_das_ifm() // 4228 fff8 return; } -void m68000_device::clr_b_dais_ifm() // 4230 fff8 +void m68000_mcu_device::clr_b_dais_ifm() // 4230 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -75538,7 +75538,7 @@ adsw2: return; } -void m68000_device::clr_b_adr16_ifm() // 4238 ffff +void m68000_mcu_device::clr_b_adr16_ifm() // 4238 ffff { // 00a abwl1 m_aob = m_au; @@ -75636,7 +75636,7 @@ void m68000_device::clr_b_adr16_ifm() // 4238 ffff return; } -void m68000_device::clr_b_adr32_ifm() // 4239 ffff +void m68000_mcu_device::clr_b_adr32_ifm() // 4239 ffff { // 1e2 abll1 m_aob = m_au; @@ -75756,7 +75756,7 @@ void m68000_device::clr_b_adr32_ifm() // 4239 ffff return; } -void m68000_device::clr_w_ds_ifm() // 4240 fff8 +void m68000_mcu_device::clr_w_ds_ifm() // 4240 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -75798,7 +75798,7 @@ void m68000_device::clr_w_ds_ifm() // 4240 fff8 return; } -void m68000_device::clr_w_ais_ifm() // 4250 fff8 +void m68000_mcu_device::clr_w_ais_ifm() // 4250 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -75882,7 +75882,7 @@ void m68000_device::clr_w_ais_ifm() // 4250 fff8 return; } -void m68000_device::clr_w_aips_ifm() // 4258 fff8 +void m68000_mcu_device::clr_w_aips_ifm() // 4258 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -75971,7 +75971,7 @@ void m68000_device::clr_w_aips_ifm() // 4258 fff8 return; } -void m68000_device::clr_w_pais_ifm() // 4260 fff8 +void m68000_mcu_device::clr_w_pais_ifm() // 4260 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -76062,7 +76062,7 @@ void m68000_device::clr_w_pais_ifm() // 4260 fff8 return; } -void m68000_device::clr_w_das_ifm() // 4268 fff8 +void m68000_mcu_device::clr_w_das_ifm() // 4268 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -76169,7 +76169,7 @@ void m68000_device::clr_w_das_ifm() // 4268 fff8 return; } -void m68000_device::clr_w_dais_ifm() // 4270 fff8 +void m68000_mcu_device::clr_w_dais_ifm() // 4270 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -76316,7 +76316,7 @@ adsw2: return; } -void m68000_device::clr_w_adr16_ifm() // 4278 ffff +void m68000_mcu_device::clr_w_adr16_ifm() // 4278 ffff { // 00a abwl1 m_aob = m_au; @@ -76422,7 +76422,7 @@ void m68000_device::clr_w_adr16_ifm() // 4278 ffff return; } -void m68000_device::clr_w_adr32_ifm() // 4279 ffff +void m68000_mcu_device::clr_w_adr32_ifm() // 4279 ffff { // 1e2 abll1 m_aob = m_au; @@ -76550,7 +76550,7 @@ void m68000_device::clr_w_adr32_ifm() // 4279 ffff return; } -void m68000_device::clr_l_ds_ifm() // 4280 fff8 +void m68000_mcu_device::clr_l_ds_ifm() // 4280 fff8 { int ry = m_irdi & 7; // 137 nnrl1 @@ -76598,7 +76598,7 @@ void m68000_device::clr_l_ds_ifm() // 4280 fff8 return; } -void m68000_device::clr_l_ais_ifm() // 4290 fff8 +void m68000_mcu_device::clr_l_ais_ifm() // 4290 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -76726,7 +76726,7 @@ void m68000_device::clr_l_ais_ifm() // 4290 fff8 return; } -void m68000_device::clr_l_aips_ifm() // 4298 fff8 +void m68000_mcu_device::clr_l_aips_ifm() // 4298 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -76858,7 +76858,7 @@ void m68000_device::clr_l_aips_ifm() // 4298 fff8 return; } -void m68000_device::clr_l_pais_ifm() // 42a0 fff8 +void m68000_mcu_device::clr_l_pais_ifm() // 42a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -76991,7 +76991,7 @@ void m68000_device::clr_l_pais_ifm() // 42a0 fff8 return; } -void m68000_device::clr_l_das_ifm() // 42a8 fff8 +void m68000_mcu_device::clr_l_das_ifm() // 42a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -77141,7 +77141,7 @@ void m68000_device::clr_l_das_ifm() // 42a8 fff8 return; } -void m68000_device::clr_l_dais_ifm() // 42b0 fff8 +void m68000_mcu_device::clr_l_dais_ifm() // 42b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -77331,7 +77331,7 @@ adsl2: return; } -void m68000_device::clr_l_adr16_ifm() // 42b8 ffff +void m68000_mcu_device::clr_l_adr16_ifm() // 42b8 ffff { // 00e abww1 m_aob = m_au; @@ -77484,7 +77484,7 @@ void m68000_device::clr_l_adr16_ifm() // 42b8 ffff return; } -void m68000_device::clr_l_adr32_ifm() // 42b9 ffff +void m68000_mcu_device::clr_l_adr32_ifm() // 42b9 ffff { // 1e6 ablw1 m_aob = m_au; @@ -77659,7 +77659,7 @@ void m68000_device::clr_l_adr32_ifm() // 42b9 ffff return; } -void m68000_device::neg_b_ds_ifm() // 4400 fff8 +void m68000_mcu_device::neg_b_ds_ifm() // 4400 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -77700,7 +77700,7 @@ void m68000_device::neg_b_ds_ifm() // 4400 fff8 return; } -void m68000_device::neg_b_ais_ifm() // 4410 fff8 +void m68000_mcu_device::neg_b_ais_ifm() // 4410 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -77774,7 +77774,7 @@ void m68000_device::neg_b_ais_ifm() // 4410 fff8 return; } -void m68000_device::neg_b_aips_ifm() // 4418 fff8 +void m68000_mcu_device::neg_b_aips_ifm() // 4418 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -77852,7 +77852,7 @@ void m68000_device::neg_b_aips_ifm() // 4418 fff8 return; } -void m68000_device::neg_b_pais_ifm() // 4420 fff8 +void m68000_mcu_device::neg_b_pais_ifm() // 4420 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -77932,7 +77932,7 @@ void m68000_device::neg_b_pais_ifm() // 4420 fff8 return; } -void m68000_device::neg_b_das_ifm() // 4428 fff8 +void m68000_mcu_device::neg_b_das_ifm() // 4428 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -78028,7 +78028,7 @@ void m68000_device::neg_b_das_ifm() // 4428 fff8 return; } -void m68000_device::neg_b_dais_ifm() // 4430 fff8 +void m68000_mcu_device::neg_b_dais_ifm() // 4430 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -78162,7 +78162,7 @@ adsw2: return; } -void m68000_device::neg_b_adr16_ifm() // 4438 ffff +void m68000_mcu_device::neg_b_adr16_ifm() // 4438 ffff { // 00a abwl1 m_aob = m_au; @@ -78257,7 +78257,7 @@ void m68000_device::neg_b_adr16_ifm() // 4438 ffff return; } -void m68000_device::neg_b_adr32_ifm() // 4439 ffff +void m68000_mcu_device::neg_b_adr32_ifm() // 4439 ffff { // 1e2 abll1 m_aob = m_au; @@ -78373,7 +78373,7 @@ void m68000_device::neg_b_adr32_ifm() // 4439 ffff return; } -void m68000_device::neg_w_ds_ifm() // 4440 fff8 +void m68000_mcu_device::neg_w_ds_ifm() // 4440 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -78414,7 +78414,7 @@ void m68000_device::neg_w_ds_ifm() // 4440 fff8 return; } -void m68000_device::neg_w_ais_ifm() // 4450 fff8 +void m68000_mcu_device::neg_w_ais_ifm() // 4450 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -78496,7 +78496,7 @@ void m68000_device::neg_w_ais_ifm() // 4450 fff8 return; } -void m68000_device::neg_w_aips_ifm() // 4458 fff8 +void m68000_mcu_device::neg_w_aips_ifm() // 4458 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -78582,7 +78582,7 @@ void m68000_device::neg_w_aips_ifm() // 4458 fff8 return; } -void m68000_device::neg_w_pais_ifm() // 4460 fff8 +void m68000_mcu_device::neg_w_pais_ifm() // 4460 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -78670,7 +78670,7 @@ void m68000_device::neg_w_pais_ifm() // 4460 fff8 return; } -void m68000_device::neg_w_das_ifm() // 4468 fff8 +void m68000_mcu_device::neg_w_das_ifm() // 4468 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -78774,7 +78774,7 @@ void m68000_device::neg_w_das_ifm() // 4468 fff8 return; } -void m68000_device::neg_w_dais_ifm() // 4470 fff8 +void m68000_mcu_device::neg_w_dais_ifm() // 4470 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -78916,7 +78916,7 @@ adsw2: return; } -void m68000_device::neg_w_adr16_ifm() // 4478 ffff +void m68000_mcu_device::neg_w_adr16_ifm() // 4478 ffff { // 00a abwl1 m_aob = m_au; @@ -79019,7 +79019,7 @@ void m68000_device::neg_w_adr16_ifm() // 4478 ffff return; } -void m68000_device::neg_w_adr32_ifm() // 4479 ffff +void m68000_mcu_device::neg_w_adr32_ifm() // 4479 ffff { // 1e2 abll1 m_aob = m_au; @@ -79143,7 +79143,7 @@ void m68000_device::neg_w_adr32_ifm() // 4479 ffff return; } -void m68000_device::neg_l_ds_ifm() // 4480 fff8 +void m68000_mcu_device::neg_l_ds_ifm() // 4480 fff8 { int ry = m_irdi & 7; // 137 nnrl1 @@ -79190,7 +79190,7 @@ void m68000_device::neg_l_ds_ifm() // 4480 fff8 return; } -void m68000_device::neg_l_ais_ifm() // 4490 fff8 +void m68000_mcu_device::neg_l_ais_ifm() // 4490 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -79316,7 +79316,7 @@ void m68000_device::neg_l_ais_ifm() // 4490 fff8 return; } -void m68000_device::neg_l_aips_ifm() // 4498 fff8 +void m68000_mcu_device::neg_l_aips_ifm() // 4498 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -79445,7 +79445,7 @@ void m68000_device::neg_l_aips_ifm() // 4498 fff8 return; } -void m68000_device::neg_l_pais_ifm() // 44a0 fff8 +void m68000_mcu_device::neg_l_pais_ifm() // 44a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -79575,7 +79575,7 @@ void m68000_device::neg_l_pais_ifm() // 44a0 fff8 return; } -void m68000_device::neg_l_das_ifm() // 44a8 fff8 +void m68000_mcu_device::neg_l_das_ifm() // 44a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -79722,7 +79722,7 @@ void m68000_device::neg_l_das_ifm() // 44a8 fff8 return; } -void m68000_device::neg_l_dais_ifm() // 44b0 fff8 +void m68000_mcu_device::neg_l_dais_ifm() // 44b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -79907,7 +79907,7 @@ adsl2: return; } -void m68000_device::neg_l_adr16_ifm() // 44b8 ffff +void m68000_mcu_device::neg_l_adr16_ifm() // 44b8 ffff { // 00e abww1 m_aob = m_au; @@ -80056,7 +80056,7 @@ void m68000_device::neg_l_adr16_ifm() // 44b8 ffff return; } -void m68000_device::neg_l_adr32_ifm() // 44b9 ffff +void m68000_mcu_device::neg_l_adr32_ifm() // 44b9 ffff { // 1e6 ablw1 m_aob = m_au; @@ -80226,7 +80226,7 @@ void m68000_device::neg_l_adr32_ifm() // 44b9 ffff return; } -void m68000_device::move_ds_ccr_ifm() // 44c0 fff8 +void m68000_mcu_device::move_ds_ccr_ifm() // 44c0 fff8 { int ry = m_irdi & 7; // 301 rstw1 @@ -80294,7 +80294,7 @@ void m68000_device::move_ds_ccr_ifm() // 44c0 fff8 return; } -void m68000_device::move_ais_ccr_ifm() // 44d0 fff8 +void m68000_mcu_device::move_ais_ccr_ifm() // 44d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -80386,7 +80386,7 @@ void m68000_device::move_ais_ccr_ifm() // 44d0 fff8 return; } -void m68000_device::move_aips_ccr_ifm() // 44d8 fff8 +void m68000_mcu_device::move_aips_ccr_ifm() // 44d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -80482,7 +80482,7 @@ void m68000_device::move_aips_ccr_ifm() // 44d8 fff8 return; } -void m68000_device::move_pais_ccr_ifm() // 44e0 fff8 +void m68000_mcu_device::move_pais_ccr_ifm() // 44e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -80580,7 +80580,7 @@ void m68000_device::move_pais_ccr_ifm() // 44e0 fff8 return; } -void m68000_device::move_das_ccr_ifm() // 44e8 fff8 +void m68000_mcu_device::move_das_ccr_ifm() // 44e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -80694,7 +80694,7 @@ void m68000_device::move_das_ccr_ifm() // 44e8 fff8 return; } -void m68000_device::move_dais_ccr_ifm() // 44f0 fff8 +void m68000_mcu_device::move_dais_ccr_ifm() // 44f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -80846,7 +80846,7 @@ adsw2: return; } -void m68000_device::move_adr16_ccr_ifm() // 44f8 ffff +void m68000_mcu_device::move_adr16_ccr_ifm() // 44f8 ffff { // 00a abwl1 m_aob = m_au; @@ -80959,7 +80959,7 @@ void m68000_device::move_adr16_ccr_ifm() // 44f8 ffff return; } -void m68000_device::move_adr32_ccr_ifm() // 44f9 ffff +void m68000_mcu_device::move_adr32_ccr_ifm() // 44f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -81093,7 +81093,7 @@ void m68000_device::move_adr32_ccr_ifm() // 44f9 ffff return; } -void m68000_device::move_dpc_ccr_ifm() // 44fa ffff +void m68000_mcu_device::move_dpc_ccr_ifm() // 44fa ffff { // 1c2 adsw1 m_aob = m_au; @@ -81206,7 +81206,7 @@ void m68000_device::move_dpc_ccr_ifm() // 44fa ffff return; } -void m68000_device::move_dpci_ccr_ifm() // 44fb ffff +void m68000_mcu_device::move_dpci_ccr_ifm() // 44fb ffff { // 1e3 aixl0 // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -81357,7 +81357,7 @@ adsw2: return; } -void m68000_device::move_imm8_ccr_ifm() // 44fc ffff +void m68000_mcu_device::move_imm8_ccr_ifm() // 44fc ffff { // 0ea e#w1 m_aob = m_au; @@ -81448,7 +81448,7 @@ void m68000_device::move_imm8_ccr_ifm() // 44fc ffff return; } -void m68000_device::not_b_ds_ifm() // 4600 fff8 +void m68000_mcu_device::not_b_ds_ifm() // 4600 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -81489,7 +81489,7 @@ void m68000_device::not_b_ds_ifm() // 4600 fff8 return; } -void m68000_device::not_b_ais_ifm() // 4610 fff8 +void m68000_mcu_device::not_b_ais_ifm() // 4610 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -81563,7 +81563,7 @@ void m68000_device::not_b_ais_ifm() // 4610 fff8 return; } -void m68000_device::not_b_aips_ifm() // 4618 fff8 +void m68000_mcu_device::not_b_aips_ifm() // 4618 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -81641,7 +81641,7 @@ void m68000_device::not_b_aips_ifm() // 4618 fff8 return; } -void m68000_device::not_b_pais_ifm() // 4620 fff8 +void m68000_mcu_device::not_b_pais_ifm() // 4620 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -81721,7 +81721,7 @@ void m68000_device::not_b_pais_ifm() // 4620 fff8 return; } -void m68000_device::not_b_das_ifm() // 4628 fff8 +void m68000_mcu_device::not_b_das_ifm() // 4628 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -81817,7 +81817,7 @@ void m68000_device::not_b_das_ifm() // 4628 fff8 return; } -void m68000_device::not_b_dais_ifm() // 4630 fff8 +void m68000_mcu_device::not_b_dais_ifm() // 4630 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -81951,7 +81951,7 @@ adsw2: return; } -void m68000_device::not_b_adr16_ifm() // 4638 ffff +void m68000_mcu_device::not_b_adr16_ifm() // 4638 ffff { // 00a abwl1 m_aob = m_au; @@ -82046,7 +82046,7 @@ void m68000_device::not_b_adr16_ifm() // 4638 ffff return; } -void m68000_device::not_b_adr32_ifm() // 4639 ffff +void m68000_mcu_device::not_b_adr32_ifm() // 4639 ffff { // 1e2 abll1 m_aob = m_au; @@ -82162,7 +82162,7 @@ void m68000_device::not_b_adr32_ifm() // 4639 ffff return; } -void m68000_device::not_w_ds_ifm() // 4640 fff8 +void m68000_mcu_device::not_w_ds_ifm() // 4640 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -82203,7 +82203,7 @@ void m68000_device::not_w_ds_ifm() // 4640 fff8 return; } -void m68000_device::not_w_ais_ifm() // 4650 fff8 +void m68000_mcu_device::not_w_ais_ifm() // 4650 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -82285,7 +82285,7 @@ void m68000_device::not_w_ais_ifm() // 4650 fff8 return; } -void m68000_device::not_w_aips_ifm() // 4658 fff8 +void m68000_mcu_device::not_w_aips_ifm() // 4658 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -82371,7 +82371,7 @@ void m68000_device::not_w_aips_ifm() // 4658 fff8 return; } -void m68000_device::not_w_pais_ifm() // 4660 fff8 +void m68000_mcu_device::not_w_pais_ifm() // 4660 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -82459,7 +82459,7 @@ void m68000_device::not_w_pais_ifm() // 4660 fff8 return; } -void m68000_device::not_w_das_ifm() // 4668 fff8 +void m68000_mcu_device::not_w_das_ifm() // 4668 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -82563,7 +82563,7 @@ void m68000_device::not_w_das_ifm() // 4668 fff8 return; } -void m68000_device::not_w_dais_ifm() // 4670 fff8 +void m68000_mcu_device::not_w_dais_ifm() // 4670 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -82705,7 +82705,7 @@ adsw2: return; } -void m68000_device::not_w_adr16_ifm() // 4678 ffff +void m68000_mcu_device::not_w_adr16_ifm() // 4678 ffff { // 00a abwl1 m_aob = m_au; @@ -82808,7 +82808,7 @@ void m68000_device::not_w_adr16_ifm() // 4678 ffff return; } -void m68000_device::not_w_adr32_ifm() // 4679 ffff +void m68000_mcu_device::not_w_adr32_ifm() // 4679 ffff { // 1e2 abll1 m_aob = m_au; @@ -82932,7 +82932,7 @@ void m68000_device::not_w_adr32_ifm() // 4679 ffff return; } -void m68000_device::not_l_ds_ifm() // 4680 fff8 +void m68000_mcu_device::not_l_ds_ifm() // 4680 fff8 { int ry = m_irdi & 7; // 137 nnrl1 @@ -82979,7 +82979,7 @@ void m68000_device::not_l_ds_ifm() // 4680 fff8 return; } -void m68000_device::not_l_ais_ifm() // 4690 fff8 +void m68000_mcu_device::not_l_ais_ifm() // 4690 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -83105,7 +83105,7 @@ void m68000_device::not_l_ais_ifm() // 4690 fff8 return; } -void m68000_device::not_l_aips_ifm() // 4698 fff8 +void m68000_mcu_device::not_l_aips_ifm() // 4698 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -83234,7 +83234,7 @@ void m68000_device::not_l_aips_ifm() // 4698 fff8 return; } -void m68000_device::not_l_pais_ifm() // 46a0 fff8 +void m68000_mcu_device::not_l_pais_ifm() // 46a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -83364,7 +83364,7 @@ void m68000_device::not_l_pais_ifm() // 46a0 fff8 return; } -void m68000_device::not_l_das_ifm() // 46a8 fff8 +void m68000_mcu_device::not_l_das_ifm() // 46a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -83511,7 +83511,7 @@ void m68000_device::not_l_das_ifm() // 46a8 fff8 return; } -void m68000_device::not_l_dais_ifm() // 46b0 fff8 +void m68000_mcu_device::not_l_dais_ifm() // 46b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -83696,7 +83696,7 @@ adsl2: return; } -void m68000_device::not_l_adr16_ifm() // 46b8 ffff +void m68000_mcu_device::not_l_adr16_ifm() // 46b8 ffff { // 00e abww1 m_aob = m_au; @@ -83845,7 +83845,7 @@ void m68000_device::not_l_adr16_ifm() // 46b8 ffff return; } -void m68000_device::not_l_adr32_ifm() // 46b9 ffff +void m68000_mcu_device::not_l_adr32_ifm() // 46b9 ffff { // 1e6 ablw1 m_aob = m_au; @@ -84015,7 +84015,7 @@ void m68000_device::not_l_adr32_ifm() // 46b9 ffff return; } -void m68000_device::move_ds_sr_ifm() // 46c0 fff8 +void m68000_mcu_device::move_ds_sr_ifm() // 46c0 fff8 { int ry = m_irdi & 7; if(!(m_sr & SR_S)) { @@ -84089,7 +84089,7 @@ void m68000_device::move_ds_sr_ifm() // 46c0 fff8 return; } -void m68000_device::move_ais_sr_ifm() // 46d0 fff8 +void m68000_mcu_device::move_ais_sr_ifm() // 46d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); if(!(m_sr & SR_S)) { @@ -84187,7 +84187,7 @@ void m68000_device::move_ais_sr_ifm() // 46d0 fff8 return; } -void m68000_device::move_aips_sr_ifm() // 46d8 fff8 +void m68000_mcu_device::move_aips_sr_ifm() // 46d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); if(!(m_sr & SR_S)) { @@ -84289,7 +84289,7 @@ void m68000_device::move_aips_sr_ifm() // 46d8 fff8 return; } -void m68000_device::move_pais_sr_ifm() // 46e0 fff8 +void m68000_mcu_device::move_pais_sr_ifm() // 46e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); if(!(m_sr & SR_S)) { @@ -84393,7 +84393,7 @@ void m68000_device::move_pais_sr_ifm() // 46e0 fff8 return; } -void m68000_device::move_das_sr_ifm() // 46e8 fff8 +void m68000_mcu_device::move_das_sr_ifm() // 46e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); if(!(m_sr & SR_S)) { @@ -84513,7 +84513,7 @@ void m68000_device::move_das_sr_ifm() // 46e8 fff8 return; } -void m68000_device::move_dais_sr_ifm() // 46f0 fff8 +void m68000_mcu_device::move_dais_sr_ifm() // 46f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); if(!(m_sr & SR_S)) { @@ -84671,7 +84671,7 @@ adsw2: return; } -void m68000_device::move_adr16_sr_ifm() // 46f8 ffff +void m68000_mcu_device::move_adr16_sr_ifm() // 46f8 ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -84790,7 +84790,7 @@ void m68000_device::move_adr16_sr_ifm() // 46f8 ffff return; } -void m68000_device::move_adr32_sr_ifm() // 46f9 ffff +void m68000_mcu_device::move_adr32_sr_ifm() // 46f9 ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -84930,7 +84930,7 @@ void m68000_device::move_adr32_sr_ifm() // 46f9 ffff return; } -void m68000_device::move_dpc_sr_ifm() // 46fa ffff +void m68000_mcu_device::move_dpc_sr_ifm() // 46fa ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -85049,7 +85049,7 @@ void m68000_device::move_dpc_sr_ifm() // 46fa ffff return; } -void m68000_device::move_dpci_sr_ifm() // 46fb ffff +void m68000_mcu_device::move_dpci_sr_ifm() // 46fb ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -85206,7 +85206,7 @@ adsw2: return; } -void m68000_device::move_i16u_sr_ifm() // 46fc ffff +void m68000_mcu_device::move_i16u_sr_ifm() // 46fc ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -85303,7 +85303,7 @@ void m68000_device::move_i16u_sr_ifm() // 46fc ffff return; } -void m68000_device::nbcd_b_ds_ifm() // 4800 fff8 +void m68000_mcu_device::nbcd_b_ds_ifm() // 4800 fff8 { int ry = m_irdi & 7; // 13b nbcr1 @@ -85348,7 +85348,7 @@ void m68000_device::nbcd_b_ds_ifm() // 4800 fff8 return; } -void m68000_device::nbcd_b_ais_ifm() // 4810 fff8 +void m68000_mcu_device::nbcd_b_ais_ifm() // 4810 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -85424,7 +85424,7 @@ void m68000_device::nbcd_b_ais_ifm() // 4810 fff8 return; } -void m68000_device::nbcd_b_aips_ifm() // 4818 fff8 +void m68000_mcu_device::nbcd_b_aips_ifm() // 4818 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -85504,7 +85504,7 @@ void m68000_device::nbcd_b_aips_ifm() // 4818 fff8 return; } -void m68000_device::nbcd_b_pais_ifm() // 4820 fff8 +void m68000_mcu_device::nbcd_b_pais_ifm() // 4820 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -85586,7 +85586,7 @@ void m68000_device::nbcd_b_pais_ifm() // 4820 fff8 return; } -void m68000_device::nbcd_b_das_ifm() // 4828 fff8 +void m68000_mcu_device::nbcd_b_das_ifm() // 4828 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -85684,7 +85684,7 @@ void m68000_device::nbcd_b_das_ifm() // 4828 fff8 return; } -void m68000_device::nbcd_b_dais_ifm() // 4830 fff8 +void m68000_mcu_device::nbcd_b_dais_ifm() // 4830 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -85820,7 +85820,7 @@ adsw2: return; } -void m68000_device::nbcd_b_adr16_ifm() // 4838 ffff +void m68000_mcu_device::nbcd_b_adr16_ifm() // 4838 ffff { // 00a abwl1 m_aob = m_au; @@ -85917,7 +85917,7 @@ void m68000_device::nbcd_b_adr16_ifm() // 4838 ffff return; } -void m68000_device::nbcd_b_adr32_ifm() // 4839 ffff +void m68000_mcu_device::nbcd_b_adr32_ifm() // 4839 ffff { // 1e2 abll1 m_aob = m_au; @@ -86035,7 +86035,7 @@ void m68000_device::nbcd_b_adr32_ifm() // 4839 ffff return; } -void m68000_device::swap_ds_ifm() // 4840 fff8 +void m68000_mcu_device::swap_ds_ifm() // 4840 fff8 { int ry = m_irdi & 7; // 341 swap1 @@ -86080,7 +86080,7 @@ void m68000_device::swap_ds_ifm() // 4840 fff8 return; } -void m68000_device::pea_ais_ifm() // 4850 fff8 +void m68000_mcu_device::pea_ais_ifm() // 4850 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 17c peaa1 @@ -86159,7 +86159,7 @@ void m68000_device::pea_ais_ifm() // 4850 fff8 return; } -void m68000_device::pea_das_ifm() // 4868 fff8 +void m68000_mcu_device::pea_das_ifm() // 4868 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 17d pead1 @@ -86264,7 +86264,7 @@ void m68000_device::pea_das_ifm() // 4868 fff8 return; } -void m68000_device::pea_dais_ifm() // 4870 fff8 +void m68000_mcu_device::pea_dais_ifm() // 4870 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1ff peax0 @@ -86405,7 +86405,7 @@ peax4: return; } -void m68000_device::pea_adr16_ifm() // 4878 ffff +void m68000_mcu_device::pea_adr16_ifm() // 4878 ffff { // 178 paaw1 m_aob = m_au; @@ -86508,7 +86508,7 @@ void m68000_device::pea_adr16_ifm() // 4878 ffff return; } -void m68000_device::pea_adr32_ifm() // 4879 ffff +void m68000_mcu_device::pea_adr32_ifm() // 4879 ffff { // 1fa paal1 m_aob = m_au; @@ -86632,7 +86632,7 @@ void m68000_device::pea_adr32_ifm() // 4879 ffff return; } -void m68000_device::pea_dpc_ifm() // 487a ffff +void m68000_mcu_device::pea_dpc_ifm() // 487a ffff { // 17d pead1 m_aob = m_au; @@ -86736,7 +86736,7 @@ void m68000_device::pea_dpc_ifm() // 487a ffff return; } -void m68000_device::pea_dpci_ifm() // 487b ffff +void m68000_mcu_device::pea_dpci_ifm() // 487b ffff { // 1ff peax0 // alu r=9 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -86876,7 +86876,7 @@ peax4: return; } -void m68000_device::ext_w_ds_ifm() // 4880 fff8 +void m68000_mcu_device::ext_w_ds_ifm() // 4880 fff8 { int ry = m_irdi & 7; // 133 nnrw1 @@ -86917,7 +86917,7 @@ void m68000_device::ext_w_ds_ifm() // 4880 fff8 return; } -void m68000_device::movem_w_list_ais_ifm() // 4890 fff8 +void m68000_mcu_device::movem_w_list_ais_ifm() // 4890 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3a0 stmr1 @@ -87011,7 +87011,7 @@ mmrw2: return; } -void m68000_device::movem_w_listp_pais_ifm() // 48a0 fff8 +void m68000_mcu_device::movem_w_listp_pais_ifm() // 48a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3a4 push1 @@ -87108,7 +87108,7 @@ push3: return; } -void m68000_device::movem_w_list_das_ifm() // 48a8 fff8 +void m68000_mcu_device::movem_w_list_das_ifm() // 48a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1f1 stmd1 @@ -87225,7 +87225,7 @@ mmrw2: return; } -void m68000_device::movem_w_list_dais_ifm() // 48b0 fff8 +void m68000_mcu_device::movem_w_list_dais_ifm() // 48b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 325 stmx1 @@ -87380,7 +87380,7 @@ mmrw2: return; } -void m68000_device::movem_w_list_adr16_ifm() // 48b8 ffff +void m68000_mcu_device::movem_w_list_adr16_ifm() // 48b8 ffff { // 1ed smaw1 m_aob = m_au; @@ -87497,7 +87497,7 @@ mmrw2: return; } -void m68000_device::movem_w_list_adr32_ifm() // 48b9 ffff +void m68000_mcu_device::movem_w_list_adr32_ifm() // 48b9 ffff { // 1e5 smal1 m_aob = m_au; @@ -87635,7 +87635,7 @@ mmrw2: return; } -void m68000_device::ext_l_ds_ifm() // 48c0 fff8 +void m68000_mcu_device::ext_l_ds_ifm() // 48c0 fff8 { int ry = m_irdi & 7; // 232 extr1 @@ -87676,7 +87676,7 @@ void m68000_device::ext_l_ds_ifm() // 48c0 fff8 return; } -void m68000_device::movem_l_list_ais_ifm() // 48d0 fff8 +void m68000_mcu_device::movem_l_list_ais_ifm() // 48d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3a0 stmr1 @@ -87790,7 +87790,7 @@ mmrw2: return; } -void m68000_device::movem_l_listp_pais_ifm() // 48e0 fff8 +void m68000_mcu_device::movem_l_listp_pais_ifm() // 48e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 3a4 push1 @@ -87908,7 +87908,7 @@ push3: return; } -void m68000_device::movem_l_list_das_ifm() // 48e8 fff8 +void m68000_mcu_device::movem_l_list_das_ifm() // 48e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1f1 stmd1 @@ -88045,7 +88045,7 @@ mmrw2: return; } -void m68000_device::movem_l_list_dais_ifm() // 48f0 fff8 +void m68000_mcu_device::movem_l_list_dais_ifm() // 48f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 325 stmx1 @@ -88220,7 +88220,7 @@ mmrw2: return; } -void m68000_device::movem_l_list_adr16_ifm() // 48f8 ffff +void m68000_mcu_device::movem_l_list_adr16_ifm() // 48f8 ffff { // 1ed smaw1 m_aob = m_au; @@ -88357,7 +88357,7 @@ mmrw2: return; } -void m68000_device::movem_l_list_adr32_ifm() // 48f9 ffff +void m68000_mcu_device::movem_l_list_adr32_ifm() // 48f9 ffff { // 1e5 smal1 m_aob = m_au; @@ -88515,7 +88515,7 @@ mmrw2: return; } -void m68000_device::tst_b_ds_ifm() // 4a00 fff8 +void m68000_mcu_device::tst_b_ds_ifm() // 4a00 fff8 { int ry = m_irdi & 7; // 12d tsrw1 @@ -88556,7 +88556,7 @@ void m68000_device::tst_b_ds_ifm() // 4a00 fff8 return; } -void m68000_device::tst_b_ais_ifm() // 4a10 fff8 +void m68000_mcu_device::tst_b_ais_ifm() // 4a10 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -88618,7 +88618,7 @@ void m68000_device::tst_b_ais_ifm() // 4a10 fff8 return; } -void m68000_device::tst_b_aips_ifm() // 4a18 fff8 +void m68000_mcu_device::tst_b_aips_ifm() // 4a18 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -88685,7 +88685,7 @@ void m68000_device::tst_b_aips_ifm() // 4a18 fff8 return; } -void m68000_device::tst_b_pais_ifm() // 4a20 fff8 +void m68000_mcu_device::tst_b_pais_ifm() // 4a20 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -88754,7 +88754,7 @@ void m68000_device::tst_b_pais_ifm() // 4a20 fff8 return; } -void m68000_device::tst_b_das_ifm() // 4a28 fff8 +void m68000_mcu_device::tst_b_das_ifm() // 4a28 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -88839,7 +88839,7 @@ void m68000_device::tst_b_das_ifm() // 4a28 fff8 return; } -void m68000_device::tst_b_dais_ifm() // 4a30 fff8 +void m68000_mcu_device::tst_b_dais_ifm() // 4a30 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -88964,7 +88964,7 @@ adsw2: return; } -void m68000_device::tst_b_adr16_ifm() // 4a38 ffff +void m68000_mcu_device::tst_b_adr16_ifm() // 4a38 ffff { // 00a abwl1 m_aob = m_au; @@ -89048,7 +89048,7 @@ void m68000_device::tst_b_adr16_ifm() // 4a38 ffff return; } -void m68000_device::tst_b_adr32_ifm() // 4a39 ffff +void m68000_mcu_device::tst_b_adr32_ifm() // 4a39 ffff { // 1e2 abll1 m_aob = m_au; @@ -89154,7 +89154,7 @@ void m68000_device::tst_b_adr32_ifm() // 4a39 ffff return; } -void m68000_device::tst_w_ds_ifm() // 4a40 fff8 +void m68000_mcu_device::tst_w_ds_ifm() // 4a40 fff8 { int ry = m_irdi & 7; // 12d tsrw1 @@ -89195,7 +89195,7 @@ void m68000_device::tst_w_ds_ifm() // 4a40 fff8 return; } -void m68000_device::tst_w_ais_ifm() // 4a50 fff8 +void m68000_mcu_device::tst_w_ais_ifm() // 4a50 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -89260,7 +89260,7 @@ void m68000_device::tst_w_ais_ifm() // 4a50 fff8 return; } -void m68000_device::tst_w_aips_ifm() // 4a58 fff8 +void m68000_mcu_device::tst_w_aips_ifm() // 4a58 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -89330,7 +89330,7 @@ void m68000_device::tst_w_aips_ifm() // 4a58 fff8 return; } -void m68000_device::tst_w_pais_ifm() // 4a60 fff8 +void m68000_mcu_device::tst_w_pais_ifm() // 4a60 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -89402,7 +89402,7 @@ void m68000_device::tst_w_pais_ifm() // 4a60 fff8 return; } -void m68000_device::tst_w_das_ifm() // 4a68 fff8 +void m68000_mcu_device::tst_w_das_ifm() // 4a68 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -89490,7 +89490,7 @@ void m68000_device::tst_w_das_ifm() // 4a68 fff8 return; } -void m68000_device::tst_w_dais_ifm() // 4a70 fff8 +void m68000_mcu_device::tst_w_dais_ifm() // 4a70 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -89618,7 +89618,7 @@ adsw2: return; } -void m68000_device::tst_w_adr16_ifm() // 4a78 ffff +void m68000_mcu_device::tst_w_adr16_ifm() // 4a78 ffff { // 00a abwl1 m_aob = m_au; @@ -89705,7 +89705,7 @@ void m68000_device::tst_w_adr16_ifm() // 4a78 ffff return; } -void m68000_device::tst_w_adr32_ifm() // 4a79 ffff +void m68000_mcu_device::tst_w_adr32_ifm() // 4a79 ffff { // 1e2 abll1 m_aob = m_au; @@ -89814,7 +89814,7 @@ void m68000_device::tst_w_adr32_ifm() // 4a79 ffff return; } -void m68000_device::tst_l_ds_ifm() // 4a80 fff8 +void m68000_mcu_device::tst_l_ds_ifm() // 4a80 fff8 { int ry = m_irdi & 7; // 125 tsrl1 @@ -89857,7 +89857,7 @@ void m68000_device::tst_l_ds_ifm() // 4a80 fff8 return; } -void m68000_device::tst_l_ais_ifm() // 4a90 fff8 +void m68000_mcu_device::tst_l_ais_ifm() // 4a90 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -89945,7 +89945,7 @@ void m68000_device::tst_l_ais_ifm() // 4a90 fff8 return; } -void m68000_device::tst_l_aips_ifm() // 4a98 fff8 +void m68000_mcu_device::tst_l_aips_ifm() // 4a98 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -90037,7 +90037,7 @@ void m68000_device::tst_l_aips_ifm() // 4a98 fff8 return; } -void m68000_device::tst_l_pais_ifm() // 4aa0 fff8 +void m68000_mcu_device::tst_l_pais_ifm() // 4aa0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -90130,7 +90130,7 @@ void m68000_device::tst_l_pais_ifm() // 4aa0 fff8 return; } -void m68000_device::tst_l_das_ifm() // 4aa8 fff8 +void m68000_mcu_device::tst_l_das_ifm() // 4aa8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -90240,7 +90240,7 @@ void m68000_device::tst_l_das_ifm() // 4aa8 fff8 return; } -void m68000_device::tst_l_dais_ifm() // 4ab0 fff8 +void m68000_mcu_device::tst_l_dais_ifm() // 4ab0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -90390,7 +90390,7 @@ adsl2: return; } -void m68000_device::tst_l_adr16_ifm() // 4ab8 ffff +void m68000_mcu_device::tst_l_adr16_ifm() // 4ab8 ffff { // 00e abww1 m_aob = m_au; @@ -90503,7 +90503,7 @@ void m68000_device::tst_l_adr16_ifm() // 4ab8 ffff return; } -void m68000_device::tst_l_adr32_ifm() // 4ab9 ffff +void m68000_mcu_device::tst_l_adr32_ifm() // 4ab9 ffff { // 1e6 ablw1 m_aob = m_au; @@ -90638,7 +90638,7 @@ void m68000_device::tst_l_adr32_ifm() // 4ab9 ffff return; } -void m68000_device::tas_ds_ifm() // 4ac0 fff8 +void m68000_mcu_device::tas_ds_ifm() // 4ac0 fff8 { int ry = m_irdi & 7; // 345 tasr1 @@ -90681,7 +90681,7 @@ void m68000_device::tas_ds_ifm() // 4ac0 fff8 return; } -void m68000_device::tas_ais_ifm() // 4ad0 fff8 +void m68000_mcu_device::tas_ais_ifm() // 4ad0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -90765,7 +90765,7 @@ void m68000_device::tas_ais_ifm() // 4ad0 fff8 return; } -void m68000_device::tas_aips_ifm() // 4ad8 fff8 +void m68000_mcu_device::tas_aips_ifm() // 4ad8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -90854,7 +90854,7 @@ void m68000_device::tas_aips_ifm() // 4ad8 fff8 return; } -void m68000_device::tas_pais_ifm() // 4ae0 fff8 +void m68000_mcu_device::tas_pais_ifm() // 4ae0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -90945,7 +90945,7 @@ void m68000_device::tas_pais_ifm() // 4ae0 fff8 return; } -void m68000_device::tas_das_ifm() // 4ae8 fff8 +void m68000_mcu_device::tas_das_ifm() // 4ae8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -91052,7 +91052,7 @@ void m68000_device::tas_das_ifm() // 4ae8 fff8 return; } -void m68000_device::tas_dais_ifm() // 4af0 fff8 +void m68000_mcu_device::tas_dais_ifm() // 4af0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -91199,7 +91199,7 @@ adsw2: return; } -void m68000_device::tas_adr16_ifm() // 4af8 ffff +void m68000_mcu_device::tas_adr16_ifm() // 4af8 ffff { // 00a abwl1 m_aob = m_au; @@ -91305,7 +91305,7 @@ void m68000_device::tas_adr16_ifm() // 4af8 ffff return; } -void m68000_device::tas_adr32_ifm() // 4af9 ffff +void m68000_mcu_device::tas_adr32_ifm() // 4af9 ffff { // 1e2 abll1 m_aob = m_au; @@ -91433,7 +91433,7 @@ void m68000_device::tas_adr32_ifm() // 4af9 ffff return; } -void m68000_device::movem_w_ais_list_ifm() // 4c90 fff8 +void m68000_mcu_device::movem_w_ais_list_ifm() // 4c90 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 127 ldmr1 @@ -91549,7 +91549,7 @@ mmaw2: return; } -void m68000_device::movem_w_aips_list_ifm() // 4c98 fff8 +void m68000_mcu_device::movem_w_aips_list_ifm() // 4c98 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 123 popm1 @@ -91666,7 +91666,7 @@ popm6: return; } -void m68000_device::movem_w_das_list_ifm() // 4ca8 fff8 +void m68000_mcu_device::movem_w_das_list_ifm() // 4ca8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1fd ldmd1 @@ -91805,7 +91805,7 @@ mmaw2: return; } -void m68000_device::movem_w_dais_list_ifm() // 4cb0 fff8 +void m68000_mcu_device::movem_w_dais_list_ifm() // 4cb0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1f5 ldmx0 @@ -91981,7 +91981,7 @@ mmaw2: return; } -void m68000_device::movem_w_adr16_list_ifm() // 4cb8 ffff +void m68000_mcu_device::movem_w_adr16_list_ifm() // 4cb8 ffff { // 1f9 lmaw1 m_aob = m_au; @@ -92118,7 +92118,7 @@ mmaw2: return; } -void m68000_device::movem_w_adr32_list_ifm() // 4cb9 ffff +void m68000_mcu_device::movem_w_adr32_list_ifm() // 4cb9 ffff { // 1e9 lmal1 m_aob = m_au; @@ -92279,7 +92279,7 @@ mmaw2: return; } -void m68000_device::movem_w_dpc_list_ifm() // 4cba ffff +void m68000_mcu_device::movem_w_dpc_list_ifm() // 4cba ffff { // 1fd ldmd1 m_aob = m_au; @@ -92417,7 +92417,7 @@ mmaw2: return; } -void m68000_device::movem_w_dpci_list_ifm() // 4cbb ffff +void m68000_mcu_device::movem_w_dpci_list_ifm() // 4cbb ffff { // 1f5 ldmx0 m_aob = m_au; @@ -92592,7 +92592,7 @@ mmaw2: return; } -void m68000_device::movem_l_ais_list_ifm() // 4cd0 fff8 +void m68000_mcu_device::movem_l_ais_list_ifm() // 4cd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 127 ldmr1 @@ -92729,7 +92729,7 @@ mmaw2: return; } -void m68000_device::movem_l_aips_list_ifm() // 4cd8 fff8 +void m68000_mcu_device::movem_l_aips_list_ifm() // 4cd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 123 popm1 @@ -92867,7 +92867,7 @@ popm6: return; } -void m68000_device::movem_l_das_list_ifm() // 4ce8 fff8 +void m68000_mcu_device::movem_l_das_list_ifm() // 4ce8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1fd ldmd1 @@ -93027,7 +93027,7 @@ mmaw2: return; } -void m68000_device::movem_l_dais_list_ifm() // 4cf0 fff8 +void m68000_mcu_device::movem_l_dais_list_ifm() // 4cf0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1f5 ldmx0 @@ -93224,7 +93224,7 @@ mmaw2: return; } -void m68000_device::movem_l_adr16_list_ifm() // 4cf8 ffff +void m68000_mcu_device::movem_l_adr16_list_ifm() // 4cf8 ffff { // 1f9 lmaw1 m_aob = m_au; @@ -93382,7 +93382,7 @@ mmaw2: return; } -void m68000_device::movem_l_adr32_list_ifm() // 4cf9 ffff +void m68000_mcu_device::movem_l_adr32_list_ifm() // 4cf9 ffff { // 1e9 lmal1 m_aob = m_au; @@ -93564,7 +93564,7 @@ mmaw2: return; } -void m68000_device::movem_l_dpc_list_ifm() // 4cfa ffff +void m68000_mcu_device::movem_l_dpc_list_ifm() // 4cfa ffff { // 1fd ldmd1 m_aob = m_au; @@ -93723,7 +93723,7 @@ mmaw2: return; } -void m68000_device::movem_l_dpci_list_ifm() // 4cfb ffff +void m68000_mcu_device::movem_l_dpci_list_ifm() // 4cfb ffff { // 1f5 ldmx0 m_aob = m_au; @@ -93919,7 +93919,7 @@ mmaw2: return; } -void m68000_device::trap_imm4_ifm() // 4e40 fff0 +void m68000_mcu_device::trap_imm4_ifm() // 4e40 fff0 { // 1d0 trap1 m_ftu = m_sr; @@ -94100,7 +94100,7 @@ void m68000_device::trap_imm4_ifm() // 4e40 fff0 return; } -void m68000_device::link_as_imm16_ifm() // 4e50 fff8 +void m68000_mcu_device::link_as_imm16_ifm() // 4e50 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 30b link1 @@ -94202,7 +94202,7 @@ void m68000_device::link_as_imm16_ifm() // 4e50 fff8 return; } -void m68000_device::unlk_as_ifm() // 4e58 fff8 +void m68000_mcu_device::unlk_as_ifm() // 4e58 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 119 unlk1 @@ -94283,7 +94283,7 @@ void m68000_device::unlk_as_ifm() // 4e58 fff8 return; } -void m68000_device::move_as_usp_ifm() // 4e60 fff8 +void m68000_mcu_device::move_as_usp_ifm() // 4e60 fff8 { int ry = map_sp((m_irdi & 7) | 8); if(!(m_sr & SR_S)) { @@ -94327,7 +94327,7 @@ void m68000_device::move_as_usp_ifm() // 4e60 fff8 return; } -void m68000_device::move_usp_as_ifm() // 4e68 fff8 +void m68000_mcu_device::move_usp_as_ifm() // 4e68 fff8 { int ry = map_sp((m_irdi & 7) | 8); if(!(m_sr & SR_S)) { @@ -94371,7 +94371,7 @@ void m68000_device::move_usp_as_ifm() // 4e68 fff8 return; } -void m68000_device::reset_ifm() // 4e70 ffff +void m68000_mcu_device::reset_ifm() // 4e70 ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -94436,7 +94436,7 @@ rset5: return; } -void m68000_device::nop_ifm() // 4e71 ffff +void m68000_mcu_device::nop_ifm() // 4e71 ffff { // 363 b m_aob = m_au; @@ -94471,7 +94471,7 @@ void m68000_device::nop_ifm() // 4e71 ffff return; } -void m68000_device::stop_i16u_ifm() // 4e72 ffff +void m68000_mcu_device::stop_i16u_ifm() // 4e72 ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -94500,7 +94500,7 @@ void m68000_device::stop_i16u_ifm() // 4e72 ffff return; } -void m68000_device::rte_ifm() // 4e73 ffff +void m68000_mcu_device::rte_ifm() // 4e73 ffff { if(!(m_sr & SR_S)) { m_inst_state = S_PRIVILEDGE; @@ -94632,7 +94632,7 @@ void m68000_device::rte_ifm() // 4e73 ffff return; } -void m68000_device::rts_ifm() // 4e75 ffff +void m68000_mcu_device::rts_ifm() // 4e75 ffff { // 126 rts1 m_aob = m_da[m_sp]; @@ -94731,7 +94731,7 @@ void m68000_device::rts_ifm() // 4e75 ffff return; } -void m68000_device::trapv_ifm() // 4e76 ffff +void m68000_mcu_device::trapv_ifm() // 4e76 ffff { // 06d trpv1 m_aob = m_au; @@ -94964,7 +94964,7 @@ trpv3: return; } -void m68000_device::rtr_ifm() // 4e77 ffff +void m68000_mcu_device::rtr_ifm() // 4e77 ffff { // 12a rtr1 m_aob = m_da[m_sp]; @@ -95089,7 +95089,7 @@ void m68000_device::rtr_ifm() // 4e77 ffff return; } -void m68000_device::jsr_ais_ifm() // 4e90 fff8 +void m68000_mcu_device::jsr_ais_ifm() // 4e90 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 273 jsra1 @@ -95188,7 +95188,7 @@ void m68000_device::jsr_ais_ifm() // 4e90 fff8 return; } -void m68000_device::jsr_das_ifm() // 4ea8 fff8 +void m68000_mcu_device::jsr_das_ifm() // 4ea8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b0 jsrd1 @@ -95293,7 +95293,7 @@ void m68000_device::jsr_das_ifm() // 4ea8 fff8 return; } -void m68000_device::jsr_dais_ifm() // 4eb0 fff8 +void m68000_mcu_device::jsr_dais_ifm() // 4eb0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1f3 jsrx0 @@ -95418,7 +95418,7 @@ jsrd2: return; } -void m68000_device::jsr_adr16_ifm() // 4eb8 ffff +void m68000_mcu_device::jsr_adr16_ifm() // 4eb8 ffff { // 293 jsaw0 m_at = ext32(m_dbin); @@ -95519,7 +95519,7 @@ void m68000_device::jsr_adr16_ifm() // 4eb8 ffff return; } -void m68000_device::jsr_adr32_ifm() // 4eb9 ffff +void m68000_mcu_device::jsr_adr32_ifm() // 4eb9 ffff { // 1f2 jsal1 m_aob = m_au; @@ -95639,7 +95639,7 @@ void m68000_device::jsr_adr32_ifm() // 4eb9 ffff return; } -void m68000_device::jsr_dpc_ifm() // 4eba ffff +void m68000_mcu_device::jsr_dpc_ifm() // 4eba ffff { // 2b0 jsrd1 m_au = ext32(m_dbin) + m_pc; @@ -95743,7 +95743,7 @@ void m68000_device::jsr_dpc_ifm() // 4eba ffff return; } -void m68000_device::jsr_dpci_ifm() // 4ebb ffff +void m68000_mcu_device::jsr_dpci_ifm() // 4ebb ffff { // 1f3 jsrx0 // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 @@ -95867,7 +95867,7 @@ jsrd2: return; } -void m68000_device::jmp_ais_ifm() // 4ed0 fff8 +void m68000_mcu_device::jmp_ais_ifm() // 4ed0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 255 jmpa1 @@ -95923,7 +95923,7 @@ void m68000_device::jmp_ais_ifm() // 4ed0 fff8 return; } -void m68000_device::jmp_das_ifm() // 4ee8 fff8 +void m68000_mcu_device::jmp_das_ifm() // 4ee8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b4 jmpd1 @@ -95983,7 +95983,7 @@ void m68000_device::jmp_das_ifm() // 4ee8 fff8 return; } -void m68000_device::jmp_dais_ifm() // 4ef0 fff8 +void m68000_mcu_device::jmp_dais_ifm() // 4ef0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1f7 jmpx0 @@ -96063,7 +96063,7 @@ bbci3: return; } -void m68000_device::jmp_adr16_ifm() // 4ef8 ffff +void m68000_mcu_device::jmp_adr16_ifm() // 4ef8 ffff { // 297 jmaw1 m_at = ext32(m_dbin); @@ -96121,7 +96121,7 @@ void m68000_device::jmp_adr16_ifm() // 4ef8 ffff return; } -void m68000_device::jmp_adr32_ifm() // 4ef9 ffff +void m68000_mcu_device::jmp_adr32_ifm() // 4ef9 ffff { // 1f6 jmal1 m_aob = m_au; @@ -96197,7 +96197,7 @@ void m68000_device::jmp_adr32_ifm() // 4ef9 ffff return; } -void m68000_device::jmp_dpc_ifm() // 4efa ffff +void m68000_mcu_device::jmp_dpc_ifm() // 4efa ffff { // 2b4 jmpd1 m_au = ext32(m_dbin) + m_pc; @@ -96256,7 +96256,7 @@ void m68000_device::jmp_dpc_ifm() // 4efa ffff return; } -void m68000_device::jmp_dpci_ifm() // 4efb ffff +void m68000_mcu_device::jmp_dpci_ifm() // 4efb ffff { // 1f7 jmpx0 // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -96335,7 +96335,7 @@ bbci3: return; } -void m68000_device::addq_b_imm3_ds_ifm() // 5000 f1f8 +void m68000_mcu_device::addq_b_imm3_ds_ifm() // 5000 f1f8 { int ry = m_irdi & 7; // 2d8 raqw1 @@ -96376,7 +96376,7 @@ void m68000_device::addq_b_imm3_ds_ifm() // 5000 f1f8 return; } -void m68000_device::addq_b_imm3_ais_ifm() // 5010 f1f8 +void m68000_mcu_device::addq_b_imm3_ais_ifm() // 5010 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -96451,7 +96451,7 @@ void m68000_device::addq_b_imm3_ais_ifm() // 5010 f1f8 return; } -void m68000_device::addq_b_imm3_aips_ifm() // 5018 f1f8 +void m68000_mcu_device::addq_b_imm3_aips_ifm() // 5018 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -96530,7 +96530,7 @@ void m68000_device::addq_b_imm3_aips_ifm() // 5018 f1f8 return; } -void m68000_device::addq_b_imm3_pais_ifm() // 5020 f1f8 +void m68000_mcu_device::addq_b_imm3_pais_ifm() // 5020 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -96611,7 +96611,7 @@ void m68000_device::addq_b_imm3_pais_ifm() // 5020 f1f8 return; } -void m68000_device::addq_b_imm3_das_ifm() // 5028 f1f8 +void m68000_mcu_device::addq_b_imm3_das_ifm() // 5028 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -96708,7 +96708,7 @@ void m68000_device::addq_b_imm3_das_ifm() // 5028 f1f8 return; } -void m68000_device::addq_b_imm3_dais_ifm() // 5030 f1f8 +void m68000_mcu_device::addq_b_imm3_dais_ifm() // 5030 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -96843,7 +96843,7 @@ adsw2: return; } -void m68000_device::addq_b_imm3_adr16_ifm() // 5038 f1ff +void m68000_mcu_device::addq_b_imm3_adr16_ifm() // 5038 f1ff { // 00a abwl1 m_aob = m_au; @@ -96939,7 +96939,7 @@ void m68000_device::addq_b_imm3_adr16_ifm() // 5038 f1ff return; } -void m68000_device::addq_b_imm3_adr32_ifm() // 5039 f1ff +void m68000_mcu_device::addq_b_imm3_adr32_ifm() // 5039 f1ff { // 1e2 abll1 m_aob = m_au; @@ -97056,7 +97056,7 @@ void m68000_device::addq_b_imm3_adr32_ifm() // 5039 f1ff return; } -void m68000_device::addq_w_imm3_ds_ifm() // 5040 f1f8 +void m68000_mcu_device::addq_w_imm3_ds_ifm() // 5040 f1f8 { int ry = m_irdi & 7; // 2d8 raqw1 @@ -97097,7 +97097,7 @@ void m68000_device::addq_w_imm3_ds_ifm() // 5040 f1f8 return; } -void m68000_device::addq_w_imm3_as_ifm() // 5048 f1f8 +void m68000_mcu_device::addq_w_imm3_as_ifm() // 5048 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 2dc raql1 @@ -97144,7 +97144,7 @@ void m68000_device::addq_w_imm3_as_ifm() // 5048 f1f8 return; } -void m68000_device::addq_w_imm3_ais_ifm() // 5050 f1f8 +void m68000_mcu_device::addq_w_imm3_ais_ifm() // 5050 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -97227,7 +97227,7 @@ void m68000_device::addq_w_imm3_ais_ifm() // 5050 f1f8 return; } -void m68000_device::addq_w_imm3_aips_ifm() // 5058 f1f8 +void m68000_mcu_device::addq_w_imm3_aips_ifm() // 5058 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -97314,7 +97314,7 @@ void m68000_device::addq_w_imm3_aips_ifm() // 5058 f1f8 return; } -void m68000_device::addq_w_imm3_pais_ifm() // 5060 f1f8 +void m68000_mcu_device::addq_w_imm3_pais_ifm() // 5060 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -97403,7 +97403,7 @@ void m68000_device::addq_w_imm3_pais_ifm() // 5060 f1f8 return; } -void m68000_device::addq_w_imm3_das_ifm() // 5068 f1f8 +void m68000_mcu_device::addq_w_imm3_das_ifm() // 5068 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -97508,7 +97508,7 @@ void m68000_device::addq_w_imm3_das_ifm() // 5068 f1f8 return; } -void m68000_device::addq_w_imm3_dais_ifm() // 5070 f1f8 +void m68000_mcu_device::addq_w_imm3_dais_ifm() // 5070 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -97651,7 +97651,7 @@ adsw2: return; } -void m68000_device::addq_w_imm3_adr16_ifm() // 5078 f1ff +void m68000_mcu_device::addq_w_imm3_adr16_ifm() // 5078 f1ff { // 00a abwl1 m_aob = m_au; @@ -97755,7 +97755,7 @@ void m68000_device::addq_w_imm3_adr16_ifm() // 5078 f1ff return; } -void m68000_device::addq_w_imm3_adr32_ifm() // 5079 f1ff +void m68000_mcu_device::addq_w_imm3_adr32_ifm() // 5079 f1ff { // 1e2 abll1 m_aob = m_au; @@ -97880,7 +97880,7 @@ void m68000_device::addq_w_imm3_adr32_ifm() // 5079 f1ff return; } -void m68000_device::addq_l_imm3_ds_ifm() // 5080 f1f8 +void m68000_mcu_device::addq_l_imm3_ds_ifm() // 5080 f1f8 { int ry = m_irdi & 7; // 2dc raql1 @@ -97929,7 +97929,7 @@ void m68000_device::addq_l_imm3_ds_ifm() // 5080 f1f8 return; } -void m68000_device::addq_l_imm3_as_ifm() // 5088 f1f8 +void m68000_mcu_device::addq_l_imm3_as_ifm() // 5088 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 2dc raql1 @@ -97976,7 +97976,7 @@ void m68000_device::addq_l_imm3_as_ifm() // 5088 f1f8 return; } -void m68000_device::addq_l_imm3_ais_ifm() // 5090 f1f8 +void m68000_mcu_device::addq_l_imm3_ais_ifm() // 5090 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -98103,7 +98103,7 @@ void m68000_device::addq_l_imm3_ais_ifm() // 5090 f1f8 return; } -void m68000_device::addq_l_imm3_aips_ifm() // 5098 f1f8 +void m68000_mcu_device::addq_l_imm3_aips_ifm() // 5098 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -98233,7 +98233,7 @@ void m68000_device::addq_l_imm3_aips_ifm() // 5098 f1f8 return; } -void m68000_device::addq_l_imm3_pais_ifm() // 50a0 f1f8 +void m68000_mcu_device::addq_l_imm3_pais_ifm() // 50a0 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -98364,7 +98364,7 @@ void m68000_device::addq_l_imm3_pais_ifm() // 50a0 f1f8 return; } -void m68000_device::addq_l_imm3_das_ifm() // 50a8 f1f8 +void m68000_mcu_device::addq_l_imm3_das_ifm() // 50a8 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -98512,7 +98512,7 @@ void m68000_device::addq_l_imm3_das_ifm() // 50a8 f1f8 return; } -void m68000_device::addq_l_imm3_dais_ifm() // 50b0 f1f8 +void m68000_mcu_device::addq_l_imm3_dais_ifm() // 50b0 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -98698,7 +98698,7 @@ adsl2: return; } -void m68000_device::addq_l_imm3_adr16_ifm() // 50b8 f1ff +void m68000_mcu_device::addq_l_imm3_adr16_ifm() // 50b8 f1ff { // 00e abww1 m_aob = m_au; @@ -98848,7 +98848,7 @@ void m68000_device::addq_l_imm3_adr16_ifm() // 50b8 f1ff return; } -void m68000_device::addq_l_imm3_adr32_ifm() // 50b9 f1ff +void m68000_mcu_device::addq_l_imm3_adr32_ifm() // 50b9 f1ff { // 1e6 ablw1 m_aob = m_au; @@ -99019,7 +99019,7 @@ void m68000_device::addq_l_imm3_adr32_ifm() // 50b9 f1ff return; } -void m68000_device::st_ds_ifm() // 50c0 fff8 +void m68000_mcu_device::st_ds_ifm() // 50c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -99100,7 +99100,7 @@ sccr2: return; } -void m68000_device::dbt_ds_rel16_ifm() // 50c8 fff8 +void m68000_mcu_device::dbt_ds_rel16_ifm() // 50c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -99279,7 +99279,7 @@ dbcc5: goto dbcc4; } -void m68000_device::st_ais_ifm() // 50d0 fff8 +void m68000_mcu_device::st_ais_ifm() // 50d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -99390,7 +99390,7 @@ morw2: return; } -void m68000_device::st_aips_ifm() // 50d8 fff8 +void m68000_mcu_device::st_aips_ifm() // 50d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -99506,7 +99506,7 @@ morw2: return; } -void m68000_device::st_pais_ifm() // 50e0 fff8 +void m68000_mcu_device::st_pais_ifm() // 50e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -99624,7 +99624,7 @@ morw2: return; } -void m68000_device::st_das_ifm() // 50e8 fff8 +void m68000_mcu_device::st_das_ifm() // 50e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -99758,7 +99758,7 @@ morw2: return; } -void m68000_device::st_dais_ifm() // 50f0 fff8 +void m68000_mcu_device::st_dais_ifm() // 50f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -99932,7 +99932,7 @@ morw2: return; } -void m68000_device::st_adr16_ifm() // 50f8 ffff +void m68000_mcu_device::st_adr16_ifm() // 50f8 ffff { // 00a abwl1 m_aob = m_au; @@ -100065,7 +100065,7 @@ morw2: return; } -void m68000_device::st_adr32_ifm() // 50f9 ffff +void m68000_mcu_device::st_adr32_ifm() // 50f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -100220,7 +100220,7 @@ morw2: return; } -void m68000_device::subq_b_imm3_ds_ifm() // 5100 f1f8 +void m68000_mcu_device::subq_b_imm3_ds_ifm() // 5100 f1f8 { int ry = m_irdi & 7; // 2d8 raqw1 @@ -100261,7 +100261,7 @@ void m68000_device::subq_b_imm3_ds_ifm() // 5100 f1f8 return; } -void m68000_device::subq_b_imm3_ais_ifm() // 5110 f1f8 +void m68000_mcu_device::subq_b_imm3_ais_ifm() // 5110 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -100336,7 +100336,7 @@ void m68000_device::subq_b_imm3_ais_ifm() // 5110 f1f8 return; } -void m68000_device::subq_b_imm3_aips_ifm() // 5118 f1f8 +void m68000_mcu_device::subq_b_imm3_aips_ifm() // 5118 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -100415,7 +100415,7 @@ void m68000_device::subq_b_imm3_aips_ifm() // 5118 f1f8 return; } -void m68000_device::subq_b_imm3_pais_ifm() // 5120 f1f8 +void m68000_mcu_device::subq_b_imm3_pais_ifm() // 5120 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -100496,7 +100496,7 @@ void m68000_device::subq_b_imm3_pais_ifm() // 5120 f1f8 return; } -void m68000_device::subq_b_imm3_das_ifm() // 5128 f1f8 +void m68000_mcu_device::subq_b_imm3_das_ifm() // 5128 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -100593,7 +100593,7 @@ void m68000_device::subq_b_imm3_das_ifm() // 5128 f1f8 return; } -void m68000_device::subq_b_imm3_dais_ifm() // 5130 f1f8 +void m68000_mcu_device::subq_b_imm3_dais_ifm() // 5130 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -100728,7 +100728,7 @@ adsw2: return; } -void m68000_device::subq_b_imm3_adr16_ifm() // 5138 f1ff +void m68000_mcu_device::subq_b_imm3_adr16_ifm() // 5138 f1ff { // 00a abwl1 m_aob = m_au; @@ -100824,7 +100824,7 @@ void m68000_device::subq_b_imm3_adr16_ifm() // 5138 f1ff return; } -void m68000_device::subq_b_imm3_adr32_ifm() // 5139 f1ff +void m68000_mcu_device::subq_b_imm3_adr32_ifm() // 5139 f1ff { // 1e2 abll1 m_aob = m_au; @@ -100941,7 +100941,7 @@ void m68000_device::subq_b_imm3_adr32_ifm() // 5139 f1ff return; } -void m68000_device::subq_w_imm3_ds_ifm() // 5140 f1f8 +void m68000_mcu_device::subq_w_imm3_ds_ifm() // 5140 f1f8 { int ry = m_irdi & 7; // 2d8 raqw1 @@ -100982,7 +100982,7 @@ void m68000_device::subq_w_imm3_ds_ifm() // 5140 f1f8 return; } -void m68000_device::subq_w_imm3_as_ifm() // 5148 f1f8 +void m68000_mcu_device::subq_w_imm3_as_ifm() // 5148 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 2dc raql1 @@ -101029,7 +101029,7 @@ void m68000_device::subq_w_imm3_as_ifm() // 5148 f1f8 return; } -void m68000_device::subq_w_imm3_ais_ifm() // 5150 f1f8 +void m68000_mcu_device::subq_w_imm3_ais_ifm() // 5150 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -101112,7 +101112,7 @@ void m68000_device::subq_w_imm3_ais_ifm() // 5150 f1f8 return; } -void m68000_device::subq_w_imm3_aips_ifm() // 5158 f1f8 +void m68000_mcu_device::subq_w_imm3_aips_ifm() // 5158 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -101199,7 +101199,7 @@ void m68000_device::subq_w_imm3_aips_ifm() // 5158 f1f8 return; } -void m68000_device::subq_w_imm3_pais_ifm() // 5160 f1f8 +void m68000_mcu_device::subq_w_imm3_pais_ifm() // 5160 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -101288,7 +101288,7 @@ void m68000_device::subq_w_imm3_pais_ifm() // 5160 f1f8 return; } -void m68000_device::subq_w_imm3_das_ifm() // 5168 f1f8 +void m68000_mcu_device::subq_w_imm3_das_ifm() // 5168 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -101393,7 +101393,7 @@ void m68000_device::subq_w_imm3_das_ifm() // 5168 f1f8 return; } -void m68000_device::subq_w_imm3_dais_ifm() // 5170 f1f8 +void m68000_mcu_device::subq_w_imm3_dais_ifm() // 5170 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -101536,7 +101536,7 @@ adsw2: return; } -void m68000_device::subq_w_imm3_adr16_ifm() // 5178 f1ff +void m68000_mcu_device::subq_w_imm3_adr16_ifm() // 5178 f1ff { // 00a abwl1 m_aob = m_au; @@ -101640,7 +101640,7 @@ void m68000_device::subq_w_imm3_adr16_ifm() // 5178 f1ff return; } -void m68000_device::subq_w_imm3_adr32_ifm() // 5179 f1ff +void m68000_mcu_device::subq_w_imm3_adr32_ifm() // 5179 f1ff { // 1e2 abll1 m_aob = m_au; @@ -101765,7 +101765,7 @@ void m68000_device::subq_w_imm3_adr32_ifm() // 5179 f1ff return; } -void m68000_device::subq_l_imm3_ds_ifm() // 5180 f1f8 +void m68000_mcu_device::subq_l_imm3_ds_ifm() // 5180 f1f8 { int ry = m_irdi & 7; // 2dc raql1 @@ -101814,7 +101814,7 @@ void m68000_device::subq_l_imm3_ds_ifm() // 5180 f1f8 return; } -void m68000_device::subq_l_imm3_as_ifm() // 5188 f1f8 +void m68000_mcu_device::subq_l_imm3_as_ifm() // 5188 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 2dc raql1 @@ -101861,7 +101861,7 @@ void m68000_device::subq_l_imm3_as_ifm() // 5188 f1f8 return; } -void m68000_device::subq_l_imm3_ais_ifm() // 5190 f1f8 +void m68000_mcu_device::subq_l_imm3_ais_ifm() // 5190 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 00b adrl1 @@ -101988,7 +101988,7 @@ void m68000_device::subq_l_imm3_ais_ifm() // 5190 f1f8 return; } -void m68000_device::subq_l_imm3_aips_ifm() // 5198 f1f8 +void m68000_mcu_device::subq_l_imm3_aips_ifm() // 5198 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 00f pinl1 @@ -102118,7 +102118,7 @@ void m68000_device::subq_l_imm3_aips_ifm() // 5198 f1f8 return; } -void m68000_device::subq_l_imm3_pais_ifm() // 51a0 f1f8 +void m68000_mcu_device::subq_l_imm3_pais_ifm() // 51a0 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 179 pdcl1 @@ -102249,7 +102249,7 @@ void m68000_device::subq_l_imm3_pais_ifm() // 51a0 f1f8 return; } -void m68000_device::subq_l_imm3_das_ifm() // 51a8 f1f8 +void m68000_mcu_device::subq_l_imm3_das_ifm() // 51a8 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1c6 adsl1 @@ -102397,7 +102397,7 @@ void m68000_device::subq_l_imm3_das_ifm() // 51a8 f1f8 return; } -void m68000_device::subq_l_imm3_dais_ifm() // 51b0 f1f8 +void m68000_mcu_device::subq_l_imm3_dais_ifm() // 51b0 f1f8 { int ry = map_sp((m_irdi & 7) | 8); // 1e7 aixw0 @@ -102583,7 +102583,7 @@ adsl2: return; } -void m68000_device::subq_l_imm3_adr16_ifm() // 51b8 f1ff +void m68000_mcu_device::subq_l_imm3_adr16_ifm() // 51b8 f1ff { // 00e abww1 m_aob = m_au; @@ -102733,7 +102733,7 @@ void m68000_device::subq_l_imm3_adr16_ifm() // 51b8 f1ff return; } -void m68000_device::subq_l_imm3_adr32_ifm() // 51b9 f1ff +void m68000_mcu_device::subq_l_imm3_adr32_ifm() // 51b9 f1ff { // 1e6 ablw1 m_aob = m_au; @@ -102904,7 +102904,7 @@ void m68000_device::subq_l_imm3_adr32_ifm() // 51b9 f1ff return; } -void m68000_device::sf_ds_ifm() // 51c0 fff8 +void m68000_mcu_device::sf_ds_ifm() // 51c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -102985,7 +102985,7 @@ sccr2: return; } -void m68000_device::dbra_ds_rel16_ifm() // 51c8 fff8 +void m68000_mcu_device::dbra_ds_rel16_ifm() // 51c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -103164,7 +103164,7 @@ dbcc5: goto dbcc4; } -void m68000_device::sf_ais_ifm() // 51d0 fff8 +void m68000_mcu_device::sf_ais_ifm() // 51d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -103275,7 +103275,7 @@ morw2: return; } -void m68000_device::sf_aips_ifm() // 51d8 fff8 +void m68000_mcu_device::sf_aips_ifm() // 51d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -103391,7 +103391,7 @@ morw2: return; } -void m68000_device::sf_pais_ifm() // 51e0 fff8 +void m68000_mcu_device::sf_pais_ifm() // 51e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -103509,7 +103509,7 @@ morw2: return; } -void m68000_device::sf_das_ifm() // 51e8 fff8 +void m68000_mcu_device::sf_das_ifm() // 51e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -103643,7 +103643,7 @@ morw2: return; } -void m68000_device::sf_dais_ifm() // 51f0 fff8 +void m68000_mcu_device::sf_dais_ifm() // 51f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -103817,7 +103817,7 @@ morw2: return; } -void m68000_device::sf_adr16_ifm() // 51f8 ffff +void m68000_mcu_device::sf_adr16_ifm() // 51f8 ffff { // 00a abwl1 m_aob = m_au; @@ -103950,7 +103950,7 @@ morw2: return; } -void m68000_device::sf_adr32_ifm() // 51f9 ffff +void m68000_mcu_device::sf_adr32_ifm() // 51f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -104105,7 +104105,7 @@ morw2: return; } -void m68000_device::shi_ds_ifm() // 52c0 fff8 +void m68000_mcu_device::shi_ds_ifm() // 52c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -104186,7 +104186,7 @@ sccr2: return; } -void m68000_device::dbhi_ds_rel16_ifm() // 52c8 fff8 +void m68000_mcu_device::dbhi_ds_rel16_ifm() // 52c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -104365,7 +104365,7 @@ dbcc5: goto dbcc4; } -void m68000_device::shi_ais_ifm() // 52d0 fff8 +void m68000_mcu_device::shi_ais_ifm() // 52d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -104476,7 +104476,7 @@ morw2: return; } -void m68000_device::shi_aips_ifm() // 52d8 fff8 +void m68000_mcu_device::shi_aips_ifm() // 52d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -104592,7 +104592,7 @@ morw2: return; } -void m68000_device::shi_pais_ifm() // 52e0 fff8 +void m68000_mcu_device::shi_pais_ifm() // 52e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -104710,7 +104710,7 @@ morw2: return; } -void m68000_device::shi_das_ifm() // 52e8 fff8 +void m68000_mcu_device::shi_das_ifm() // 52e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -104844,7 +104844,7 @@ morw2: return; } -void m68000_device::shi_dais_ifm() // 52f0 fff8 +void m68000_mcu_device::shi_dais_ifm() // 52f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -105018,7 +105018,7 @@ morw2: return; } -void m68000_device::shi_adr16_ifm() // 52f8 ffff +void m68000_mcu_device::shi_adr16_ifm() // 52f8 ffff { // 00a abwl1 m_aob = m_au; @@ -105151,7 +105151,7 @@ morw2: return; } -void m68000_device::shi_adr32_ifm() // 52f9 ffff +void m68000_mcu_device::shi_adr32_ifm() // 52f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -105306,7 +105306,7 @@ morw2: return; } -void m68000_device::sls_ds_ifm() // 53c0 fff8 +void m68000_mcu_device::sls_ds_ifm() // 53c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -105387,7 +105387,7 @@ sccr2: return; } -void m68000_device::dbls_ds_rel16_ifm() // 53c8 fff8 +void m68000_mcu_device::dbls_ds_rel16_ifm() // 53c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -105566,7 +105566,7 @@ dbcc5: goto dbcc4; } -void m68000_device::sls_ais_ifm() // 53d0 fff8 +void m68000_mcu_device::sls_ais_ifm() // 53d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -105677,7 +105677,7 @@ morw2: return; } -void m68000_device::sls_aips_ifm() // 53d8 fff8 +void m68000_mcu_device::sls_aips_ifm() // 53d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -105793,7 +105793,7 @@ morw2: return; } -void m68000_device::sls_pais_ifm() // 53e0 fff8 +void m68000_mcu_device::sls_pais_ifm() // 53e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -105911,7 +105911,7 @@ morw2: return; } -void m68000_device::sls_das_ifm() // 53e8 fff8 +void m68000_mcu_device::sls_das_ifm() // 53e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -106045,7 +106045,7 @@ morw2: return; } -void m68000_device::sls_dais_ifm() // 53f0 fff8 +void m68000_mcu_device::sls_dais_ifm() // 53f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -106219,7 +106219,7 @@ morw2: return; } -void m68000_device::sls_adr16_ifm() // 53f8 ffff +void m68000_mcu_device::sls_adr16_ifm() // 53f8 ffff { // 00a abwl1 m_aob = m_au; @@ -106352,7 +106352,7 @@ morw2: return; } -void m68000_device::sls_adr32_ifm() // 53f9 ffff +void m68000_mcu_device::sls_adr32_ifm() // 53f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -106507,7 +106507,7 @@ morw2: return; } -void m68000_device::scc_ds_ifm() // 54c0 fff8 +void m68000_mcu_device::scc_ds_ifm() // 54c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -106588,7 +106588,7 @@ sccr2: return; } -void m68000_device::dbcc_ds_rel16_ifm() // 54c8 fff8 +void m68000_mcu_device::dbcc_ds_rel16_ifm() // 54c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -106767,7 +106767,7 @@ dbcc5: goto dbcc4; } -void m68000_device::scc_ais_ifm() // 54d0 fff8 +void m68000_mcu_device::scc_ais_ifm() // 54d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -106878,7 +106878,7 @@ morw2: return; } -void m68000_device::scc_aips_ifm() // 54d8 fff8 +void m68000_mcu_device::scc_aips_ifm() // 54d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -106994,7 +106994,7 @@ morw2: return; } -void m68000_device::scc_pais_ifm() // 54e0 fff8 +void m68000_mcu_device::scc_pais_ifm() // 54e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -107112,7 +107112,7 @@ morw2: return; } -void m68000_device::scc_das_ifm() // 54e8 fff8 +void m68000_mcu_device::scc_das_ifm() // 54e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -107246,7 +107246,7 @@ morw2: return; } -void m68000_device::scc_dais_ifm() // 54f0 fff8 +void m68000_mcu_device::scc_dais_ifm() // 54f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -107420,7 +107420,7 @@ morw2: return; } -void m68000_device::scc_adr16_ifm() // 54f8 ffff +void m68000_mcu_device::scc_adr16_ifm() // 54f8 ffff { // 00a abwl1 m_aob = m_au; @@ -107553,7 +107553,7 @@ morw2: return; } -void m68000_device::scc_adr32_ifm() // 54f9 ffff +void m68000_mcu_device::scc_adr32_ifm() // 54f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -107708,7 +107708,7 @@ morw2: return; } -void m68000_device::scs_ds_ifm() // 55c0 fff8 +void m68000_mcu_device::scs_ds_ifm() // 55c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -107789,7 +107789,7 @@ sccr2: return; } -void m68000_device::dbcs_ds_rel16_ifm() // 55c8 fff8 +void m68000_mcu_device::dbcs_ds_rel16_ifm() // 55c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -107968,7 +107968,7 @@ dbcc5: goto dbcc4; } -void m68000_device::scs_ais_ifm() // 55d0 fff8 +void m68000_mcu_device::scs_ais_ifm() // 55d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -108079,7 +108079,7 @@ morw2: return; } -void m68000_device::scs_aips_ifm() // 55d8 fff8 +void m68000_mcu_device::scs_aips_ifm() // 55d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -108195,7 +108195,7 @@ morw2: return; } -void m68000_device::scs_pais_ifm() // 55e0 fff8 +void m68000_mcu_device::scs_pais_ifm() // 55e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -108313,7 +108313,7 @@ morw2: return; } -void m68000_device::scs_das_ifm() // 55e8 fff8 +void m68000_mcu_device::scs_das_ifm() // 55e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -108447,7 +108447,7 @@ morw2: return; } -void m68000_device::scs_dais_ifm() // 55f0 fff8 +void m68000_mcu_device::scs_dais_ifm() // 55f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -108621,7 +108621,7 @@ morw2: return; } -void m68000_device::scs_adr16_ifm() // 55f8 ffff +void m68000_mcu_device::scs_adr16_ifm() // 55f8 ffff { // 00a abwl1 m_aob = m_au; @@ -108754,7 +108754,7 @@ morw2: return; } -void m68000_device::scs_adr32_ifm() // 55f9 ffff +void m68000_mcu_device::scs_adr32_ifm() // 55f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -108909,7 +108909,7 @@ morw2: return; } -void m68000_device::sne_ds_ifm() // 56c0 fff8 +void m68000_mcu_device::sne_ds_ifm() // 56c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -108990,7 +108990,7 @@ sccr2: return; } -void m68000_device::dbne_ds_rel16_ifm() // 56c8 fff8 +void m68000_mcu_device::dbne_ds_rel16_ifm() // 56c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -109169,7 +109169,7 @@ dbcc5: goto dbcc4; } -void m68000_device::sne_ais_ifm() // 56d0 fff8 +void m68000_mcu_device::sne_ais_ifm() // 56d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -109280,7 +109280,7 @@ morw2: return; } -void m68000_device::sne_aips_ifm() // 56d8 fff8 +void m68000_mcu_device::sne_aips_ifm() // 56d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -109396,7 +109396,7 @@ morw2: return; } -void m68000_device::sne_pais_ifm() // 56e0 fff8 +void m68000_mcu_device::sne_pais_ifm() // 56e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -109514,7 +109514,7 @@ morw2: return; } -void m68000_device::sne_das_ifm() // 56e8 fff8 +void m68000_mcu_device::sne_das_ifm() // 56e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -109648,7 +109648,7 @@ morw2: return; } -void m68000_device::sne_dais_ifm() // 56f0 fff8 +void m68000_mcu_device::sne_dais_ifm() // 56f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -109822,7 +109822,7 @@ morw2: return; } -void m68000_device::sne_adr16_ifm() // 56f8 ffff +void m68000_mcu_device::sne_adr16_ifm() // 56f8 ffff { // 00a abwl1 m_aob = m_au; @@ -109955,7 +109955,7 @@ morw2: return; } -void m68000_device::sne_adr32_ifm() // 56f9 ffff +void m68000_mcu_device::sne_adr32_ifm() // 56f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -110110,7 +110110,7 @@ morw2: return; } -void m68000_device::seq_ds_ifm() // 57c0 fff8 +void m68000_mcu_device::seq_ds_ifm() // 57c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -110191,7 +110191,7 @@ sccr2: return; } -void m68000_device::dbeq_ds_rel16_ifm() // 57c8 fff8 +void m68000_mcu_device::dbeq_ds_rel16_ifm() // 57c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -110370,7 +110370,7 @@ dbcc5: goto dbcc4; } -void m68000_device::seq_ais_ifm() // 57d0 fff8 +void m68000_mcu_device::seq_ais_ifm() // 57d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -110481,7 +110481,7 @@ morw2: return; } -void m68000_device::seq_aips_ifm() // 57d8 fff8 +void m68000_mcu_device::seq_aips_ifm() // 57d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -110597,7 +110597,7 @@ morw2: return; } -void m68000_device::seq_pais_ifm() // 57e0 fff8 +void m68000_mcu_device::seq_pais_ifm() // 57e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -110715,7 +110715,7 @@ morw2: return; } -void m68000_device::seq_das_ifm() // 57e8 fff8 +void m68000_mcu_device::seq_das_ifm() // 57e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -110849,7 +110849,7 @@ morw2: return; } -void m68000_device::seq_dais_ifm() // 57f0 fff8 +void m68000_mcu_device::seq_dais_ifm() // 57f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -111023,7 +111023,7 @@ morw2: return; } -void m68000_device::seq_adr16_ifm() // 57f8 ffff +void m68000_mcu_device::seq_adr16_ifm() // 57f8 ffff { // 00a abwl1 m_aob = m_au; @@ -111156,7 +111156,7 @@ morw2: return; } -void m68000_device::seq_adr32_ifm() // 57f9 ffff +void m68000_mcu_device::seq_adr32_ifm() // 57f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -111311,7 +111311,7 @@ morw2: return; } -void m68000_device::svc_ds_ifm() // 58c0 fff8 +void m68000_mcu_device::svc_ds_ifm() // 58c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -111392,7 +111392,7 @@ sccr2: return; } -void m68000_device::dbvc_ds_rel16_ifm() // 58c8 fff8 +void m68000_mcu_device::dbvc_ds_rel16_ifm() // 58c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -111571,7 +111571,7 @@ dbcc5: goto dbcc4; } -void m68000_device::svc_ais_ifm() // 58d0 fff8 +void m68000_mcu_device::svc_ais_ifm() // 58d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -111682,7 +111682,7 @@ morw2: return; } -void m68000_device::svc_aips_ifm() // 58d8 fff8 +void m68000_mcu_device::svc_aips_ifm() // 58d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -111798,7 +111798,7 @@ morw2: return; } -void m68000_device::svc_pais_ifm() // 58e0 fff8 +void m68000_mcu_device::svc_pais_ifm() // 58e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -111916,7 +111916,7 @@ morw2: return; } -void m68000_device::svc_das_ifm() // 58e8 fff8 +void m68000_mcu_device::svc_das_ifm() // 58e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -112050,7 +112050,7 @@ morw2: return; } -void m68000_device::svc_dais_ifm() // 58f0 fff8 +void m68000_mcu_device::svc_dais_ifm() // 58f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -112224,7 +112224,7 @@ morw2: return; } -void m68000_device::svc_adr16_ifm() // 58f8 ffff +void m68000_mcu_device::svc_adr16_ifm() // 58f8 ffff { // 00a abwl1 m_aob = m_au; @@ -112357,7 +112357,7 @@ morw2: return; } -void m68000_device::svc_adr32_ifm() // 58f9 ffff +void m68000_mcu_device::svc_adr32_ifm() // 58f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -112512,7 +112512,7 @@ morw2: return; } -void m68000_device::svs_ds_ifm() // 59c0 fff8 +void m68000_mcu_device::svs_ds_ifm() // 59c0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -112593,7 +112593,7 @@ sccr2: return; } -void m68000_device::dbvs_ds_rel16_ifm() // 59c8 fff8 +void m68000_mcu_device::dbvs_ds_rel16_ifm() // 59c8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -112772,7 +112772,7 @@ dbcc5: goto dbcc4; } -void m68000_device::svs_ais_ifm() // 59d0 fff8 +void m68000_mcu_device::svs_ais_ifm() // 59d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -112883,7 +112883,7 @@ morw2: return; } -void m68000_device::svs_aips_ifm() // 59d8 fff8 +void m68000_mcu_device::svs_aips_ifm() // 59d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -112999,7 +112999,7 @@ morw2: return; } -void m68000_device::svs_pais_ifm() // 59e0 fff8 +void m68000_mcu_device::svs_pais_ifm() // 59e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -113117,7 +113117,7 @@ morw2: return; } -void m68000_device::svs_das_ifm() // 59e8 fff8 +void m68000_mcu_device::svs_das_ifm() // 59e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -113251,7 +113251,7 @@ morw2: return; } -void m68000_device::svs_dais_ifm() // 59f0 fff8 +void m68000_mcu_device::svs_dais_ifm() // 59f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -113425,7 +113425,7 @@ morw2: return; } -void m68000_device::svs_adr16_ifm() // 59f8 ffff +void m68000_mcu_device::svs_adr16_ifm() // 59f8 ffff { // 00a abwl1 m_aob = m_au; @@ -113558,7 +113558,7 @@ morw2: return; } -void m68000_device::svs_adr32_ifm() // 59f9 ffff +void m68000_mcu_device::svs_adr32_ifm() // 59f9 ffff { // 1e2 abll1 m_aob = m_au; @@ -113713,7 +113713,7 @@ morw2: return; } -void m68000_device::spl_ds_ifm() // 5ac0 fff8 +void m68000_mcu_device::spl_ds_ifm() // 5ac0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -113794,7 +113794,7 @@ sccr2: return; } -void m68000_device::dbpl_ds_rel16_ifm() // 5ac8 fff8 +void m68000_mcu_device::dbpl_ds_rel16_ifm() // 5ac8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -113973,7 +113973,7 @@ dbcc5: goto dbcc4; } -void m68000_device::spl_ais_ifm() // 5ad0 fff8 +void m68000_mcu_device::spl_ais_ifm() // 5ad0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -114084,7 +114084,7 @@ morw2: return; } -void m68000_device::spl_aips_ifm() // 5ad8 fff8 +void m68000_mcu_device::spl_aips_ifm() // 5ad8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -114200,7 +114200,7 @@ morw2: return; } -void m68000_device::spl_pais_ifm() // 5ae0 fff8 +void m68000_mcu_device::spl_pais_ifm() // 5ae0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -114318,7 +114318,7 @@ morw2: return; } -void m68000_device::spl_das_ifm() // 5ae8 fff8 +void m68000_mcu_device::spl_das_ifm() // 5ae8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -114452,7 +114452,7 @@ morw2: return; } -void m68000_device::spl_dais_ifm() // 5af0 fff8 +void m68000_mcu_device::spl_dais_ifm() // 5af0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -114626,7 +114626,7 @@ morw2: return; } -void m68000_device::spl_adr16_ifm() // 5af8 ffff +void m68000_mcu_device::spl_adr16_ifm() // 5af8 ffff { // 00a abwl1 m_aob = m_au; @@ -114759,7 +114759,7 @@ morw2: return; } -void m68000_device::spl_adr32_ifm() // 5af9 ffff +void m68000_mcu_device::spl_adr32_ifm() // 5af9 ffff { // 1e2 abll1 m_aob = m_au; @@ -114914,7 +114914,7 @@ morw2: return; } -void m68000_device::smi_ds_ifm() // 5bc0 fff8 +void m68000_mcu_device::smi_ds_ifm() // 5bc0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -114995,7 +114995,7 @@ sccr2: return; } -void m68000_device::dbmi_ds_rel16_ifm() // 5bc8 fff8 +void m68000_mcu_device::dbmi_ds_rel16_ifm() // 5bc8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -115174,7 +115174,7 @@ dbcc5: goto dbcc4; } -void m68000_device::smi_ais_ifm() // 5bd0 fff8 +void m68000_mcu_device::smi_ais_ifm() // 5bd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -115285,7 +115285,7 @@ morw2: return; } -void m68000_device::smi_aips_ifm() // 5bd8 fff8 +void m68000_mcu_device::smi_aips_ifm() // 5bd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -115401,7 +115401,7 @@ morw2: return; } -void m68000_device::smi_pais_ifm() // 5be0 fff8 +void m68000_mcu_device::smi_pais_ifm() // 5be0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -115519,7 +115519,7 @@ morw2: return; } -void m68000_device::smi_das_ifm() // 5be8 fff8 +void m68000_mcu_device::smi_das_ifm() // 5be8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -115653,7 +115653,7 @@ morw2: return; } -void m68000_device::smi_dais_ifm() // 5bf0 fff8 +void m68000_mcu_device::smi_dais_ifm() // 5bf0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -115827,7 +115827,7 @@ morw2: return; } -void m68000_device::smi_adr16_ifm() // 5bf8 ffff +void m68000_mcu_device::smi_adr16_ifm() // 5bf8 ffff { // 00a abwl1 m_aob = m_au; @@ -115960,7 +115960,7 @@ morw2: return; } -void m68000_device::smi_adr32_ifm() // 5bf9 ffff +void m68000_mcu_device::smi_adr32_ifm() // 5bf9 ffff { // 1e2 abll1 m_aob = m_au; @@ -116115,7 +116115,7 @@ morw2: return; } -void m68000_device::sge_ds_ifm() // 5cc0 fff8 +void m68000_mcu_device::sge_ds_ifm() // 5cc0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -116196,7 +116196,7 @@ sccr2: return; } -void m68000_device::dbge_ds_rel16_ifm() // 5cc8 fff8 +void m68000_mcu_device::dbge_ds_rel16_ifm() // 5cc8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -116375,7 +116375,7 @@ dbcc5: goto dbcc4; } -void m68000_device::sge_ais_ifm() // 5cd0 fff8 +void m68000_mcu_device::sge_ais_ifm() // 5cd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -116486,7 +116486,7 @@ morw2: return; } -void m68000_device::sge_aips_ifm() // 5cd8 fff8 +void m68000_mcu_device::sge_aips_ifm() // 5cd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -116602,7 +116602,7 @@ morw2: return; } -void m68000_device::sge_pais_ifm() // 5ce0 fff8 +void m68000_mcu_device::sge_pais_ifm() // 5ce0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -116720,7 +116720,7 @@ morw2: return; } -void m68000_device::sge_das_ifm() // 5ce8 fff8 +void m68000_mcu_device::sge_das_ifm() // 5ce8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -116854,7 +116854,7 @@ morw2: return; } -void m68000_device::sge_dais_ifm() // 5cf0 fff8 +void m68000_mcu_device::sge_dais_ifm() // 5cf0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -117028,7 +117028,7 @@ morw2: return; } -void m68000_device::sge_adr16_ifm() // 5cf8 ffff +void m68000_mcu_device::sge_adr16_ifm() // 5cf8 ffff { // 00a abwl1 m_aob = m_au; @@ -117161,7 +117161,7 @@ morw2: return; } -void m68000_device::sge_adr32_ifm() // 5cf9 ffff +void m68000_mcu_device::sge_adr32_ifm() // 5cf9 ffff { // 1e2 abll1 m_aob = m_au; @@ -117316,7 +117316,7 @@ morw2: return; } -void m68000_device::slt_ds_ifm() // 5dc0 fff8 +void m68000_mcu_device::slt_ds_ifm() // 5dc0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -117397,7 +117397,7 @@ sccr2: return; } -void m68000_device::dblt_ds_rel16_ifm() // 5dc8 fff8 +void m68000_mcu_device::dblt_ds_rel16_ifm() // 5dc8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -117576,7 +117576,7 @@ dbcc5: goto dbcc4; } -void m68000_device::slt_ais_ifm() // 5dd0 fff8 +void m68000_mcu_device::slt_ais_ifm() // 5dd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -117687,7 +117687,7 @@ morw2: return; } -void m68000_device::slt_aips_ifm() // 5dd8 fff8 +void m68000_mcu_device::slt_aips_ifm() // 5dd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -117803,7 +117803,7 @@ morw2: return; } -void m68000_device::slt_pais_ifm() // 5de0 fff8 +void m68000_mcu_device::slt_pais_ifm() // 5de0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -117921,7 +117921,7 @@ morw2: return; } -void m68000_device::slt_das_ifm() // 5de8 fff8 +void m68000_mcu_device::slt_das_ifm() // 5de8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -118055,7 +118055,7 @@ morw2: return; } -void m68000_device::slt_dais_ifm() // 5df0 fff8 +void m68000_mcu_device::slt_dais_ifm() // 5df0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -118229,7 +118229,7 @@ morw2: return; } -void m68000_device::slt_adr16_ifm() // 5df8 ffff +void m68000_mcu_device::slt_adr16_ifm() // 5df8 ffff { // 00a abwl1 m_aob = m_au; @@ -118362,7 +118362,7 @@ morw2: return; } -void m68000_device::slt_adr32_ifm() // 5df9 ffff +void m68000_mcu_device::slt_adr32_ifm() // 5df9 ffff { // 1e2 abll1 m_aob = m_au; @@ -118517,7 +118517,7 @@ morw2: return; } -void m68000_device::sgt_ds_ifm() // 5ec0 fff8 +void m68000_mcu_device::sgt_ds_ifm() // 5ec0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -118598,7 +118598,7 @@ sccr2: return; } -void m68000_device::dbgt_ds_rel16_ifm() // 5ec8 fff8 +void m68000_mcu_device::dbgt_ds_rel16_ifm() // 5ec8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -118777,7 +118777,7 @@ dbcc5: goto dbcc4; } -void m68000_device::sgt_ais_ifm() // 5ed0 fff8 +void m68000_mcu_device::sgt_ais_ifm() // 5ed0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -118888,7 +118888,7 @@ morw2: return; } -void m68000_device::sgt_aips_ifm() // 5ed8 fff8 +void m68000_mcu_device::sgt_aips_ifm() // 5ed8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -119004,7 +119004,7 @@ morw2: return; } -void m68000_device::sgt_pais_ifm() // 5ee0 fff8 +void m68000_mcu_device::sgt_pais_ifm() // 5ee0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -119122,7 +119122,7 @@ morw2: return; } -void m68000_device::sgt_das_ifm() // 5ee8 fff8 +void m68000_mcu_device::sgt_das_ifm() // 5ee8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -119256,7 +119256,7 @@ morw2: return; } -void m68000_device::sgt_dais_ifm() // 5ef0 fff8 +void m68000_mcu_device::sgt_dais_ifm() // 5ef0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -119430,7 +119430,7 @@ morw2: return; } -void m68000_device::sgt_adr16_ifm() // 5ef8 ffff +void m68000_mcu_device::sgt_adr16_ifm() // 5ef8 ffff { // 00a abwl1 m_aob = m_au; @@ -119563,7 +119563,7 @@ morw2: return; } -void m68000_device::sgt_adr32_ifm() // 5ef9 ffff +void m68000_mcu_device::sgt_adr32_ifm() // 5ef9 ffff { // 1e2 abll1 m_aob = m_au; @@ -119718,7 +119718,7 @@ morw2: return; } -void m68000_device::sle_ds_ifm() // 5fc0 fff8 +void m68000_mcu_device::sle_ds_ifm() // 5fc0 fff8 { int ry = m_irdi & 7; // 384 sccr1 @@ -119799,7 +119799,7 @@ sccr2: return; } -void m68000_device::dble_ds_rel16_ifm() // 5fc8 fff8 +void m68000_mcu_device::dble_ds_rel16_ifm() // 5fc8 fff8 { int ry = m_irdi & 7; // 06c dbcc1 @@ -119978,7 +119978,7 @@ dbcc5: goto dbcc4; } -void m68000_device::sle_ais_ifm() // 5fd0 fff8 +void m68000_mcu_device::sle_ais_ifm() // 5fd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 006 adrw1 @@ -120089,7 +120089,7 @@ morw2: return; } -void m68000_device::sle_aips_ifm() // 5fd8 fff8 +void m68000_mcu_device::sle_aips_ifm() // 5fd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 21c pinw1 @@ -120205,7 +120205,7 @@ morw2: return; } -void m68000_device::sle_pais_ifm() // 5fe0 fff8 +void m68000_mcu_device::sle_pais_ifm() // 5fe0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 103 pdcw1 @@ -120323,7 +120323,7 @@ morw2: return; } -void m68000_device::sle_das_ifm() // 5fe8 fff8 +void m68000_mcu_device::sle_das_ifm() // 5fe8 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1c2 adsw1 @@ -120457,7 +120457,7 @@ morw2: return; } -void m68000_device::sle_dais_ifm() // 5ff0 fff8 +void m68000_mcu_device::sle_dais_ifm() // 5ff0 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 1e3 aixl0 @@ -120631,7 +120631,7 @@ morw2: return; } -void m68000_device::sle_adr16_ifm() // 5ff8 ffff +void m68000_mcu_device::sle_adr16_ifm() // 5ff8 ffff { // 00a abwl1 m_aob = m_au; @@ -120764,7 +120764,7 @@ morw2: return; } -void m68000_device::sle_adr32_ifm() // 5ff9 ffff +void m68000_mcu_device::sle_adr32_ifm() // 5ff9 ffff { // 1e2 abll1 m_aob = m_au; @@ -120919,7 +120919,7 @@ morw2: return; } -void m68000_device::bra_rel16_ifm() // 6000 ffff +void m68000_mcu_device::bra_rel16_ifm() // 6000 ffff { // 068 bbcw1 m_t = 1; @@ -121020,7 +121020,7 @@ b: return; } -void m68000_device::bra_rel8_ifm() // 6000 ff00 +void m68000_mcu_device::bra_rel8_ifm() // 6000 ff00 { // 308 bbci1 m_t = 1; @@ -121097,7 +121097,7 @@ b: return; } -void m68000_device::bsr_rel16_ifm() // 6100 ffff +void m68000_mcu_device::bsr_rel16_ifm() // 6100 ffff { // 0a9 bsrw1 m_at = m_au; @@ -121203,7 +121203,7 @@ void m68000_device::bsr_rel16_ifm() // 6100 ffff return; } -void m68000_device::bsr_rel8_ifm() // 6100 ff00 +void m68000_mcu_device::bsr_rel8_ifm() // 6100 ff00 { // 089 bsri1 m_at = m_pc; @@ -121309,7 +121309,7 @@ void m68000_device::bsr_rel8_ifm() // 6100 ff00 return; } -void m68000_device::bhi_rel16_ifm() // 6200 ffff +void m68000_mcu_device::bhi_rel16_ifm() // 6200 ffff { // 068 bbcw1 m_t = (m_sr & (SR_C|SR_Z)) == 0; @@ -121410,7 +121410,7 @@ b: return; } -void m68000_device::bhi_rel8_ifm() // 6200 ff00 +void m68000_mcu_device::bhi_rel8_ifm() // 6200 ff00 { // 308 bbci1 m_t = (m_sr & (SR_C|SR_Z)) == 0; @@ -121487,7 +121487,7 @@ b: return; } -void m68000_device::bls_rel16_ifm() // 6300 ffff +void m68000_mcu_device::bls_rel16_ifm() // 6300 ffff { // 068 bbcw1 m_t = (m_sr & (SR_C|SR_Z)) != 0; @@ -121588,7 +121588,7 @@ b: return; } -void m68000_device::bls_rel8_ifm() // 6300 ff00 +void m68000_mcu_device::bls_rel8_ifm() // 6300 ff00 { // 308 bbci1 m_t = (m_sr & (SR_C|SR_Z)) != 0; @@ -121665,7 +121665,7 @@ b: return; } -void m68000_device::bcc_rel16_ifm() // 6400 ffff +void m68000_mcu_device::bcc_rel16_ifm() // 6400 ffff { // 068 bbcw1 m_t = !(m_sr & SR_C); @@ -121766,7 +121766,7 @@ b: return; } -void m68000_device::bcc_rel8_ifm() // 6400 ff00 +void m68000_mcu_device::bcc_rel8_ifm() // 6400 ff00 { // 308 bbci1 m_t = !(m_sr & SR_C); @@ -121843,7 +121843,7 @@ b: return; } -void m68000_device::bcs_rel16_ifm() // 6500 ffff +void m68000_mcu_device::bcs_rel16_ifm() // 6500 ffff { // 068 bbcw1 m_t = m_sr & SR_C; @@ -121944,7 +121944,7 @@ b: return; } -void m68000_device::bcs_rel8_ifm() // 6500 ff00 +void m68000_mcu_device::bcs_rel8_ifm() // 6500 ff00 { // 308 bbci1 m_t = m_sr & SR_C; @@ -122021,7 +122021,7 @@ b: return; } -void m68000_device::bne_rel16_ifm() // 6600 ffff +void m68000_mcu_device::bne_rel16_ifm() // 6600 ffff { // 068 bbcw1 m_t = !(m_sr & SR_Z); @@ -122122,7 +122122,7 @@ b: return; } -void m68000_device::bne_rel8_ifm() // 6600 ff00 +void m68000_mcu_device::bne_rel8_ifm() // 6600 ff00 { // 308 bbci1 m_t = !(m_sr & SR_Z); @@ -122199,7 +122199,7 @@ b: return; } -void m68000_device::beq_rel16_ifm() // 6700 ffff +void m68000_mcu_device::beq_rel16_ifm() // 6700 ffff { // 068 bbcw1 m_t = m_sr & SR_Z; @@ -122300,7 +122300,7 @@ b: return; } -void m68000_device::beq_rel8_ifm() // 6700 ff00 +void m68000_mcu_device::beq_rel8_ifm() // 6700 ff00 { // 308 bbci1 m_t = m_sr & SR_Z; @@ -122377,7 +122377,7 @@ b: return; } -void m68000_device::bvc_rel16_ifm() // 6800 ffff +void m68000_mcu_device::bvc_rel16_ifm() // 6800 ffff { // 068 bbcw1 m_t = !(m_sr & SR_V); @@ -122478,7 +122478,7 @@ b: return; } -void m68000_device::bvc_rel8_ifm() // 6800 ff00 +void m68000_mcu_device::bvc_rel8_ifm() // 6800 ff00 { // 308 bbci1 m_t = !(m_sr & SR_V); @@ -122555,7 +122555,7 @@ b: return; } -void m68000_device::bvs_rel16_ifm() // 6900 ffff +void m68000_mcu_device::bvs_rel16_ifm() // 6900 ffff { // 068 bbcw1 m_t = m_sr & SR_V; @@ -122656,7 +122656,7 @@ b: return; } -void m68000_device::bvs_rel8_ifm() // 6900 ff00 +void m68000_mcu_device::bvs_rel8_ifm() // 6900 ff00 { // 308 bbci1 m_t = m_sr & SR_V; @@ -122733,7 +122733,7 @@ b: return; } -void m68000_device::bpl_rel16_ifm() // 6a00 ffff +void m68000_mcu_device::bpl_rel16_ifm() // 6a00 ffff { // 068 bbcw1 m_t = !(m_sr & SR_N); @@ -122834,7 +122834,7 @@ b: return; } -void m68000_device::bpl_rel8_ifm() // 6a00 ff00 +void m68000_mcu_device::bpl_rel8_ifm() // 6a00 ff00 { // 308 bbci1 m_t = !(m_sr & SR_N); @@ -122911,7 +122911,7 @@ b: return; } -void m68000_device::bmi_rel16_ifm() // 6b00 ffff +void m68000_mcu_device::bmi_rel16_ifm() // 6b00 ffff { // 068 bbcw1 m_t = m_sr & SR_N; @@ -123012,7 +123012,7 @@ b: return; } -void m68000_device::bmi_rel8_ifm() // 6b00 ff00 +void m68000_mcu_device::bmi_rel8_ifm() // 6b00 ff00 { // 308 bbci1 m_t = m_sr & SR_N; @@ -123089,7 +123089,7 @@ b: return; } -void m68000_device::bge_rel16_ifm() // 6c00 ffff +void m68000_mcu_device::bge_rel16_ifm() // 6c00 ffff { // 068 bbcw1 m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); @@ -123190,7 +123190,7 @@ b: return; } -void m68000_device::bge_rel8_ifm() // 6c00 ff00 +void m68000_mcu_device::bge_rel8_ifm() // 6c00 ff00 { // 308 bbci1 m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); @@ -123267,7 +123267,7 @@ b: return; } -void m68000_device::blt_rel16_ifm() // 6d00 ffff +void m68000_mcu_device::blt_rel16_ifm() // 6d00 ffff { // 068 bbcw1 m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); @@ -123368,7 +123368,7 @@ b: return; } -void m68000_device::blt_rel8_ifm() // 6d00 ff00 +void m68000_mcu_device::blt_rel8_ifm() // 6d00 ff00 { // 308 bbci1 m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); @@ -123445,7 +123445,7 @@ b: return; } -void m68000_device::bgt_rel16_ifm() // 6e00 ffff +void m68000_mcu_device::bgt_rel16_ifm() // 6e00 ffff { // 068 bbcw1 m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); @@ -123546,7 +123546,7 @@ b: return; } -void m68000_device::bgt_rel8_ifm() // 6e00 ff00 +void m68000_mcu_device::bgt_rel8_ifm() // 6e00 ff00 { // 308 bbci1 m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); @@ -123623,7 +123623,7 @@ b: return; } -void m68000_device::ble_rel16_ifm() // 6f00 ffff +void m68000_mcu_device::ble_rel16_ifm() // 6f00 ffff { // 068 bbcw1 m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); @@ -123724,7 +123724,7 @@ b: return; } -void m68000_device::ble_rel8_ifm() // 6f00 ff00 +void m68000_mcu_device::ble_rel8_ifm() // 6f00 ff00 { // 308 bbci1 m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); @@ -123801,7 +123801,7 @@ b: return; } -void m68000_device::moveq_imm8o_dd_ifm() // 7000 f100 +void m68000_mcu_device::moveq_imm8o_dd_ifm() // 7000 f100 { int rx = (m_irdi >> 9) & 7; // 23b rlql1 @@ -123841,7 +123841,7 @@ void m68000_device::moveq_imm8o_dd_ifm() // 7000 f100 return; } -void m68000_device::or_b_ds_dd_ifm() // 8000 f1f8 +void m68000_mcu_device::or_b_ds_dd_ifm() // 8000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -123884,7 +123884,7 @@ void m68000_device::or_b_ds_dd_ifm() // 8000 f1f8 return; } -void m68000_device::or_b_ais_dd_ifm() // 8010 f1f8 +void m68000_mcu_device::or_b_ais_dd_ifm() // 8010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -123949,7 +123949,7 @@ void m68000_device::or_b_ais_dd_ifm() // 8010 f1f8 return; } -void m68000_device::or_b_aips_dd_ifm() // 8018 f1f8 +void m68000_mcu_device::or_b_aips_dd_ifm() // 8018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -124019,7 +124019,7 @@ void m68000_device::or_b_aips_dd_ifm() // 8018 f1f8 return; } -void m68000_device::or_b_pais_dd_ifm() // 8020 f1f8 +void m68000_mcu_device::or_b_pais_dd_ifm() // 8020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -124091,7 +124091,7 @@ void m68000_device::or_b_pais_dd_ifm() // 8020 f1f8 return; } -void m68000_device::or_b_das_dd_ifm() // 8028 f1f8 +void m68000_mcu_device::or_b_das_dd_ifm() // 8028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -124179,7 +124179,7 @@ void m68000_device::or_b_das_dd_ifm() // 8028 f1f8 return; } -void m68000_device::or_b_dais_dd_ifm() // 8030 f1f8 +void m68000_mcu_device::or_b_dais_dd_ifm() // 8030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -124307,7 +124307,7 @@ adsw2: return; } -void m68000_device::or_b_adr16_dd_ifm() // 8038 f1ff +void m68000_mcu_device::or_b_adr16_dd_ifm() // 8038 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -124394,7 +124394,7 @@ void m68000_device::or_b_adr16_dd_ifm() // 8038 f1ff return; } -void m68000_device::or_b_adr32_dd_ifm() // 8039 f1ff +void m68000_mcu_device::or_b_adr32_dd_ifm() // 8039 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -124503,7 +124503,7 @@ void m68000_device::or_b_adr32_dd_ifm() // 8039 f1ff return; } -void m68000_device::or_b_dpc_dd_ifm() // 803a f1ff +void m68000_mcu_device::or_b_dpc_dd_ifm() // 803a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -124590,7 +124590,7 @@ void m68000_device::or_b_dpc_dd_ifm() // 803a f1ff return; } -void m68000_device::or_b_dpci_dd_ifm() // 803b f1ff +void m68000_mcu_device::or_b_dpci_dd_ifm() // 803b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -124717,7 +124717,7 @@ adsw2: return; } -void m68000_device::or_b_imm8_dd_ifm() // 803c f1ff +void m68000_mcu_device::or_b_imm8_dd_ifm() // 803c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -124784,7 +124784,7 @@ void m68000_device::or_b_imm8_dd_ifm() // 803c f1ff return; } -void m68000_device::or_w_ds_dd_ifm() // 8040 f1f8 +void m68000_mcu_device::or_w_ds_dd_ifm() // 8040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -124827,7 +124827,7 @@ void m68000_device::or_w_ds_dd_ifm() // 8040 f1f8 return; } -void m68000_device::or_w_ais_dd_ifm() // 8050 f1f8 +void m68000_mcu_device::or_w_ais_dd_ifm() // 8050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -124895,7 +124895,7 @@ void m68000_device::or_w_ais_dd_ifm() // 8050 f1f8 return; } -void m68000_device::or_w_aips_dd_ifm() // 8058 f1f8 +void m68000_mcu_device::or_w_aips_dd_ifm() // 8058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -124968,7 +124968,7 @@ void m68000_device::or_w_aips_dd_ifm() // 8058 f1f8 return; } -void m68000_device::or_w_pais_dd_ifm() // 8060 f1f8 +void m68000_mcu_device::or_w_pais_dd_ifm() // 8060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -125043,7 +125043,7 @@ void m68000_device::or_w_pais_dd_ifm() // 8060 f1f8 return; } -void m68000_device::or_w_das_dd_ifm() // 8068 f1f8 +void m68000_mcu_device::or_w_das_dd_ifm() // 8068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -125134,7 +125134,7 @@ void m68000_device::or_w_das_dd_ifm() // 8068 f1f8 return; } -void m68000_device::or_w_dais_dd_ifm() // 8070 f1f8 +void m68000_mcu_device::or_w_dais_dd_ifm() // 8070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -125265,7 +125265,7 @@ adsw2: return; } -void m68000_device::or_w_adr16_dd_ifm() // 8078 f1ff +void m68000_mcu_device::or_w_adr16_dd_ifm() // 8078 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -125355,7 +125355,7 @@ void m68000_device::or_w_adr16_dd_ifm() // 8078 f1ff return; } -void m68000_device::or_w_adr32_dd_ifm() // 8079 f1ff +void m68000_mcu_device::or_w_adr32_dd_ifm() // 8079 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -125467,7 +125467,7 @@ void m68000_device::or_w_adr32_dd_ifm() // 8079 f1ff return; } -void m68000_device::or_w_dpc_dd_ifm() // 807a f1ff +void m68000_mcu_device::or_w_dpc_dd_ifm() // 807a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -125557,7 +125557,7 @@ void m68000_device::or_w_dpc_dd_ifm() // 807a f1ff return; } -void m68000_device::or_w_dpci_dd_ifm() // 807b f1ff +void m68000_mcu_device::or_w_dpci_dd_ifm() // 807b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -125687,7 +125687,7 @@ adsw2: return; } -void m68000_device::or_w_imm16_dd_ifm() // 807c f1ff +void m68000_mcu_device::or_w_imm16_dd_ifm() // 807c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -125754,7 +125754,7 @@ void m68000_device::or_w_imm16_dd_ifm() // 807c f1ff return; } -void m68000_device::or_l_ds_dd_ifm() // 8080 f1f8 +void m68000_mcu_device::or_l_ds_dd_ifm() // 8080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -125806,7 +125806,7 @@ void m68000_device::or_l_ds_dd_ifm() // 8080 f1f8 return; } -void m68000_device::or_l_ais_dd_ifm() // 8090 f1f8 +void m68000_mcu_device::or_l_ais_dd_ifm() // 8090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -125901,7 +125901,7 @@ void m68000_device::or_l_ais_dd_ifm() // 8090 f1f8 return; } -void m68000_device::or_l_aips_dd_ifm() // 8098 f1f8 +void m68000_mcu_device::or_l_aips_dd_ifm() // 8098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -126000,7 +126000,7 @@ void m68000_device::or_l_aips_dd_ifm() // 8098 f1f8 return; } -void m68000_device::or_l_pais_dd_ifm() // 80a0 f1f8 +void m68000_mcu_device::or_l_pais_dd_ifm() // 80a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -126100,7 +126100,7 @@ void m68000_device::or_l_pais_dd_ifm() // 80a0 f1f8 return; } -void m68000_device::or_l_das_dd_ifm() // 80a8 f1f8 +void m68000_mcu_device::or_l_das_dd_ifm() // 80a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -126217,7 +126217,7 @@ void m68000_device::or_l_das_dd_ifm() // 80a8 f1f8 return; } -void m68000_device::or_l_dais_dd_ifm() // 80b0 f1f8 +void m68000_mcu_device::or_l_dais_dd_ifm() // 80b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -126374,7 +126374,7 @@ adsl2: return; } -void m68000_device::or_l_adr16_dd_ifm() // 80b8 f1ff +void m68000_mcu_device::or_l_adr16_dd_ifm() // 80b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -126494,7 +126494,7 @@ void m68000_device::or_l_adr16_dd_ifm() // 80b8 f1ff return; } -void m68000_device::or_l_adr32_dd_ifm() // 80b9 f1ff +void m68000_mcu_device::or_l_adr32_dd_ifm() // 80b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -126636,7 +126636,7 @@ void m68000_device::or_l_adr32_dd_ifm() // 80b9 f1ff return; } -void m68000_device::or_l_dpc_dd_ifm() // 80ba f1ff +void m68000_mcu_device::or_l_dpc_dd_ifm() // 80ba f1ff { int rx = (m_irdi >> 9) & 7; // 1c6 adsl1 @@ -126752,7 +126752,7 @@ void m68000_device::or_l_dpc_dd_ifm() // 80ba f1ff return; } -void m68000_device::or_l_dpci_dd_ifm() // 80bb f1ff +void m68000_mcu_device::or_l_dpci_dd_ifm() // 80bb f1ff { int rx = (m_irdi >> 9) & 7; // 1e7 aixw0 @@ -126908,7 +126908,7 @@ adsl2: return; } -void m68000_device::or_l_imm32_dd_ifm() // 80bc f1ff +void m68000_mcu_device::or_l_imm32_dd_ifm() // 80bc f1ff { int rx = (m_irdi >> 9) & 7; // 0a7 e#l1 @@ -127006,7 +127006,7 @@ void m68000_device::or_l_imm32_dd_ifm() // 80bc f1ff return; } -void m68000_device::divu_w_ds_dd_ifm() // 80c0 f1f8 +void m68000_mcu_device::divu_w_ds_dd_ifm() // 80c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -127386,7 +127386,7 @@ dvum0: return; } -void m68000_device::divu_w_ais_dd_ifm() // 80d0 f1f8 +void m68000_mcu_device::divu_w_ais_dd_ifm() // 80d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -127790,7 +127790,7 @@ dvum0: return; } -void m68000_device::divu_w_aips_dd_ifm() // 80d8 f1f8 +void m68000_mcu_device::divu_w_aips_dd_ifm() // 80d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -128198,7 +128198,7 @@ dvum0: return; } -void m68000_device::divu_w_pais_dd_ifm() // 80e0 f1f8 +void m68000_mcu_device::divu_w_pais_dd_ifm() // 80e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -128608,7 +128608,7 @@ dvum0: return; } -void m68000_device::divu_w_das_dd_ifm() // 80e8 f1f8 +void m68000_mcu_device::divu_w_das_dd_ifm() // 80e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -129034,7 +129034,7 @@ dvum0: return; } -void m68000_device::divu_w_dais_dd_ifm() // 80f0 f1f8 +void m68000_mcu_device::divu_w_dais_dd_ifm() // 80f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -129498,7 +129498,7 @@ dvum0: return; } -void m68000_device::divu_w_adr16_dd_ifm() // 80f8 f1ff +void m68000_mcu_device::divu_w_adr16_dd_ifm() // 80f8 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -129923,7 +129923,7 @@ dvum0: return; } -void m68000_device::divu_w_adr32_dd_ifm() // 80f9 f1ff +void m68000_mcu_device::divu_w_adr32_dd_ifm() // 80f9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -130369,7 +130369,7 @@ dvum0: return; } -void m68000_device::divu_w_dpc_dd_ifm() // 80fa f1ff +void m68000_mcu_device::divu_w_dpc_dd_ifm() // 80fa f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -130794,7 +130794,7 @@ dvum0: return; } -void m68000_device::divu_w_dpci_dd_ifm() // 80fb f1ff +void m68000_mcu_device::divu_w_dpci_dd_ifm() // 80fb f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -131257,7 +131257,7 @@ dvum0: return; } -void m68000_device::divu_w_imm16_dd_ifm() // 80fc f1ff +void m68000_mcu_device::divu_w_imm16_dd_ifm() // 80fc f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -131660,7 +131660,7 @@ dvum0: return; } -void m68000_device::sbcd_ds_dd_ifm() // 8100 f1f8 +void m68000_mcu_device::sbcd_ds_dd_ifm() // 8100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -131706,7 +131706,7 @@ void m68000_device::sbcd_ds_dd_ifm() // 8100 f1f8 return; } -void m68000_device::sbcd_pais_paid_ifm() // 8108 f1f8 +void m68000_mcu_device::sbcd_pais_paid_ifm() // 8108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -131807,7 +131807,7 @@ void m68000_device::sbcd_pais_paid_ifm() // 8108 f1f8 return; } -void m68000_device::or_b_dd_ais_ifm() // 8110 f1f8 +void m68000_mcu_device::or_b_dd_ais_ifm() // 8110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -131884,7 +131884,7 @@ void m68000_device::or_b_dd_ais_ifm() // 8110 f1f8 return; } -void m68000_device::or_b_dd_aips_ifm() // 8118 f1f8 +void m68000_mcu_device::or_b_dd_aips_ifm() // 8118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -131966,7 +131966,7 @@ void m68000_device::or_b_dd_aips_ifm() // 8118 f1f8 return; } -void m68000_device::or_b_dd_pais_ifm() // 8120 f1f8 +void m68000_mcu_device::or_b_dd_pais_ifm() // 8120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -132050,7 +132050,7 @@ void m68000_device::or_b_dd_pais_ifm() // 8120 f1f8 return; } -void m68000_device::or_b_dd_das_ifm() // 8128 f1f8 +void m68000_mcu_device::or_b_dd_das_ifm() // 8128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -132150,7 +132150,7 @@ void m68000_device::or_b_dd_das_ifm() // 8128 f1f8 return; } -void m68000_device::or_b_dd_dais_ifm() // 8130 f1f8 +void m68000_mcu_device::or_b_dd_dais_ifm() // 8130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -132290,7 +132290,7 @@ adsw2: return; } -void m68000_device::or_b_dd_adr16_ifm() // 8138 f1ff +void m68000_mcu_device::or_b_dd_adr16_ifm() // 8138 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -132389,7 +132389,7 @@ void m68000_device::or_b_dd_adr16_ifm() // 8138 f1ff return; } -void m68000_device::or_b_dd_adr32_ifm() // 8139 f1ff +void m68000_mcu_device::or_b_dd_adr32_ifm() // 8139 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -132510,7 +132510,7 @@ void m68000_device::or_b_dd_adr32_ifm() // 8139 f1ff return; } -void m68000_device::or_w_dd_ais_ifm() // 8150 f1f8 +void m68000_mcu_device::or_w_dd_ais_ifm() // 8150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -132595,7 +132595,7 @@ void m68000_device::or_w_dd_ais_ifm() // 8150 f1f8 return; } -void m68000_device::or_w_dd_aips_ifm() // 8158 f1f8 +void m68000_mcu_device::or_w_dd_aips_ifm() // 8158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -132685,7 +132685,7 @@ void m68000_device::or_w_dd_aips_ifm() // 8158 f1f8 return; } -void m68000_device::or_w_dd_pais_ifm() // 8160 f1f8 +void m68000_mcu_device::or_w_dd_pais_ifm() // 8160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -132777,7 +132777,7 @@ void m68000_device::or_w_dd_pais_ifm() // 8160 f1f8 return; } -void m68000_device::or_w_dd_das_ifm() // 8168 f1f8 +void m68000_mcu_device::or_w_dd_das_ifm() // 8168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -132885,7 +132885,7 @@ void m68000_device::or_w_dd_das_ifm() // 8168 f1f8 return; } -void m68000_device::or_w_dd_dais_ifm() // 8170 f1f8 +void m68000_mcu_device::or_w_dd_dais_ifm() // 8170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -133033,7 +133033,7 @@ adsw2: return; } -void m68000_device::or_w_dd_adr16_ifm() // 8178 f1ff +void m68000_mcu_device::or_w_dd_adr16_ifm() // 8178 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -133140,7 +133140,7 @@ void m68000_device::or_w_dd_adr16_ifm() // 8178 f1ff return; } -void m68000_device::or_w_dd_adr32_ifm() // 8179 f1ff +void m68000_mcu_device::or_w_dd_adr32_ifm() // 8179 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -133269,7 +133269,7 @@ void m68000_device::or_w_dd_adr32_ifm() // 8179 f1ff return; } -void m68000_device::or_l_dd_ais_ifm() // 8190 f1f8 +void m68000_mcu_device::or_l_dd_ais_ifm() // 8190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -133398,7 +133398,7 @@ void m68000_device::or_l_dd_ais_ifm() // 8190 f1f8 return; } -void m68000_device::or_l_dd_aips_ifm() // 8198 f1f8 +void m68000_mcu_device::or_l_dd_aips_ifm() // 8198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -133531,7 +133531,7 @@ void m68000_device::or_l_dd_aips_ifm() // 8198 f1f8 return; } -void m68000_device::or_l_dd_pais_ifm() // 81a0 f1f8 +void m68000_mcu_device::or_l_dd_pais_ifm() // 81a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -133665,7 +133665,7 @@ void m68000_device::or_l_dd_pais_ifm() // 81a0 f1f8 return; } -void m68000_device::or_l_dd_das_ifm() // 81a8 f1f8 +void m68000_mcu_device::or_l_dd_das_ifm() // 81a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -133816,7 +133816,7 @@ void m68000_device::or_l_dd_das_ifm() // 81a8 f1f8 return; } -void m68000_device::or_l_dd_dais_ifm() // 81b0 f1f8 +void m68000_mcu_device::or_l_dd_dais_ifm() // 81b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -134007,7 +134007,7 @@ adsl2: return; } -void m68000_device::or_l_dd_adr16_ifm() // 81b8 f1ff +void m68000_mcu_device::or_l_dd_adr16_ifm() // 81b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -134161,7 +134161,7 @@ void m68000_device::or_l_dd_adr16_ifm() // 81b8 f1ff return; } -void m68000_device::or_l_dd_adr32_ifm() // 81b9 f1ff +void m68000_mcu_device::or_l_dd_adr32_ifm() // 81b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -134337,7 +134337,7 @@ void m68000_device::or_l_dd_adr32_ifm() // 81b9 f1ff return; } -void m68000_device::divs_w_ds_dd_ifm() // 81c0 f1f8 +void m68000_mcu_device::divs_w_ds_dd_ifm() // 81c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -134850,7 +134850,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_ais_dd_ifm() // 81d0 f1f8 +void m68000_mcu_device::divs_w_ais_dd_ifm() // 81d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -135387,7 +135387,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_aips_dd_ifm() // 81d8 f1f8 +void m68000_mcu_device::divs_w_aips_dd_ifm() // 81d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -135928,7 +135928,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_pais_dd_ifm() // 81e0 f1f8 +void m68000_mcu_device::divs_w_pais_dd_ifm() // 81e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -136471,7 +136471,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_das_dd_ifm() // 81e8 f1f8 +void m68000_mcu_device::divs_w_das_dd_ifm() // 81e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -137030,7 +137030,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_dais_dd_ifm() // 81f0 f1f8 +void m68000_mcu_device::divs_w_dais_dd_ifm() // 81f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -137627,7 +137627,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_adr16_dd_ifm() // 81f8 f1ff +void m68000_mcu_device::divs_w_adr16_dd_ifm() // 81f8 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -138185,7 +138185,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_adr32_dd_ifm() // 81f9 f1ff +void m68000_mcu_device::divs_w_adr32_dd_ifm() // 81f9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -138764,7 +138764,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_dpc_dd_ifm() // 81fa f1ff +void m68000_mcu_device::divs_w_dpc_dd_ifm() // 81fa f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -139322,7 +139322,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_dpci_dd_ifm() // 81fb f1ff +void m68000_mcu_device::divs_w_dpci_dd_ifm() // 81fb f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -139918,7 +139918,7 @@ dvs1c: goto leaa2; } -void m68000_device::divs_w_imm16_dd_ifm() // 81fc f1ff +void m68000_mcu_device::divs_w_imm16_dd_ifm() // 81fc f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -140454,7 +140454,7 @@ dvs1c: goto leaa2; } -void m68000_device::sub_b_ds_dd_ifm() // 9000 f1f8 +void m68000_mcu_device::sub_b_ds_dd_ifm() // 9000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -140496,7 +140496,7 @@ void m68000_device::sub_b_ds_dd_ifm() // 9000 f1f8 return; } -void m68000_device::sub_b_ais_dd_ifm() // 9010 f1f8 +void m68000_mcu_device::sub_b_ais_dd_ifm() // 9010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -140559,7 +140559,7 @@ void m68000_device::sub_b_ais_dd_ifm() // 9010 f1f8 return; } -void m68000_device::sub_b_aips_dd_ifm() // 9018 f1f8 +void m68000_mcu_device::sub_b_aips_dd_ifm() // 9018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -140626,7 +140626,7 @@ void m68000_device::sub_b_aips_dd_ifm() // 9018 f1f8 return; } -void m68000_device::sub_b_pais_dd_ifm() // 9020 f1f8 +void m68000_mcu_device::sub_b_pais_dd_ifm() // 9020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -140695,7 +140695,7 @@ void m68000_device::sub_b_pais_dd_ifm() // 9020 f1f8 return; } -void m68000_device::sub_b_das_dd_ifm() // 9028 f1f8 +void m68000_mcu_device::sub_b_das_dd_ifm() // 9028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -140780,7 +140780,7 @@ void m68000_device::sub_b_das_dd_ifm() // 9028 f1f8 return; } -void m68000_device::sub_b_dais_dd_ifm() // 9030 f1f8 +void m68000_mcu_device::sub_b_dais_dd_ifm() // 9030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -140903,7 +140903,7 @@ adsw2: return; } -void m68000_device::sub_b_adr16_dd_ifm() // 9038 f1ff +void m68000_mcu_device::sub_b_adr16_dd_ifm() // 9038 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -140987,7 +140987,7 @@ void m68000_device::sub_b_adr16_dd_ifm() // 9038 f1ff return; } -void m68000_device::sub_b_adr32_dd_ifm() // 9039 f1ff +void m68000_mcu_device::sub_b_adr32_dd_ifm() // 9039 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -141092,7 +141092,7 @@ void m68000_device::sub_b_adr32_dd_ifm() // 9039 f1ff return; } -void m68000_device::sub_b_dpc_dd_ifm() // 903a f1ff +void m68000_mcu_device::sub_b_dpc_dd_ifm() // 903a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -141176,7 +141176,7 @@ void m68000_device::sub_b_dpc_dd_ifm() // 903a f1ff return; } -void m68000_device::sub_b_dpci_dd_ifm() // 903b f1ff +void m68000_mcu_device::sub_b_dpci_dd_ifm() // 903b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -141298,7 +141298,7 @@ adsw2: return; } -void m68000_device::sub_b_imm8_dd_ifm() // 903c f1ff +void m68000_mcu_device::sub_b_imm8_dd_ifm() // 903c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -141363,7 +141363,7 @@ void m68000_device::sub_b_imm8_dd_ifm() // 903c f1ff return; } -void m68000_device::sub_w_ds_dd_ifm() // 9040 f1f8 +void m68000_mcu_device::sub_w_ds_dd_ifm() // 9040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -141405,7 +141405,7 @@ void m68000_device::sub_w_ds_dd_ifm() // 9040 f1f8 return; } -void m68000_device::sub_w_as_dd_ifm() // 9048 f1f8 +void m68000_mcu_device::sub_w_as_dd_ifm() // 9048 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141447,7 +141447,7 @@ void m68000_device::sub_w_as_dd_ifm() // 9048 f1f8 return; } -void m68000_device::sub_w_ais_dd_ifm() // 9050 f1f8 +void m68000_mcu_device::sub_w_ais_dd_ifm() // 9050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141513,7 +141513,7 @@ void m68000_device::sub_w_ais_dd_ifm() // 9050 f1f8 return; } -void m68000_device::sub_w_aips_dd_ifm() // 9058 f1f8 +void m68000_mcu_device::sub_w_aips_dd_ifm() // 9058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141583,7 +141583,7 @@ void m68000_device::sub_w_aips_dd_ifm() // 9058 f1f8 return; } -void m68000_device::sub_w_pais_dd_ifm() // 9060 f1f8 +void m68000_mcu_device::sub_w_pais_dd_ifm() // 9060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141655,7 +141655,7 @@ void m68000_device::sub_w_pais_dd_ifm() // 9060 f1f8 return; } -void m68000_device::sub_w_das_dd_ifm() // 9068 f1f8 +void m68000_mcu_device::sub_w_das_dd_ifm() // 9068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141743,7 +141743,7 @@ void m68000_device::sub_w_das_dd_ifm() // 9068 f1f8 return; } -void m68000_device::sub_w_dais_dd_ifm() // 9070 f1f8 +void m68000_mcu_device::sub_w_dais_dd_ifm() // 9070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141869,7 +141869,7 @@ adsw2: return; } -void m68000_device::sub_w_adr16_dd_ifm() // 9078 f1ff +void m68000_mcu_device::sub_w_adr16_dd_ifm() // 9078 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -141956,7 +141956,7 @@ void m68000_device::sub_w_adr16_dd_ifm() // 9078 f1ff return; } -void m68000_device::sub_w_adr32_dd_ifm() // 9079 f1ff +void m68000_mcu_device::sub_w_adr32_dd_ifm() // 9079 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -142064,7 +142064,7 @@ void m68000_device::sub_w_adr32_dd_ifm() // 9079 f1ff return; } -void m68000_device::sub_w_dpc_dd_ifm() // 907a f1ff +void m68000_mcu_device::sub_w_dpc_dd_ifm() // 907a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -142151,7 +142151,7 @@ void m68000_device::sub_w_dpc_dd_ifm() // 907a f1ff return; } -void m68000_device::sub_w_dpci_dd_ifm() // 907b f1ff +void m68000_mcu_device::sub_w_dpci_dd_ifm() // 907b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -142276,7 +142276,7 @@ adsw2: return; } -void m68000_device::sub_w_imm16_dd_ifm() // 907c f1ff +void m68000_mcu_device::sub_w_imm16_dd_ifm() // 907c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -142341,7 +142341,7 @@ void m68000_device::sub_w_imm16_dd_ifm() // 907c f1ff return; } -void m68000_device::sub_l_ds_dd_ifm() // 9080 f1f8 +void m68000_mcu_device::sub_l_ds_dd_ifm() // 9080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -142391,7 +142391,7 @@ void m68000_device::sub_l_ds_dd_ifm() // 9080 f1f8 return; } -void m68000_device::sub_l_as_dd_ifm() // 9088 f1f8 +void m68000_mcu_device::sub_l_as_dd_ifm() // 9088 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142441,7 +142441,7 @@ void m68000_device::sub_l_as_dd_ifm() // 9088 f1f8 return; } -void m68000_device::sub_l_ais_dd_ifm() // 9090 f1f8 +void m68000_mcu_device::sub_l_ais_dd_ifm() // 9090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142534,7 +142534,7 @@ void m68000_device::sub_l_ais_dd_ifm() // 9090 f1f8 return; } -void m68000_device::sub_l_aips_dd_ifm() // 9098 f1f8 +void m68000_mcu_device::sub_l_aips_dd_ifm() // 9098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142630,7 +142630,7 @@ void m68000_device::sub_l_aips_dd_ifm() // 9098 f1f8 return; } -void m68000_device::sub_l_pais_dd_ifm() // 90a0 f1f8 +void m68000_mcu_device::sub_l_pais_dd_ifm() // 90a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142727,7 +142727,7 @@ void m68000_device::sub_l_pais_dd_ifm() // 90a0 f1f8 return; } -void m68000_device::sub_l_das_dd_ifm() // 90a8 f1f8 +void m68000_mcu_device::sub_l_das_dd_ifm() // 90a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142841,7 +142841,7 @@ void m68000_device::sub_l_das_dd_ifm() // 90a8 f1f8 return; } -void m68000_device::sub_l_dais_dd_ifm() // 90b0 f1f8 +void m68000_mcu_device::sub_l_dais_dd_ifm() // 90b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142993,7 +142993,7 @@ adsl2: return; } -void m68000_device::sub_l_adr16_dd_ifm() // 90b8 f1ff +void m68000_mcu_device::sub_l_adr16_dd_ifm() // 90b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -143109,7 +143109,7 @@ void m68000_device::sub_l_adr16_dd_ifm() // 90b8 f1ff return; } -void m68000_device::sub_l_adr32_dd_ifm() // 90b9 f1ff +void m68000_mcu_device::sub_l_adr32_dd_ifm() // 90b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -143246,7 +143246,7 @@ void m68000_device::sub_l_adr32_dd_ifm() // 90b9 f1ff return; } -void m68000_device::sub_l_dpc_dd_ifm() // 90ba f1ff +void m68000_mcu_device::sub_l_dpc_dd_ifm() // 90ba f1ff { int rx = (m_irdi >> 9) & 7; // 1c6 adsl1 @@ -143359,7 +143359,7 @@ void m68000_device::sub_l_dpc_dd_ifm() // 90ba f1ff return; } -void m68000_device::sub_l_dpci_dd_ifm() // 90bb f1ff +void m68000_mcu_device::sub_l_dpci_dd_ifm() // 90bb f1ff { int rx = (m_irdi >> 9) & 7; // 1e7 aixw0 @@ -143510,7 +143510,7 @@ adsl2: return; } -void m68000_device::sub_l_imm32_dd_ifm() // 90bc f1ff +void m68000_mcu_device::sub_l_imm32_dd_ifm() // 90bc f1ff { int rx = (m_irdi >> 9) & 7; // 0a7 e#l1 @@ -143604,7 +143604,7 @@ void m68000_device::sub_l_imm32_dd_ifm() // 90bc f1ff return; } -void m68000_device::suba_w_ds_ad_ifm() // 90c0 f1f8 +void m68000_mcu_device::suba_w_ds_ad_ifm() // 90c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -143652,7 +143652,7 @@ void m68000_device::suba_w_ds_ad_ifm() // 90c0 f1f8 return; } -void m68000_device::suba_w_as_ad_ifm() // 90c8 f1f8 +void m68000_mcu_device::suba_w_as_ad_ifm() // 90c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -143700,7 +143700,7 @@ void m68000_device::suba_w_as_ad_ifm() // 90c8 f1f8 return; } -void m68000_device::suba_w_ais_ad_ifm() // 90d0 f1f8 +void m68000_mcu_device::suba_w_ais_ad_ifm() // 90d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -143772,7 +143772,7 @@ void m68000_device::suba_w_ais_ad_ifm() // 90d0 f1f8 return; } -void m68000_device::suba_w_aips_ad_ifm() // 90d8 f1f8 +void m68000_mcu_device::suba_w_aips_ad_ifm() // 90d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -143848,7 +143848,7 @@ void m68000_device::suba_w_aips_ad_ifm() // 90d8 f1f8 return; } -void m68000_device::suba_w_pais_ad_ifm() // 90e0 f1f8 +void m68000_mcu_device::suba_w_pais_ad_ifm() // 90e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -143926,7 +143926,7 @@ void m68000_device::suba_w_pais_ad_ifm() // 90e0 f1f8 return; } -void m68000_device::suba_w_das_ad_ifm() // 90e8 f1f8 +void m68000_mcu_device::suba_w_das_ad_ifm() // 90e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -144020,7 +144020,7 @@ void m68000_device::suba_w_das_ad_ifm() // 90e8 f1f8 return; } -void m68000_device::suba_w_dais_ad_ifm() // 90f0 f1f8 +void m68000_mcu_device::suba_w_dais_ad_ifm() // 90f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -144152,7 +144152,7 @@ adsw2: return; } -void m68000_device::suba_w_adr16_ad_ifm() // 90f8 f1ff +void m68000_mcu_device::suba_w_adr16_ad_ifm() // 90f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -144245,7 +144245,7 @@ void m68000_device::suba_w_adr16_ad_ifm() // 90f8 f1ff return; } -void m68000_device::suba_w_adr32_ad_ifm() // 90f9 f1ff +void m68000_mcu_device::suba_w_adr32_ad_ifm() // 90f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -144359,7 +144359,7 @@ void m68000_device::suba_w_adr32_ad_ifm() // 90f9 f1ff return; } -void m68000_device::suba_w_dpc_ad_ifm() // 90fa f1ff +void m68000_mcu_device::suba_w_dpc_ad_ifm() // 90fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -144452,7 +144452,7 @@ void m68000_device::suba_w_dpc_ad_ifm() // 90fa f1ff return; } -void m68000_device::suba_w_dpci_ad_ifm() // 90fb f1ff +void m68000_mcu_device::suba_w_dpci_ad_ifm() // 90fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -144583,7 +144583,7 @@ adsw2: return; } -void m68000_device::suba_w_imm16_ad_ifm() // 90fc f1ff +void m68000_mcu_device::suba_w_imm16_ad_ifm() // 90fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -144654,7 +144654,7 @@ void m68000_device::suba_w_imm16_ad_ifm() // 90fc f1ff return; } -void m68000_device::subx_b_ds_dd_ifm() // 9100 f1f8 +void m68000_mcu_device::subx_b_ds_dd_ifm() // 9100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -144696,7 +144696,7 @@ void m68000_device::subx_b_ds_dd_ifm() // 9100 f1f8 return; } -void m68000_device::subx_b_pais_paid_ifm() // 9108 f1f8 +void m68000_mcu_device::subx_b_pais_paid_ifm() // 9108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -144795,7 +144795,7 @@ void m68000_device::subx_b_pais_paid_ifm() // 9108 f1f8 return; } -void m68000_device::sub_b_dd_ais_ifm() // 9110 f1f8 +void m68000_mcu_device::sub_b_dd_ais_ifm() // 9110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -144870,7 +144870,7 @@ void m68000_device::sub_b_dd_ais_ifm() // 9110 f1f8 return; } -void m68000_device::sub_b_dd_aips_ifm() // 9118 f1f8 +void m68000_mcu_device::sub_b_dd_aips_ifm() // 9118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -144949,7 +144949,7 @@ void m68000_device::sub_b_dd_aips_ifm() // 9118 f1f8 return; } -void m68000_device::sub_b_dd_pais_ifm() // 9120 f1f8 +void m68000_mcu_device::sub_b_dd_pais_ifm() // 9120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145030,7 +145030,7 @@ void m68000_device::sub_b_dd_pais_ifm() // 9120 f1f8 return; } -void m68000_device::sub_b_dd_das_ifm() // 9128 f1f8 +void m68000_mcu_device::sub_b_dd_das_ifm() // 9128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145127,7 +145127,7 @@ void m68000_device::sub_b_dd_das_ifm() // 9128 f1f8 return; } -void m68000_device::sub_b_dd_dais_ifm() // 9130 f1f8 +void m68000_mcu_device::sub_b_dd_dais_ifm() // 9130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145262,7 +145262,7 @@ adsw2: return; } -void m68000_device::sub_b_dd_adr16_ifm() // 9138 f1ff +void m68000_mcu_device::sub_b_dd_adr16_ifm() // 9138 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -145358,7 +145358,7 @@ void m68000_device::sub_b_dd_adr16_ifm() // 9138 f1ff return; } -void m68000_device::sub_b_dd_adr32_ifm() // 9139 f1ff +void m68000_mcu_device::sub_b_dd_adr32_ifm() // 9139 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -145475,7 +145475,7 @@ void m68000_device::sub_b_dd_adr32_ifm() // 9139 f1ff return; } -void m68000_device::subx_w_ds_dd_ifm() // 9140 f1f8 +void m68000_mcu_device::subx_w_ds_dd_ifm() // 9140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -145517,7 +145517,7 @@ void m68000_device::subx_w_ds_dd_ifm() // 9140 f1f8 return; } -void m68000_device::subx_w_pais_paid_ifm() // 9148 f1f8 +void m68000_mcu_device::subx_w_pais_paid_ifm() // 9148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -145627,7 +145627,7 @@ void m68000_device::subx_w_pais_paid_ifm() // 9148 f1f8 return; } -void m68000_device::sub_w_dd_ais_ifm() // 9150 f1f8 +void m68000_mcu_device::sub_w_dd_ais_ifm() // 9150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145710,7 +145710,7 @@ void m68000_device::sub_w_dd_ais_ifm() // 9150 f1f8 return; } -void m68000_device::sub_w_dd_aips_ifm() // 9158 f1f8 +void m68000_mcu_device::sub_w_dd_aips_ifm() // 9158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145797,7 +145797,7 @@ void m68000_device::sub_w_dd_aips_ifm() // 9158 f1f8 return; } -void m68000_device::sub_w_dd_pais_ifm() // 9160 f1f8 +void m68000_mcu_device::sub_w_dd_pais_ifm() // 9160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145886,7 +145886,7 @@ void m68000_device::sub_w_dd_pais_ifm() // 9160 f1f8 return; } -void m68000_device::sub_w_dd_das_ifm() // 9168 f1f8 +void m68000_mcu_device::sub_w_dd_das_ifm() // 9168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145991,7 +145991,7 @@ void m68000_device::sub_w_dd_das_ifm() // 9168 f1f8 return; } -void m68000_device::sub_w_dd_dais_ifm() // 9170 f1f8 +void m68000_mcu_device::sub_w_dd_dais_ifm() // 9170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -146134,7 +146134,7 @@ adsw2: return; } -void m68000_device::sub_w_dd_adr16_ifm() // 9178 f1ff +void m68000_mcu_device::sub_w_dd_adr16_ifm() // 9178 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -146238,7 +146238,7 @@ void m68000_device::sub_w_dd_adr16_ifm() // 9178 f1ff return; } -void m68000_device::sub_w_dd_adr32_ifm() // 9179 f1ff +void m68000_mcu_device::sub_w_dd_adr32_ifm() // 9179 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -146363,7 +146363,7 @@ void m68000_device::sub_w_dd_adr32_ifm() // 9179 f1ff return; } -void m68000_device::subx_l_ds_dd_ifm() // 9180 f1f8 +void m68000_mcu_device::subx_l_ds_dd_ifm() // 9180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -146413,7 +146413,7 @@ void m68000_device::subx_l_ds_dd_ifm() // 9180 f1f8 return; } -void m68000_device::subx_l_pais_paid_ifm() // 9188 f1f8 +void m68000_mcu_device::subx_l_pais_paid_ifm() // 9188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -146588,7 +146588,7 @@ void m68000_device::subx_l_pais_paid_ifm() // 9188 f1f8 return; } -void m68000_device::sub_l_dd_ais_ifm() // 9190 f1f8 +void m68000_mcu_device::sub_l_dd_ais_ifm() // 9190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -146715,7 +146715,7 @@ void m68000_device::sub_l_dd_ais_ifm() // 9190 f1f8 return; } -void m68000_device::sub_l_dd_aips_ifm() // 9198 f1f8 +void m68000_mcu_device::sub_l_dd_aips_ifm() // 9198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -146845,7 +146845,7 @@ void m68000_device::sub_l_dd_aips_ifm() // 9198 f1f8 return; } -void m68000_device::sub_l_dd_pais_ifm() // 91a0 f1f8 +void m68000_mcu_device::sub_l_dd_pais_ifm() // 91a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -146976,7 +146976,7 @@ void m68000_device::sub_l_dd_pais_ifm() // 91a0 f1f8 return; } -void m68000_device::sub_l_dd_das_ifm() // 91a8 f1f8 +void m68000_mcu_device::sub_l_dd_das_ifm() // 91a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -147124,7 +147124,7 @@ void m68000_device::sub_l_dd_das_ifm() // 91a8 f1f8 return; } -void m68000_device::sub_l_dd_dais_ifm() // 91b0 f1f8 +void m68000_mcu_device::sub_l_dd_dais_ifm() // 91b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -147310,7 +147310,7 @@ adsl2: return; } -void m68000_device::sub_l_dd_adr16_ifm() // 91b8 f1ff +void m68000_mcu_device::sub_l_dd_adr16_ifm() // 91b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -147460,7 +147460,7 @@ void m68000_device::sub_l_dd_adr16_ifm() // 91b8 f1ff return; } -void m68000_device::sub_l_dd_adr32_ifm() // 91b9 f1ff +void m68000_mcu_device::sub_l_dd_adr32_ifm() // 91b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -147631,7 +147631,7 @@ void m68000_device::sub_l_dd_adr32_ifm() // 91b9 f1ff return; } -void m68000_device::suba_l_ds_ad_ifm() // 91c0 f1f8 +void m68000_mcu_device::suba_l_ds_ad_ifm() // 91c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -147679,7 +147679,7 @@ void m68000_device::suba_l_ds_ad_ifm() // 91c0 f1f8 return; } -void m68000_device::suba_l_as_ad_ifm() // 91c8 f1f8 +void m68000_mcu_device::suba_l_as_ad_ifm() // 91c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -147727,7 +147727,7 @@ void m68000_device::suba_l_as_ad_ifm() // 91c8 f1f8 return; } -void m68000_device::suba_l_ais_ad_ifm() // 91d0 f1f8 +void m68000_mcu_device::suba_l_ais_ad_ifm() // 91d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -147818,7 +147818,7 @@ void m68000_device::suba_l_ais_ad_ifm() // 91d0 f1f8 return; } -void m68000_device::suba_l_aips_ad_ifm() // 91d8 f1f8 +void m68000_mcu_device::suba_l_aips_ad_ifm() // 91d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -147912,7 +147912,7 @@ void m68000_device::suba_l_aips_ad_ifm() // 91d8 f1f8 return; } -void m68000_device::suba_l_pais_ad_ifm() // 91e0 f1f8 +void m68000_mcu_device::suba_l_pais_ad_ifm() // 91e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -148007,7 +148007,7 @@ void m68000_device::suba_l_pais_ad_ifm() // 91e0 f1f8 return; } -void m68000_device::suba_l_das_ad_ifm() // 91e8 f1f8 +void m68000_mcu_device::suba_l_das_ad_ifm() // 91e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -148119,7 +148119,7 @@ void m68000_device::suba_l_das_ad_ifm() // 91e8 f1f8 return; } -void m68000_device::suba_l_dais_ad_ifm() // 91f0 f1f8 +void m68000_mcu_device::suba_l_dais_ad_ifm() // 91f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -148269,7 +148269,7 @@ adsl2: return; } -void m68000_device::suba_l_adr16_ad_ifm() // 91f8 f1ff +void m68000_mcu_device::suba_l_adr16_ad_ifm() // 91f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -148383,7 +148383,7 @@ void m68000_device::suba_l_adr16_ad_ifm() // 91f8 f1ff return; } -void m68000_device::suba_l_adr32_ad_ifm() // 91f9 f1ff +void m68000_mcu_device::suba_l_adr32_ad_ifm() // 91f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -148518,7 +148518,7 @@ void m68000_device::suba_l_adr32_ad_ifm() // 91f9 f1ff return; } -void m68000_device::suba_l_dpc_ad_ifm() // 91fa f1ff +void m68000_mcu_device::suba_l_dpc_ad_ifm() // 91fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -148629,7 +148629,7 @@ void m68000_device::suba_l_dpc_ad_ifm() // 91fa f1ff return; } -void m68000_device::suba_l_dpci_ad_ifm() // 91fb f1ff +void m68000_mcu_device::suba_l_dpci_ad_ifm() // 91fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -148778,7 +148778,7 @@ adsl2: return; } -void m68000_device::suba_l_imm32_ad_ifm() // 91fc f1ff +void m68000_mcu_device::suba_l_imm32_ad_ifm() // 91fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -148870,7 +148870,7 @@ void m68000_device::suba_l_imm32_ad_ifm() // 91fc f1ff return; } -void m68000_device::cmp_b_ds_dd_ifm() // b000 f1f8 +void m68000_mcu_device::cmp_b_ds_dd_ifm() // b000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -148911,7 +148911,7 @@ void m68000_device::cmp_b_ds_dd_ifm() // b000 f1f8 return; } -void m68000_device::cmp_b_ais_dd_ifm() // b010 f1f8 +void m68000_mcu_device::cmp_b_ais_dd_ifm() // b010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -148973,7 +148973,7 @@ void m68000_device::cmp_b_ais_dd_ifm() // b010 f1f8 return; } -void m68000_device::cmp_b_aips_dd_ifm() // b018 f1f8 +void m68000_mcu_device::cmp_b_aips_dd_ifm() // b018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149039,7 +149039,7 @@ void m68000_device::cmp_b_aips_dd_ifm() // b018 f1f8 return; } -void m68000_device::cmp_b_pais_dd_ifm() // b020 f1f8 +void m68000_mcu_device::cmp_b_pais_dd_ifm() // b020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149107,7 +149107,7 @@ void m68000_device::cmp_b_pais_dd_ifm() // b020 f1f8 return; } -void m68000_device::cmp_b_das_dd_ifm() // b028 f1f8 +void m68000_mcu_device::cmp_b_das_dd_ifm() // b028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149191,7 +149191,7 @@ void m68000_device::cmp_b_das_dd_ifm() // b028 f1f8 return; } -void m68000_device::cmp_b_dais_dd_ifm() // b030 f1f8 +void m68000_mcu_device::cmp_b_dais_dd_ifm() // b030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149313,7 +149313,7 @@ adsw2: return; } -void m68000_device::cmp_b_adr16_dd_ifm() // b038 f1ff +void m68000_mcu_device::cmp_b_adr16_dd_ifm() // b038 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -149396,7 +149396,7 @@ void m68000_device::cmp_b_adr16_dd_ifm() // b038 f1ff return; } -void m68000_device::cmp_b_adr32_dd_ifm() // b039 f1ff +void m68000_mcu_device::cmp_b_adr32_dd_ifm() // b039 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -149500,7 +149500,7 @@ void m68000_device::cmp_b_adr32_dd_ifm() // b039 f1ff return; } -void m68000_device::cmp_b_dpc_dd_ifm() // b03a f1ff +void m68000_mcu_device::cmp_b_dpc_dd_ifm() // b03a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -149583,7 +149583,7 @@ void m68000_device::cmp_b_dpc_dd_ifm() // b03a f1ff return; } -void m68000_device::cmp_b_dpci_dd_ifm() // b03b f1ff +void m68000_mcu_device::cmp_b_dpci_dd_ifm() // b03b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -149704,7 +149704,7 @@ adsw2: return; } -void m68000_device::cmp_b_imm8_dd_ifm() // b03c f1ff +void m68000_mcu_device::cmp_b_imm8_dd_ifm() // b03c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -149768,7 +149768,7 @@ void m68000_device::cmp_b_imm8_dd_ifm() // b03c f1ff return; } -void m68000_device::cmp_w_ds_dd_ifm() // b040 f1f8 +void m68000_mcu_device::cmp_w_ds_dd_ifm() // b040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -149809,7 +149809,7 @@ void m68000_device::cmp_w_ds_dd_ifm() // b040 f1f8 return; } -void m68000_device::cmp_w_as_dd_ifm() // b048 f1f8 +void m68000_mcu_device::cmp_w_as_dd_ifm() // b048 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149850,7 +149850,7 @@ void m68000_device::cmp_w_as_dd_ifm() // b048 f1f8 return; } -void m68000_device::cmp_w_ais_dd_ifm() // b050 f1f8 +void m68000_mcu_device::cmp_w_ais_dd_ifm() // b050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149915,7 +149915,7 @@ void m68000_device::cmp_w_ais_dd_ifm() // b050 f1f8 return; } -void m68000_device::cmp_w_aips_dd_ifm() // b058 f1f8 +void m68000_mcu_device::cmp_w_aips_dd_ifm() // b058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149984,7 +149984,7 @@ void m68000_device::cmp_w_aips_dd_ifm() // b058 f1f8 return; } -void m68000_device::cmp_w_pais_dd_ifm() // b060 f1f8 +void m68000_mcu_device::cmp_w_pais_dd_ifm() // b060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150055,7 +150055,7 @@ void m68000_device::cmp_w_pais_dd_ifm() // b060 f1f8 return; } -void m68000_device::cmp_w_das_dd_ifm() // b068 f1f8 +void m68000_mcu_device::cmp_w_das_dd_ifm() // b068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150142,7 +150142,7 @@ void m68000_device::cmp_w_das_dd_ifm() // b068 f1f8 return; } -void m68000_device::cmp_w_dais_dd_ifm() // b070 f1f8 +void m68000_mcu_device::cmp_w_dais_dd_ifm() // b070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150267,7 +150267,7 @@ adsw2: return; } -void m68000_device::cmp_w_adr16_dd_ifm() // b078 f1ff +void m68000_mcu_device::cmp_w_adr16_dd_ifm() // b078 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -150353,7 +150353,7 @@ void m68000_device::cmp_w_adr16_dd_ifm() // b078 f1ff return; } -void m68000_device::cmp_w_adr32_dd_ifm() // b079 f1ff +void m68000_mcu_device::cmp_w_adr32_dd_ifm() // b079 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -150460,7 +150460,7 @@ void m68000_device::cmp_w_adr32_dd_ifm() // b079 f1ff return; } -void m68000_device::cmp_w_dpc_dd_ifm() // b07a f1ff +void m68000_mcu_device::cmp_w_dpc_dd_ifm() // b07a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -150546,7 +150546,7 @@ void m68000_device::cmp_w_dpc_dd_ifm() // b07a f1ff return; } -void m68000_device::cmp_w_dpci_dd_ifm() // b07b f1ff +void m68000_mcu_device::cmp_w_dpci_dd_ifm() // b07b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -150670,7 +150670,7 @@ adsw2: return; } -void m68000_device::cmp_w_imm16_dd_ifm() // b07c f1ff +void m68000_mcu_device::cmp_w_imm16_dd_ifm() // b07c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -150734,7 +150734,7 @@ void m68000_device::cmp_w_imm16_dd_ifm() // b07c f1ff return; } -void m68000_device::cmp_l_ds_dd_ifm() // b080 f1f8 +void m68000_mcu_device::cmp_l_ds_dd_ifm() // b080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -150780,7 +150780,7 @@ void m68000_device::cmp_l_ds_dd_ifm() // b080 f1f8 return; } -void m68000_device::cmp_l_as_dd_ifm() // b088 f1f8 +void m68000_mcu_device::cmp_l_as_dd_ifm() // b088 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150826,7 +150826,7 @@ void m68000_device::cmp_l_as_dd_ifm() // b088 f1f8 return; } -void m68000_device::cmp_l_ais_dd_ifm() // b090 f1f8 +void m68000_mcu_device::cmp_l_ais_dd_ifm() // b090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150917,7 +150917,7 @@ void m68000_device::cmp_l_ais_dd_ifm() // b090 f1f8 return; } -void m68000_device::cmp_l_aips_dd_ifm() // b098 f1f8 +void m68000_mcu_device::cmp_l_aips_dd_ifm() // b098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -151011,7 +151011,7 @@ void m68000_device::cmp_l_aips_dd_ifm() // b098 f1f8 return; } -void m68000_device::cmp_l_pais_dd_ifm() // b0a0 f1f8 +void m68000_mcu_device::cmp_l_pais_dd_ifm() // b0a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -151106,7 +151106,7 @@ void m68000_device::cmp_l_pais_dd_ifm() // b0a0 f1f8 return; } -void m68000_device::cmp_l_das_dd_ifm() // b0a8 f1f8 +void m68000_mcu_device::cmp_l_das_dd_ifm() // b0a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -151218,7 +151218,7 @@ void m68000_device::cmp_l_das_dd_ifm() // b0a8 f1f8 return; } -void m68000_device::cmp_l_dais_dd_ifm() // b0b0 f1f8 +void m68000_mcu_device::cmp_l_dais_dd_ifm() // b0b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -151368,7 +151368,7 @@ adsl2: return; } -void m68000_device::cmp_l_adr16_dd_ifm() // b0b8 f1ff +void m68000_mcu_device::cmp_l_adr16_dd_ifm() // b0b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -151482,7 +151482,7 @@ void m68000_device::cmp_l_adr16_dd_ifm() // b0b8 f1ff return; } -void m68000_device::cmp_l_adr32_dd_ifm() // b0b9 f1ff +void m68000_mcu_device::cmp_l_adr32_dd_ifm() // b0b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -151617,7 +151617,7 @@ void m68000_device::cmp_l_adr32_dd_ifm() // b0b9 f1ff return; } -void m68000_device::cmp_l_dpc_dd_ifm() // b0ba f1ff +void m68000_mcu_device::cmp_l_dpc_dd_ifm() // b0ba f1ff { int rx = (m_irdi >> 9) & 7; // 1c6 adsl1 @@ -151728,7 +151728,7 @@ void m68000_device::cmp_l_dpc_dd_ifm() // b0ba f1ff return; } -void m68000_device::cmp_l_dpci_dd_ifm() // b0bb f1ff +void m68000_mcu_device::cmp_l_dpci_dd_ifm() // b0bb f1ff { int rx = (m_irdi >> 9) & 7; // 1e7 aixw0 @@ -151877,7 +151877,7 @@ adsl2: return; } -void m68000_device::cmp_l_imm32_dd_ifm() // b0bc f1ff +void m68000_mcu_device::cmp_l_imm32_dd_ifm() // b0bc f1ff { int rx = (m_irdi >> 9) & 7; // 0a7 e#l1 @@ -151967,7 +151967,7 @@ void m68000_device::cmp_l_imm32_dd_ifm() // b0bc f1ff return; } -void m68000_device::cmpa_w_ds_ad_ifm() // b0c0 f1f8 +void m68000_mcu_device::cmpa_w_ds_ad_ifm() // b0c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -152013,7 +152013,7 @@ void m68000_device::cmpa_w_ds_ad_ifm() // b0c0 f1f8 return; } -void m68000_device::cmpa_w_as_ad_ifm() // b0c8 f1f8 +void m68000_mcu_device::cmpa_w_as_ad_ifm() // b0c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -152059,7 +152059,7 @@ void m68000_device::cmpa_w_as_ad_ifm() // b0c8 f1f8 return; } -void m68000_device::cmpa_w_ais_ad_ifm() // b0d0 f1f8 +void m68000_mcu_device::cmpa_w_ais_ad_ifm() // b0d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -152129,7 +152129,7 @@ void m68000_device::cmpa_w_ais_ad_ifm() // b0d0 f1f8 return; } -void m68000_device::cmpa_w_aips_ad_ifm() // b0d8 f1f8 +void m68000_mcu_device::cmpa_w_aips_ad_ifm() // b0d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -152203,7 +152203,7 @@ void m68000_device::cmpa_w_aips_ad_ifm() // b0d8 f1f8 return; } -void m68000_device::cmpa_w_pais_ad_ifm() // b0e0 f1f8 +void m68000_mcu_device::cmpa_w_pais_ad_ifm() // b0e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -152279,7 +152279,7 @@ void m68000_device::cmpa_w_pais_ad_ifm() // b0e0 f1f8 return; } -void m68000_device::cmpa_w_das_ad_ifm() // b0e8 f1f8 +void m68000_mcu_device::cmpa_w_das_ad_ifm() // b0e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -152371,7 +152371,7 @@ void m68000_device::cmpa_w_das_ad_ifm() // b0e8 f1f8 return; } -void m68000_device::cmpa_w_dais_ad_ifm() // b0f0 f1f8 +void m68000_mcu_device::cmpa_w_dais_ad_ifm() // b0f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -152501,7 +152501,7 @@ adsw2: return; } -void m68000_device::cmpa_w_adr16_ad_ifm() // b0f8 f1ff +void m68000_mcu_device::cmpa_w_adr16_ad_ifm() // b0f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -152592,7 +152592,7 @@ void m68000_device::cmpa_w_adr16_ad_ifm() // b0f8 f1ff return; } -void m68000_device::cmpa_w_adr32_ad_ifm() // b0f9 f1ff +void m68000_mcu_device::cmpa_w_adr32_ad_ifm() // b0f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -152704,7 +152704,7 @@ void m68000_device::cmpa_w_adr32_ad_ifm() // b0f9 f1ff return; } -void m68000_device::cmpa_w_dpc_ad_ifm() // b0fa f1ff +void m68000_mcu_device::cmpa_w_dpc_ad_ifm() // b0fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -152795,7 +152795,7 @@ void m68000_device::cmpa_w_dpc_ad_ifm() // b0fa f1ff return; } -void m68000_device::cmpa_w_dpci_ad_ifm() // b0fb f1ff +void m68000_mcu_device::cmpa_w_dpci_ad_ifm() // b0fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -152924,7 +152924,7 @@ adsw2: return; } -void m68000_device::cmpa_w_imm16_ad_ifm() // b0fc f1ff +void m68000_mcu_device::cmpa_w_imm16_ad_ifm() // b0fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -152993,7 +152993,7 @@ void m68000_device::cmpa_w_imm16_ad_ifm() // b0fc f1ff return; } -void m68000_device::eor_b_dd_ds_ifm() // b100 f1f8 +void m68000_mcu_device::eor_b_dd_ds_ifm() // b100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -153035,7 +153035,7 @@ void m68000_device::eor_b_dd_ds_ifm() // b100 f1f8 return; } -void m68000_device::cmpm_b_aips_aipd_ifm() // b108 f1f8 +void m68000_mcu_device::cmpm_b_aips_aipd_ifm() // b108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -153115,7 +153115,7 @@ void m68000_device::cmpm_b_aips_aipd_ifm() // b108 f1f8 return; } -void m68000_device::eor_b_dd_ais_ifm() // b110 f1f8 +void m68000_mcu_device::eor_b_dd_ais_ifm() // b110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -153192,7 +153192,7 @@ void m68000_device::eor_b_dd_ais_ifm() // b110 f1f8 return; } -void m68000_device::eor_b_dd_aips_ifm() // b118 f1f8 +void m68000_mcu_device::eor_b_dd_aips_ifm() // b118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -153274,7 +153274,7 @@ void m68000_device::eor_b_dd_aips_ifm() // b118 f1f8 return; } -void m68000_device::eor_b_dd_pais_ifm() // b120 f1f8 +void m68000_mcu_device::eor_b_dd_pais_ifm() // b120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -153358,7 +153358,7 @@ void m68000_device::eor_b_dd_pais_ifm() // b120 f1f8 return; } -void m68000_device::eor_b_dd_das_ifm() // b128 f1f8 +void m68000_mcu_device::eor_b_dd_das_ifm() // b128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -153458,7 +153458,7 @@ void m68000_device::eor_b_dd_das_ifm() // b128 f1f8 return; } -void m68000_device::eor_b_dd_dais_ifm() // b130 f1f8 +void m68000_mcu_device::eor_b_dd_dais_ifm() // b130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -153598,7 +153598,7 @@ adsw2: return; } -void m68000_device::eor_b_dd_adr16_ifm() // b138 f1ff +void m68000_mcu_device::eor_b_dd_adr16_ifm() // b138 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -153697,7 +153697,7 @@ void m68000_device::eor_b_dd_adr16_ifm() // b138 f1ff return; } -void m68000_device::eor_b_dd_adr32_ifm() // b139 f1ff +void m68000_mcu_device::eor_b_dd_adr32_ifm() // b139 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -153818,7 +153818,7 @@ void m68000_device::eor_b_dd_adr32_ifm() // b139 f1ff return; } -void m68000_device::eor_w_dd_ds_ifm() // b140 f1f8 +void m68000_mcu_device::eor_w_dd_ds_ifm() // b140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -153860,7 +153860,7 @@ void m68000_device::eor_w_dd_ds_ifm() // b140 f1f8 return; } -void m68000_device::cmpm_w_aips_aipd_ifm() // b148 f1f8 +void m68000_mcu_device::cmpm_w_aips_aipd_ifm() // b148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -153946,7 +153946,7 @@ void m68000_device::cmpm_w_aips_aipd_ifm() // b148 f1f8 return; } -void m68000_device::eor_w_dd_ais_ifm() // b150 f1f8 +void m68000_mcu_device::eor_w_dd_ais_ifm() // b150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -154031,7 +154031,7 @@ void m68000_device::eor_w_dd_ais_ifm() // b150 f1f8 return; } -void m68000_device::eor_w_dd_aips_ifm() // b158 f1f8 +void m68000_mcu_device::eor_w_dd_aips_ifm() // b158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -154121,7 +154121,7 @@ void m68000_device::eor_w_dd_aips_ifm() // b158 f1f8 return; } -void m68000_device::eor_w_dd_pais_ifm() // b160 f1f8 +void m68000_mcu_device::eor_w_dd_pais_ifm() // b160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -154213,7 +154213,7 @@ void m68000_device::eor_w_dd_pais_ifm() // b160 f1f8 return; } -void m68000_device::eor_w_dd_das_ifm() // b168 f1f8 +void m68000_mcu_device::eor_w_dd_das_ifm() // b168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -154321,7 +154321,7 @@ void m68000_device::eor_w_dd_das_ifm() // b168 f1f8 return; } -void m68000_device::eor_w_dd_dais_ifm() // b170 f1f8 +void m68000_mcu_device::eor_w_dd_dais_ifm() // b170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -154469,7 +154469,7 @@ adsw2: return; } -void m68000_device::eor_w_dd_adr16_ifm() // b178 f1ff +void m68000_mcu_device::eor_w_dd_adr16_ifm() // b178 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -154576,7 +154576,7 @@ void m68000_device::eor_w_dd_adr16_ifm() // b178 f1ff return; } -void m68000_device::eor_w_dd_adr32_ifm() // b179 f1ff +void m68000_mcu_device::eor_w_dd_adr32_ifm() // b179 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -154705,7 +154705,7 @@ void m68000_device::eor_w_dd_adr32_ifm() // b179 f1ff return; } -void m68000_device::eor_l_dd_ds_ifm() // b180 f1f8 +void m68000_mcu_device::eor_l_dd_ds_ifm() // b180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -154756,7 +154756,7 @@ void m68000_device::eor_l_dd_ds_ifm() // b180 f1f8 return; } -void m68000_device::cmpm_l_aips_aipd_ifm() // b188 f1f8 +void m68000_mcu_device::cmpm_l_aips_aipd_ifm() // b188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -154888,7 +154888,7 @@ void m68000_device::cmpm_l_aips_aipd_ifm() // b188 f1f8 return; } -void m68000_device::eor_l_dd_ais_ifm() // b190 f1f8 +void m68000_mcu_device::eor_l_dd_ais_ifm() // b190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -155017,7 +155017,7 @@ void m68000_device::eor_l_dd_ais_ifm() // b190 f1f8 return; } -void m68000_device::eor_l_dd_aips_ifm() // b198 f1f8 +void m68000_mcu_device::eor_l_dd_aips_ifm() // b198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -155150,7 +155150,7 @@ void m68000_device::eor_l_dd_aips_ifm() // b198 f1f8 return; } -void m68000_device::eor_l_dd_pais_ifm() // b1a0 f1f8 +void m68000_mcu_device::eor_l_dd_pais_ifm() // b1a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -155284,7 +155284,7 @@ void m68000_device::eor_l_dd_pais_ifm() // b1a0 f1f8 return; } -void m68000_device::eor_l_dd_das_ifm() // b1a8 f1f8 +void m68000_mcu_device::eor_l_dd_das_ifm() // b1a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -155435,7 +155435,7 @@ void m68000_device::eor_l_dd_das_ifm() // b1a8 f1f8 return; } -void m68000_device::eor_l_dd_dais_ifm() // b1b0 f1f8 +void m68000_mcu_device::eor_l_dd_dais_ifm() // b1b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -155626,7 +155626,7 @@ adsl2: return; } -void m68000_device::eor_l_dd_adr16_ifm() // b1b8 f1ff +void m68000_mcu_device::eor_l_dd_adr16_ifm() // b1b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -155780,7 +155780,7 @@ void m68000_device::eor_l_dd_adr16_ifm() // b1b8 f1ff return; } -void m68000_device::eor_l_dd_adr32_ifm() // b1b9 f1ff +void m68000_mcu_device::eor_l_dd_adr32_ifm() // b1b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -155956,7 +155956,7 @@ void m68000_device::eor_l_dd_adr32_ifm() // b1b9 f1ff return; } -void m68000_device::cmpa_l_ds_ad_ifm() // b1c0 f1f8 +void m68000_mcu_device::cmpa_l_ds_ad_ifm() // b1c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -156002,7 +156002,7 @@ void m68000_device::cmpa_l_ds_ad_ifm() // b1c0 f1f8 return; } -void m68000_device::cmpa_l_as_ad_ifm() // b1c8 f1f8 +void m68000_mcu_device::cmpa_l_as_ad_ifm() // b1c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -156048,7 +156048,7 @@ void m68000_device::cmpa_l_as_ad_ifm() // b1c8 f1f8 return; } -void m68000_device::cmpa_l_ais_ad_ifm() // b1d0 f1f8 +void m68000_mcu_device::cmpa_l_ais_ad_ifm() // b1d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -156139,7 +156139,7 @@ void m68000_device::cmpa_l_ais_ad_ifm() // b1d0 f1f8 return; } -void m68000_device::cmpa_l_aips_ad_ifm() // b1d8 f1f8 +void m68000_mcu_device::cmpa_l_aips_ad_ifm() // b1d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -156233,7 +156233,7 @@ void m68000_device::cmpa_l_aips_ad_ifm() // b1d8 f1f8 return; } -void m68000_device::cmpa_l_pais_ad_ifm() // b1e0 f1f8 +void m68000_mcu_device::cmpa_l_pais_ad_ifm() // b1e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -156328,7 +156328,7 @@ void m68000_device::cmpa_l_pais_ad_ifm() // b1e0 f1f8 return; } -void m68000_device::cmpa_l_das_ad_ifm() // b1e8 f1f8 +void m68000_mcu_device::cmpa_l_das_ad_ifm() // b1e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -156440,7 +156440,7 @@ void m68000_device::cmpa_l_das_ad_ifm() // b1e8 f1f8 return; } -void m68000_device::cmpa_l_dais_ad_ifm() // b1f0 f1f8 +void m68000_mcu_device::cmpa_l_dais_ad_ifm() // b1f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -156590,7 +156590,7 @@ adsl2: return; } -void m68000_device::cmpa_l_adr16_ad_ifm() // b1f8 f1ff +void m68000_mcu_device::cmpa_l_adr16_ad_ifm() // b1f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -156704,7 +156704,7 @@ void m68000_device::cmpa_l_adr16_ad_ifm() // b1f8 f1ff return; } -void m68000_device::cmpa_l_adr32_ad_ifm() // b1f9 f1ff +void m68000_mcu_device::cmpa_l_adr32_ad_ifm() // b1f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -156839,7 +156839,7 @@ void m68000_device::cmpa_l_adr32_ad_ifm() // b1f9 f1ff return; } -void m68000_device::cmpa_l_dpc_ad_ifm() // b1fa f1ff +void m68000_mcu_device::cmpa_l_dpc_ad_ifm() // b1fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -156950,7 +156950,7 @@ void m68000_device::cmpa_l_dpc_ad_ifm() // b1fa f1ff return; } -void m68000_device::cmpa_l_dpci_ad_ifm() // b1fb f1ff +void m68000_mcu_device::cmpa_l_dpci_ad_ifm() // b1fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -157099,7 +157099,7 @@ adsl2: return; } -void m68000_device::cmpa_l_imm32_ad_ifm() // b1fc f1ff +void m68000_mcu_device::cmpa_l_imm32_ad_ifm() // b1fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -157189,7 +157189,7 @@ void m68000_device::cmpa_l_imm32_ad_ifm() // b1fc f1ff return; } -void m68000_device::and_b_ds_dd_ifm() // c000 f1f8 +void m68000_mcu_device::and_b_ds_dd_ifm() // c000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -157232,7 +157232,7 @@ void m68000_device::and_b_ds_dd_ifm() // c000 f1f8 return; } -void m68000_device::and_b_ais_dd_ifm() // c010 f1f8 +void m68000_mcu_device::and_b_ais_dd_ifm() // c010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -157297,7 +157297,7 @@ void m68000_device::and_b_ais_dd_ifm() // c010 f1f8 return; } -void m68000_device::and_b_aips_dd_ifm() // c018 f1f8 +void m68000_mcu_device::and_b_aips_dd_ifm() // c018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -157367,7 +157367,7 @@ void m68000_device::and_b_aips_dd_ifm() // c018 f1f8 return; } -void m68000_device::and_b_pais_dd_ifm() // c020 f1f8 +void m68000_mcu_device::and_b_pais_dd_ifm() // c020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -157439,7 +157439,7 @@ void m68000_device::and_b_pais_dd_ifm() // c020 f1f8 return; } -void m68000_device::and_b_das_dd_ifm() // c028 f1f8 +void m68000_mcu_device::and_b_das_dd_ifm() // c028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -157527,7 +157527,7 @@ void m68000_device::and_b_das_dd_ifm() // c028 f1f8 return; } -void m68000_device::and_b_dais_dd_ifm() // c030 f1f8 +void m68000_mcu_device::and_b_dais_dd_ifm() // c030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -157655,7 +157655,7 @@ adsw2: return; } -void m68000_device::and_b_adr16_dd_ifm() // c038 f1ff +void m68000_mcu_device::and_b_adr16_dd_ifm() // c038 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -157742,7 +157742,7 @@ void m68000_device::and_b_adr16_dd_ifm() // c038 f1ff return; } -void m68000_device::and_b_adr32_dd_ifm() // c039 f1ff +void m68000_mcu_device::and_b_adr32_dd_ifm() // c039 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -157851,7 +157851,7 @@ void m68000_device::and_b_adr32_dd_ifm() // c039 f1ff return; } -void m68000_device::and_b_dpc_dd_ifm() // c03a f1ff +void m68000_mcu_device::and_b_dpc_dd_ifm() // c03a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -157938,7 +157938,7 @@ void m68000_device::and_b_dpc_dd_ifm() // c03a f1ff return; } -void m68000_device::and_b_dpci_dd_ifm() // c03b f1ff +void m68000_mcu_device::and_b_dpci_dd_ifm() // c03b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -158065,7 +158065,7 @@ adsw2: return; } -void m68000_device::and_b_imm8_dd_ifm() // c03c f1ff +void m68000_mcu_device::and_b_imm8_dd_ifm() // c03c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -158132,7 +158132,7 @@ void m68000_device::and_b_imm8_dd_ifm() // c03c f1ff return; } -void m68000_device::and_w_ds_dd_ifm() // c040 f1f8 +void m68000_mcu_device::and_w_ds_dd_ifm() // c040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -158175,7 +158175,7 @@ void m68000_device::and_w_ds_dd_ifm() // c040 f1f8 return; } -void m68000_device::and_w_ais_dd_ifm() // c050 f1f8 +void m68000_mcu_device::and_w_ais_dd_ifm() // c050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -158243,7 +158243,7 @@ void m68000_device::and_w_ais_dd_ifm() // c050 f1f8 return; } -void m68000_device::and_w_aips_dd_ifm() // c058 f1f8 +void m68000_mcu_device::and_w_aips_dd_ifm() // c058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -158316,7 +158316,7 @@ void m68000_device::and_w_aips_dd_ifm() // c058 f1f8 return; } -void m68000_device::and_w_pais_dd_ifm() // c060 f1f8 +void m68000_mcu_device::and_w_pais_dd_ifm() // c060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -158391,7 +158391,7 @@ void m68000_device::and_w_pais_dd_ifm() // c060 f1f8 return; } -void m68000_device::and_w_das_dd_ifm() // c068 f1f8 +void m68000_mcu_device::and_w_das_dd_ifm() // c068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -158482,7 +158482,7 @@ void m68000_device::and_w_das_dd_ifm() // c068 f1f8 return; } -void m68000_device::and_w_dais_dd_ifm() // c070 f1f8 +void m68000_mcu_device::and_w_dais_dd_ifm() // c070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -158613,7 +158613,7 @@ adsw2: return; } -void m68000_device::and_w_adr16_dd_ifm() // c078 f1ff +void m68000_mcu_device::and_w_adr16_dd_ifm() // c078 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -158703,7 +158703,7 @@ void m68000_device::and_w_adr16_dd_ifm() // c078 f1ff return; } -void m68000_device::and_w_adr32_dd_ifm() // c079 f1ff +void m68000_mcu_device::and_w_adr32_dd_ifm() // c079 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -158815,7 +158815,7 @@ void m68000_device::and_w_adr32_dd_ifm() // c079 f1ff return; } -void m68000_device::and_w_dpc_dd_ifm() // c07a f1ff +void m68000_mcu_device::and_w_dpc_dd_ifm() // c07a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -158905,7 +158905,7 @@ void m68000_device::and_w_dpc_dd_ifm() // c07a f1ff return; } -void m68000_device::and_w_dpci_dd_ifm() // c07b f1ff +void m68000_mcu_device::and_w_dpci_dd_ifm() // c07b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -159035,7 +159035,7 @@ adsw2: return; } -void m68000_device::and_w_imm16_dd_ifm() // c07c f1ff +void m68000_mcu_device::and_w_imm16_dd_ifm() // c07c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -159102,7 +159102,7 @@ void m68000_device::and_w_imm16_dd_ifm() // c07c f1ff return; } -void m68000_device::and_l_ds_dd_ifm() // c080 f1f8 +void m68000_mcu_device::and_l_ds_dd_ifm() // c080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -159154,7 +159154,7 @@ void m68000_device::and_l_ds_dd_ifm() // c080 f1f8 return; } -void m68000_device::and_l_ais_dd_ifm() // c090 f1f8 +void m68000_mcu_device::and_l_ais_dd_ifm() // c090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159249,7 +159249,7 @@ void m68000_device::and_l_ais_dd_ifm() // c090 f1f8 return; } -void m68000_device::and_l_aips_dd_ifm() // c098 f1f8 +void m68000_mcu_device::and_l_aips_dd_ifm() // c098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159348,7 +159348,7 @@ void m68000_device::and_l_aips_dd_ifm() // c098 f1f8 return; } -void m68000_device::and_l_pais_dd_ifm() // c0a0 f1f8 +void m68000_mcu_device::and_l_pais_dd_ifm() // c0a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159448,7 +159448,7 @@ void m68000_device::and_l_pais_dd_ifm() // c0a0 f1f8 return; } -void m68000_device::and_l_das_dd_ifm() // c0a8 f1f8 +void m68000_mcu_device::and_l_das_dd_ifm() // c0a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159565,7 +159565,7 @@ void m68000_device::and_l_das_dd_ifm() // c0a8 f1f8 return; } -void m68000_device::and_l_dais_dd_ifm() // c0b0 f1f8 +void m68000_mcu_device::and_l_dais_dd_ifm() // c0b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159722,7 +159722,7 @@ adsl2: return; } -void m68000_device::and_l_adr16_dd_ifm() // c0b8 f1ff +void m68000_mcu_device::and_l_adr16_dd_ifm() // c0b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -159842,7 +159842,7 @@ void m68000_device::and_l_adr16_dd_ifm() // c0b8 f1ff return; } -void m68000_device::and_l_adr32_dd_ifm() // c0b9 f1ff +void m68000_mcu_device::and_l_adr32_dd_ifm() // c0b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -159984,7 +159984,7 @@ void m68000_device::and_l_adr32_dd_ifm() // c0b9 f1ff return; } -void m68000_device::and_l_dpc_dd_ifm() // c0ba f1ff +void m68000_mcu_device::and_l_dpc_dd_ifm() // c0ba f1ff { int rx = (m_irdi >> 9) & 7; // 1c6 adsl1 @@ -160100,7 +160100,7 @@ void m68000_device::and_l_dpc_dd_ifm() // c0ba f1ff return; } -void m68000_device::and_l_dpci_dd_ifm() // c0bb f1ff +void m68000_mcu_device::and_l_dpci_dd_ifm() // c0bb f1ff { int rx = (m_irdi >> 9) & 7; // 1e7 aixw0 @@ -160256,7 +160256,7 @@ adsl2: return; } -void m68000_device::and_l_imm32_dd_ifm() // c0bc f1ff +void m68000_mcu_device::and_l_imm32_dd_ifm() // c0bc f1ff { int rx = (m_irdi >> 9) & 7; // 0a7 e#l1 @@ -160354,7 +160354,7 @@ void m68000_device::and_l_imm32_dd_ifm() // c0bc f1ff return; } -void m68000_device::mulu_w_ds_dd_ifm() // c0c0 f1f8 +void m68000_mcu_device::mulu_w_ds_dd_ifm() // c0c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -160433,7 +160433,7 @@ mulm6: return; } -void m68000_device::mulu_w_ais_dd_ifm() // c0d0 f1f8 +void m68000_mcu_device::mulu_w_ais_dd_ifm() // c0d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160536,7 +160536,7 @@ mulm6: return; } -void m68000_device::mulu_w_aips_dd_ifm() // c0d8 f1f8 +void m68000_mcu_device::mulu_w_aips_dd_ifm() // c0d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160643,7 +160643,7 @@ mulm6: return; } -void m68000_device::mulu_w_pais_dd_ifm() // c0e0 f1f8 +void m68000_mcu_device::mulu_w_pais_dd_ifm() // c0e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160752,7 +160752,7 @@ mulm6: return; } -void m68000_device::mulu_w_das_dd_ifm() // c0e8 f1f8 +void m68000_mcu_device::mulu_w_das_dd_ifm() // c0e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160877,7 +160877,7 @@ mulm6: return; } -void m68000_device::mulu_w_dais_dd_ifm() // c0f0 f1f8 +void m68000_mcu_device::mulu_w_dais_dd_ifm() // c0f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -161040,7 +161040,7 @@ mulm6: return; } -void m68000_device::mulu_w_adr16_dd_ifm() // c0f8 f1ff +void m68000_mcu_device::mulu_w_adr16_dd_ifm() // c0f8 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -161164,7 +161164,7 @@ mulm6: return; } -void m68000_device::mulu_w_adr32_dd_ifm() // c0f9 f1ff +void m68000_mcu_device::mulu_w_adr32_dd_ifm() // c0f9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -161309,7 +161309,7 @@ mulm6: return; } -void m68000_device::mulu_w_dpc_dd_ifm() // c0fa f1ff +void m68000_mcu_device::mulu_w_dpc_dd_ifm() // c0fa f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -161433,7 +161433,7 @@ mulm6: return; } -void m68000_device::mulu_w_dpci_dd_ifm() // c0fb f1ff +void m68000_mcu_device::mulu_w_dpci_dd_ifm() // c0fb f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -161595,7 +161595,7 @@ mulm6: return; } -void m68000_device::mulu_w_imm16_dd_ifm() // c0fc f1ff +void m68000_mcu_device::mulu_w_imm16_dd_ifm() // c0fc f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -161697,7 +161697,7 @@ mulm6: return; } -void m68000_device::abcd_ds_dd_ifm() // c100 f1f8 +void m68000_mcu_device::abcd_ds_dd_ifm() // c100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -161743,7 +161743,7 @@ void m68000_device::abcd_ds_dd_ifm() // c100 f1f8 return; } -void m68000_device::abcd_pais_paid_ifm() // c108 f1f8 +void m68000_mcu_device::abcd_pais_paid_ifm() // c108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -161844,7 +161844,7 @@ void m68000_device::abcd_pais_paid_ifm() // c108 f1f8 return; } -void m68000_device::and_b_dd_ais_ifm() // c110 f1f8 +void m68000_mcu_device::and_b_dd_ais_ifm() // c110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -161921,7 +161921,7 @@ void m68000_device::and_b_dd_ais_ifm() // c110 f1f8 return; } -void m68000_device::and_b_dd_aips_ifm() // c118 f1f8 +void m68000_mcu_device::and_b_dd_aips_ifm() // c118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -162003,7 +162003,7 @@ void m68000_device::and_b_dd_aips_ifm() // c118 f1f8 return; } -void m68000_device::and_b_dd_pais_ifm() // c120 f1f8 +void m68000_mcu_device::and_b_dd_pais_ifm() // c120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -162087,7 +162087,7 @@ void m68000_device::and_b_dd_pais_ifm() // c120 f1f8 return; } -void m68000_device::and_b_dd_das_ifm() // c128 f1f8 +void m68000_mcu_device::and_b_dd_das_ifm() // c128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -162187,7 +162187,7 @@ void m68000_device::and_b_dd_das_ifm() // c128 f1f8 return; } -void m68000_device::and_b_dd_dais_ifm() // c130 f1f8 +void m68000_mcu_device::and_b_dd_dais_ifm() // c130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -162327,7 +162327,7 @@ adsw2: return; } -void m68000_device::and_b_dd_adr16_ifm() // c138 f1ff +void m68000_mcu_device::and_b_dd_adr16_ifm() // c138 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -162426,7 +162426,7 @@ void m68000_device::and_b_dd_adr16_ifm() // c138 f1ff return; } -void m68000_device::and_b_dd_adr32_ifm() // c139 f1ff +void m68000_mcu_device::and_b_dd_adr32_ifm() // c139 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -162547,7 +162547,7 @@ void m68000_device::and_b_dd_adr32_ifm() // c139 f1ff return; } -void m68000_device::exg_dd_ds_ifm() // c140 f1f8 +void m68000_mcu_device::exg_dd_ds_ifm() // c140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -162591,7 +162591,7 @@ void m68000_device::exg_dd_ds_ifm() // c140 f1f8 return; } -void m68000_device::exg_ad_as_ifm() // c148 f1f8 +void m68000_mcu_device::exg_ad_as_ifm() // c148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -162635,7 +162635,7 @@ void m68000_device::exg_ad_as_ifm() // c148 f1f8 return; } -void m68000_device::and_w_dd_ais_ifm() // c150 f1f8 +void m68000_mcu_device::and_w_dd_ais_ifm() // c150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -162720,7 +162720,7 @@ void m68000_device::and_w_dd_ais_ifm() // c150 f1f8 return; } -void m68000_device::and_w_dd_aips_ifm() // c158 f1f8 +void m68000_mcu_device::and_w_dd_aips_ifm() // c158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -162810,7 +162810,7 @@ void m68000_device::and_w_dd_aips_ifm() // c158 f1f8 return; } -void m68000_device::and_w_dd_pais_ifm() // c160 f1f8 +void m68000_mcu_device::and_w_dd_pais_ifm() // c160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -162902,7 +162902,7 @@ void m68000_device::and_w_dd_pais_ifm() // c160 f1f8 return; } -void m68000_device::and_w_dd_das_ifm() // c168 f1f8 +void m68000_mcu_device::and_w_dd_das_ifm() // c168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -163010,7 +163010,7 @@ void m68000_device::and_w_dd_das_ifm() // c168 f1f8 return; } -void m68000_device::and_w_dd_dais_ifm() // c170 f1f8 +void m68000_mcu_device::and_w_dd_dais_ifm() // c170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -163158,7 +163158,7 @@ adsw2: return; } -void m68000_device::and_w_dd_adr16_ifm() // c178 f1ff +void m68000_mcu_device::and_w_dd_adr16_ifm() // c178 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -163265,7 +163265,7 @@ void m68000_device::and_w_dd_adr16_ifm() // c178 f1ff return; } -void m68000_device::and_w_dd_adr32_ifm() // c179 f1ff +void m68000_mcu_device::and_w_dd_adr32_ifm() // c179 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -163394,7 +163394,7 @@ void m68000_device::and_w_dd_adr32_ifm() // c179 f1ff return; } -void m68000_device::exg_dd_as_ifm() // c188 f1f8 +void m68000_mcu_device::exg_dd_as_ifm() // c188 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -163438,7 +163438,7 @@ void m68000_device::exg_dd_as_ifm() // c188 f1f8 return; } -void m68000_device::and_l_dd_ais_ifm() // c190 f1f8 +void m68000_mcu_device::and_l_dd_ais_ifm() // c190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -163567,7 +163567,7 @@ void m68000_device::and_l_dd_ais_ifm() // c190 f1f8 return; } -void m68000_device::and_l_dd_aips_ifm() // c198 f1f8 +void m68000_mcu_device::and_l_dd_aips_ifm() // c198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -163700,7 +163700,7 @@ void m68000_device::and_l_dd_aips_ifm() // c198 f1f8 return; } -void m68000_device::and_l_dd_pais_ifm() // c1a0 f1f8 +void m68000_mcu_device::and_l_dd_pais_ifm() // c1a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -163834,7 +163834,7 @@ void m68000_device::and_l_dd_pais_ifm() // c1a0 f1f8 return; } -void m68000_device::and_l_dd_das_ifm() // c1a8 f1f8 +void m68000_mcu_device::and_l_dd_das_ifm() // c1a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -163985,7 +163985,7 @@ void m68000_device::and_l_dd_das_ifm() // c1a8 f1f8 return; } -void m68000_device::and_l_dd_dais_ifm() // c1b0 f1f8 +void m68000_mcu_device::and_l_dd_dais_ifm() // c1b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164176,7 +164176,7 @@ adsl2: return; } -void m68000_device::and_l_dd_adr16_ifm() // c1b8 f1ff +void m68000_mcu_device::and_l_dd_adr16_ifm() // c1b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -164330,7 +164330,7 @@ void m68000_device::and_l_dd_adr16_ifm() // c1b8 f1ff return; } -void m68000_device::and_l_dd_adr32_ifm() // c1b9 f1ff +void m68000_mcu_device::and_l_dd_adr32_ifm() // c1b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -164506,7 +164506,7 @@ void m68000_device::and_l_dd_adr32_ifm() // c1b9 f1ff return; } -void m68000_device::muls_w_ds_dd_ifm() // c1c0 f1f8 +void m68000_mcu_device::muls_w_ds_dd_ifm() // c1c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -164594,7 +164594,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_ais_dd_ifm() // c1d0 f1f8 +void m68000_mcu_device::muls_w_ais_dd_ifm() // c1d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164706,7 +164706,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_aips_dd_ifm() // c1d8 f1f8 +void m68000_mcu_device::muls_w_aips_dd_ifm() // c1d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164822,7 +164822,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_pais_dd_ifm() // c1e0 f1f8 +void m68000_mcu_device::muls_w_pais_dd_ifm() // c1e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164940,7 +164940,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_das_dd_ifm() // c1e8 f1f8 +void m68000_mcu_device::muls_w_das_dd_ifm() // c1e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -165074,7 +165074,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_dais_dd_ifm() // c1f0 f1f8 +void m68000_mcu_device::muls_w_dais_dd_ifm() // c1f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -165246,7 +165246,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_adr16_dd_ifm() // c1f8 f1ff +void m68000_mcu_device::muls_w_adr16_dd_ifm() // c1f8 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -165379,7 +165379,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_adr32_dd_ifm() // c1f9 f1ff +void m68000_mcu_device::muls_w_adr32_dd_ifm() // c1f9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -165533,7 +165533,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_dpc_dd_ifm() // c1fa f1ff +void m68000_mcu_device::muls_w_dpc_dd_ifm() // c1fa f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -165666,7 +165666,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_dpci_dd_ifm() // c1fb f1ff +void m68000_mcu_device::muls_w_dpci_dd_ifm() // c1fb f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -165837,7 +165837,7 @@ mulm3: goto mulm4; } -void m68000_device::muls_w_imm16_dd_ifm() // c1fc f1ff +void m68000_mcu_device::muls_w_imm16_dd_ifm() // c1fc f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -165948,7 +165948,7 @@ mulm3: goto mulm4; } -void m68000_device::add_b_ds_dd_ifm() // d000 f1f8 +void m68000_mcu_device::add_b_ds_dd_ifm() // d000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -165990,7 +165990,7 @@ void m68000_device::add_b_ds_dd_ifm() // d000 f1f8 return; } -void m68000_device::add_b_ais_dd_ifm() // d010 f1f8 +void m68000_mcu_device::add_b_ais_dd_ifm() // d010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166053,7 +166053,7 @@ void m68000_device::add_b_ais_dd_ifm() // d010 f1f8 return; } -void m68000_device::add_b_aips_dd_ifm() // d018 f1f8 +void m68000_mcu_device::add_b_aips_dd_ifm() // d018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166120,7 +166120,7 @@ void m68000_device::add_b_aips_dd_ifm() // d018 f1f8 return; } -void m68000_device::add_b_pais_dd_ifm() // d020 f1f8 +void m68000_mcu_device::add_b_pais_dd_ifm() // d020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166189,7 +166189,7 @@ void m68000_device::add_b_pais_dd_ifm() // d020 f1f8 return; } -void m68000_device::add_b_das_dd_ifm() // d028 f1f8 +void m68000_mcu_device::add_b_das_dd_ifm() // d028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166274,7 +166274,7 @@ void m68000_device::add_b_das_dd_ifm() // d028 f1f8 return; } -void m68000_device::add_b_dais_dd_ifm() // d030 f1f8 +void m68000_mcu_device::add_b_dais_dd_ifm() // d030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166397,7 +166397,7 @@ adsw2: return; } -void m68000_device::add_b_adr16_dd_ifm() // d038 f1ff +void m68000_mcu_device::add_b_adr16_dd_ifm() // d038 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -166481,7 +166481,7 @@ void m68000_device::add_b_adr16_dd_ifm() // d038 f1ff return; } -void m68000_device::add_b_adr32_dd_ifm() // d039 f1ff +void m68000_mcu_device::add_b_adr32_dd_ifm() // d039 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -166586,7 +166586,7 @@ void m68000_device::add_b_adr32_dd_ifm() // d039 f1ff return; } -void m68000_device::add_b_dpc_dd_ifm() // d03a f1ff +void m68000_mcu_device::add_b_dpc_dd_ifm() // d03a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -166670,7 +166670,7 @@ void m68000_device::add_b_dpc_dd_ifm() // d03a f1ff return; } -void m68000_device::add_b_dpci_dd_ifm() // d03b f1ff +void m68000_mcu_device::add_b_dpci_dd_ifm() // d03b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -166792,7 +166792,7 @@ adsw2: return; } -void m68000_device::add_b_imm8_dd_ifm() // d03c f1ff +void m68000_mcu_device::add_b_imm8_dd_ifm() // d03c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -166857,7 +166857,7 @@ void m68000_device::add_b_imm8_dd_ifm() // d03c f1ff return; } -void m68000_device::add_w_ds_dd_ifm() // d040 f1f8 +void m68000_mcu_device::add_w_ds_dd_ifm() // d040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -166899,7 +166899,7 @@ void m68000_device::add_w_ds_dd_ifm() // d040 f1f8 return; } -void m68000_device::add_w_as_dd_ifm() // d048 f1f8 +void m68000_mcu_device::add_w_as_dd_ifm() // d048 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166941,7 +166941,7 @@ void m68000_device::add_w_as_dd_ifm() // d048 f1f8 return; } -void m68000_device::add_w_ais_dd_ifm() // d050 f1f8 +void m68000_mcu_device::add_w_ais_dd_ifm() // d050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -167007,7 +167007,7 @@ void m68000_device::add_w_ais_dd_ifm() // d050 f1f8 return; } -void m68000_device::add_w_aips_dd_ifm() // d058 f1f8 +void m68000_mcu_device::add_w_aips_dd_ifm() // d058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -167077,7 +167077,7 @@ void m68000_device::add_w_aips_dd_ifm() // d058 f1f8 return; } -void m68000_device::add_w_pais_dd_ifm() // d060 f1f8 +void m68000_mcu_device::add_w_pais_dd_ifm() // d060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -167149,7 +167149,7 @@ void m68000_device::add_w_pais_dd_ifm() // d060 f1f8 return; } -void m68000_device::add_w_das_dd_ifm() // d068 f1f8 +void m68000_mcu_device::add_w_das_dd_ifm() // d068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -167237,7 +167237,7 @@ void m68000_device::add_w_das_dd_ifm() // d068 f1f8 return; } -void m68000_device::add_w_dais_dd_ifm() // d070 f1f8 +void m68000_mcu_device::add_w_dais_dd_ifm() // d070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -167363,7 +167363,7 @@ adsw2: return; } -void m68000_device::add_w_adr16_dd_ifm() // d078 f1ff +void m68000_mcu_device::add_w_adr16_dd_ifm() // d078 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -167450,7 +167450,7 @@ void m68000_device::add_w_adr16_dd_ifm() // d078 f1ff return; } -void m68000_device::add_w_adr32_dd_ifm() // d079 f1ff +void m68000_mcu_device::add_w_adr32_dd_ifm() // d079 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -167558,7 +167558,7 @@ void m68000_device::add_w_adr32_dd_ifm() // d079 f1ff return; } -void m68000_device::add_w_dpc_dd_ifm() // d07a f1ff +void m68000_mcu_device::add_w_dpc_dd_ifm() // d07a f1ff { int rx = (m_irdi >> 9) & 7; // 1c2 adsw1 @@ -167645,7 +167645,7 @@ void m68000_device::add_w_dpc_dd_ifm() // d07a f1ff return; } -void m68000_device::add_w_dpci_dd_ifm() // d07b f1ff +void m68000_mcu_device::add_w_dpci_dd_ifm() // d07b f1ff { int rx = (m_irdi >> 9) & 7; // 1e3 aixl0 @@ -167770,7 +167770,7 @@ adsw2: return; } -void m68000_device::add_w_imm16_dd_ifm() // d07c f1ff +void m68000_mcu_device::add_w_imm16_dd_ifm() // d07c f1ff { int rx = (m_irdi >> 9) & 7; // 0ea e#w1 @@ -167835,7 +167835,7 @@ void m68000_device::add_w_imm16_dd_ifm() // d07c f1ff return; } -void m68000_device::add_l_ds_dd_ifm() // d080 f1f8 +void m68000_mcu_device::add_l_ds_dd_ifm() // d080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -167885,7 +167885,7 @@ void m68000_device::add_l_ds_dd_ifm() // d080 f1f8 return; } -void m68000_device::add_l_as_dd_ifm() // d088 f1f8 +void m68000_mcu_device::add_l_as_dd_ifm() // d088 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -167935,7 +167935,7 @@ void m68000_device::add_l_as_dd_ifm() // d088 f1f8 return; } -void m68000_device::add_l_ais_dd_ifm() // d090 f1f8 +void m68000_mcu_device::add_l_ais_dd_ifm() // d090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168028,7 +168028,7 @@ void m68000_device::add_l_ais_dd_ifm() // d090 f1f8 return; } -void m68000_device::add_l_aips_dd_ifm() // d098 f1f8 +void m68000_mcu_device::add_l_aips_dd_ifm() // d098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168124,7 +168124,7 @@ void m68000_device::add_l_aips_dd_ifm() // d098 f1f8 return; } -void m68000_device::add_l_pais_dd_ifm() // d0a0 f1f8 +void m68000_mcu_device::add_l_pais_dd_ifm() // d0a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168221,7 +168221,7 @@ void m68000_device::add_l_pais_dd_ifm() // d0a0 f1f8 return; } -void m68000_device::add_l_das_dd_ifm() // d0a8 f1f8 +void m68000_mcu_device::add_l_das_dd_ifm() // d0a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168335,7 +168335,7 @@ void m68000_device::add_l_das_dd_ifm() // d0a8 f1f8 return; } -void m68000_device::add_l_dais_dd_ifm() // d0b0 f1f8 +void m68000_mcu_device::add_l_dais_dd_ifm() // d0b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168487,7 +168487,7 @@ adsl2: return; } -void m68000_device::add_l_adr16_dd_ifm() // d0b8 f1ff +void m68000_mcu_device::add_l_adr16_dd_ifm() // d0b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -168603,7 +168603,7 @@ void m68000_device::add_l_adr16_dd_ifm() // d0b8 f1ff return; } -void m68000_device::add_l_adr32_dd_ifm() // d0b9 f1ff +void m68000_mcu_device::add_l_adr32_dd_ifm() // d0b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -168740,7 +168740,7 @@ void m68000_device::add_l_adr32_dd_ifm() // d0b9 f1ff return; } -void m68000_device::add_l_dpc_dd_ifm() // d0ba f1ff +void m68000_mcu_device::add_l_dpc_dd_ifm() // d0ba f1ff { int rx = (m_irdi >> 9) & 7; // 1c6 adsl1 @@ -168853,7 +168853,7 @@ void m68000_device::add_l_dpc_dd_ifm() // d0ba f1ff return; } -void m68000_device::add_l_dpci_dd_ifm() // d0bb f1ff +void m68000_mcu_device::add_l_dpci_dd_ifm() // d0bb f1ff { int rx = (m_irdi >> 9) & 7; // 1e7 aixw0 @@ -169004,7 +169004,7 @@ adsl2: return; } -void m68000_device::add_l_imm32_dd_ifm() // d0bc f1ff +void m68000_mcu_device::add_l_imm32_dd_ifm() // d0bc f1ff { int rx = (m_irdi >> 9) & 7; // 0a7 e#l1 @@ -169098,7 +169098,7 @@ void m68000_device::add_l_imm32_dd_ifm() // d0bc f1ff return; } -void m68000_device::adda_w_ds_ad_ifm() // d0c0 f1f8 +void m68000_mcu_device::adda_w_ds_ad_ifm() // d0c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -169146,7 +169146,7 @@ void m68000_device::adda_w_ds_ad_ifm() // d0c0 f1f8 return; } -void m68000_device::adda_w_as_ad_ifm() // d0c8 f1f8 +void m68000_mcu_device::adda_w_as_ad_ifm() // d0c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -169194,7 +169194,7 @@ void m68000_device::adda_w_as_ad_ifm() // d0c8 f1f8 return; } -void m68000_device::adda_w_ais_ad_ifm() // d0d0 f1f8 +void m68000_mcu_device::adda_w_ais_ad_ifm() // d0d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -169266,7 +169266,7 @@ void m68000_device::adda_w_ais_ad_ifm() // d0d0 f1f8 return; } -void m68000_device::adda_w_aips_ad_ifm() // d0d8 f1f8 +void m68000_mcu_device::adda_w_aips_ad_ifm() // d0d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -169342,7 +169342,7 @@ void m68000_device::adda_w_aips_ad_ifm() // d0d8 f1f8 return; } -void m68000_device::adda_w_pais_ad_ifm() // d0e0 f1f8 +void m68000_mcu_device::adda_w_pais_ad_ifm() // d0e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -169420,7 +169420,7 @@ void m68000_device::adda_w_pais_ad_ifm() // d0e0 f1f8 return; } -void m68000_device::adda_w_das_ad_ifm() // d0e8 f1f8 +void m68000_mcu_device::adda_w_das_ad_ifm() // d0e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -169514,7 +169514,7 @@ void m68000_device::adda_w_das_ad_ifm() // d0e8 f1f8 return; } -void m68000_device::adda_w_dais_ad_ifm() // d0f0 f1f8 +void m68000_mcu_device::adda_w_dais_ad_ifm() // d0f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -169646,7 +169646,7 @@ adsw2: return; } -void m68000_device::adda_w_adr16_ad_ifm() // d0f8 f1ff +void m68000_mcu_device::adda_w_adr16_ad_ifm() // d0f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00a abwl1 @@ -169739,7 +169739,7 @@ void m68000_device::adda_w_adr16_ad_ifm() // d0f8 f1ff return; } -void m68000_device::adda_w_adr32_ad_ifm() // d0f9 f1ff +void m68000_mcu_device::adda_w_adr32_ad_ifm() // d0f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e2 abll1 @@ -169853,7 +169853,7 @@ void m68000_device::adda_w_adr32_ad_ifm() // d0f9 f1ff return; } -void m68000_device::adda_w_dpc_ad_ifm() // d0fa f1ff +void m68000_mcu_device::adda_w_dpc_ad_ifm() // d0fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c2 adsw1 @@ -169946,7 +169946,7 @@ void m68000_device::adda_w_dpc_ad_ifm() // d0fa f1ff return; } -void m68000_device::adda_w_dpci_ad_ifm() // d0fb f1ff +void m68000_mcu_device::adda_w_dpci_ad_ifm() // d0fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e3 aixl0 @@ -170077,7 +170077,7 @@ adsw2: return; } -void m68000_device::adda_w_imm16_ad_ifm() // d0fc f1ff +void m68000_mcu_device::adda_w_imm16_ad_ifm() // d0fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0ea e#w1 @@ -170148,7 +170148,7 @@ void m68000_device::adda_w_imm16_ad_ifm() // d0fc f1ff return; } -void m68000_device::addx_b_ds_dd_ifm() // d100 f1f8 +void m68000_mcu_device::addx_b_ds_dd_ifm() // d100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -170191,7 +170191,7 @@ void m68000_device::addx_b_ds_dd_ifm() // d100 f1f8 return; } -void m68000_device::addx_b_pais_paid_ifm() // d108 f1f8 +void m68000_mcu_device::addx_b_pais_paid_ifm() // d108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -170294,7 +170294,7 @@ void m68000_device::addx_b_pais_paid_ifm() // d108 f1f8 return; } -void m68000_device::add_b_dd_ais_ifm() // d110 f1f8 +void m68000_mcu_device::add_b_dd_ais_ifm() // d110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170369,7 +170369,7 @@ void m68000_device::add_b_dd_ais_ifm() // d110 f1f8 return; } -void m68000_device::add_b_dd_aips_ifm() // d118 f1f8 +void m68000_mcu_device::add_b_dd_aips_ifm() // d118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170448,7 +170448,7 @@ void m68000_device::add_b_dd_aips_ifm() // d118 f1f8 return; } -void m68000_device::add_b_dd_pais_ifm() // d120 f1f8 +void m68000_mcu_device::add_b_dd_pais_ifm() // d120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170529,7 +170529,7 @@ void m68000_device::add_b_dd_pais_ifm() // d120 f1f8 return; } -void m68000_device::add_b_dd_das_ifm() // d128 f1f8 +void m68000_mcu_device::add_b_dd_das_ifm() // d128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170626,7 +170626,7 @@ void m68000_device::add_b_dd_das_ifm() // d128 f1f8 return; } -void m68000_device::add_b_dd_dais_ifm() // d130 f1f8 +void m68000_mcu_device::add_b_dd_dais_ifm() // d130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170761,7 +170761,7 @@ adsw2: return; } -void m68000_device::add_b_dd_adr16_ifm() // d138 f1ff +void m68000_mcu_device::add_b_dd_adr16_ifm() // d138 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -170857,7 +170857,7 @@ void m68000_device::add_b_dd_adr16_ifm() // d138 f1ff return; } -void m68000_device::add_b_dd_adr32_ifm() // d139 f1ff +void m68000_mcu_device::add_b_dd_adr32_ifm() // d139 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -170974,7 +170974,7 @@ void m68000_device::add_b_dd_adr32_ifm() // d139 f1ff return; } -void m68000_device::addx_w_ds_dd_ifm() // d140 f1f8 +void m68000_mcu_device::addx_w_ds_dd_ifm() // d140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -171017,7 +171017,7 @@ void m68000_device::addx_w_ds_dd_ifm() // d140 f1f8 return; } -void m68000_device::addx_w_pais_paid_ifm() // d148 f1f8 +void m68000_mcu_device::addx_w_pais_paid_ifm() // d148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -171131,7 +171131,7 @@ void m68000_device::addx_w_pais_paid_ifm() // d148 f1f8 return; } -void m68000_device::add_w_dd_ais_ifm() // d150 f1f8 +void m68000_mcu_device::add_w_dd_ais_ifm() // d150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171214,7 +171214,7 @@ void m68000_device::add_w_dd_ais_ifm() // d150 f1f8 return; } -void m68000_device::add_w_dd_aips_ifm() // d158 f1f8 +void m68000_mcu_device::add_w_dd_aips_ifm() // d158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171301,7 +171301,7 @@ void m68000_device::add_w_dd_aips_ifm() // d158 f1f8 return; } -void m68000_device::add_w_dd_pais_ifm() // d160 f1f8 +void m68000_mcu_device::add_w_dd_pais_ifm() // d160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171390,7 +171390,7 @@ void m68000_device::add_w_dd_pais_ifm() // d160 f1f8 return; } -void m68000_device::add_w_dd_das_ifm() // d168 f1f8 +void m68000_mcu_device::add_w_dd_das_ifm() // d168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171495,7 +171495,7 @@ void m68000_device::add_w_dd_das_ifm() // d168 f1f8 return; } -void m68000_device::add_w_dd_dais_ifm() // d170 f1f8 +void m68000_mcu_device::add_w_dd_dais_ifm() // d170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171638,7 +171638,7 @@ adsw2: return; } -void m68000_device::add_w_dd_adr16_ifm() // d178 f1ff +void m68000_mcu_device::add_w_dd_adr16_ifm() // d178 f1ff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -171742,7 +171742,7 @@ void m68000_device::add_w_dd_adr16_ifm() // d178 f1ff return; } -void m68000_device::add_w_dd_adr32_ifm() // d179 f1ff +void m68000_mcu_device::add_w_dd_adr32_ifm() // d179 f1ff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -171867,7 +171867,7 @@ void m68000_device::add_w_dd_adr32_ifm() // d179 f1ff return; } -void m68000_device::addx_l_ds_dd_ifm() // d180 f1f8 +void m68000_mcu_device::addx_l_ds_dd_ifm() // d180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -171919,7 +171919,7 @@ void m68000_device::addx_l_ds_dd_ifm() // d180 f1f8 return; } -void m68000_device::addx_l_pais_paid_ifm() // d188 f1f8 +void m68000_mcu_device::addx_l_pais_paid_ifm() // d188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -172100,7 +172100,7 @@ void m68000_device::addx_l_pais_paid_ifm() // d188 f1f8 return; } -void m68000_device::add_l_dd_ais_ifm() // d190 f1f8 +void m68000_mcu_device::add_l_dd_ais_ifm() // d190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -172227,7 +172227,7 @@ void m68000_device::add_l_dd_ais_ifm() // d190 f1f8 return; } -void m68000_device::add_l_dd_aips_ifm() // d198 f1f8 +void m68000_mcu_device::add_l_dd_aips_ifm() // d198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -172357,7 +172357,7 @@ void m68000_device::add_l_dd_aips_ifm() // d198 f1f8 return; } -void m68000_device::add_l_dd_pais_ifm() // d1a0 f1f8 +void m68000_mcu_device::add_l_dd_pais_ifm() // d1a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -172488,7 +172488,7 @@ void m68000_device::add_l_dd_pais_ifm() // d1a0 f1f8 return; } -void m68000_device::add_l_dd_das_ifm() // d1a8 f1f8 +void m68000_mcu_device::add_l_dd_das_ifm() // d1a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -172636,7 +172636,7 @@ void m68000_device::add_l_dd_das_ifm() // d1a8 f1f8 return; } -void m68000_device::add_l_dd_dais_ifm() // d1b0 f1f8 +void m68000_mcu_device::add_l_dd_dais_ifm() // d1b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -172822,7 +172822,7 @@ adsl2: return; } -void m68000_device::add_l_dd_adr16_ifm() // d1b8 f1ff +void m68000_mcu_device::add_l_dd_adr16_ifm() // d1b8 f1ff { int rx = (m_irdi >> 9) & 7; // 00e abww1 @@ -172972,7 +172972,7 @@ void m68000_device::add_l_dd_adr16_ifm() // d1b8 f1ff return; } -void m68000_device::add_l_dd_adr32_ifm() // d1b9 f1ff +void m68000_mcu_device::add_l_dd_adr32_ifm() // d1b9 f1ff { int rx = (m_irdi >> 9) & 7; // 1e6 ablw1 @@ -173143,7 +173143,7 @@ void m68000_device::add_l_dd_adr32_ifm() // d1b9 f1ff return; } -void m68000_device::adda_l_ds_ad_ifm() // d1c0 f1f8 +void m68000_mcu_device::adda_l_ds_ad_ifm() // d1c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -173191,7 +173191,7 @@ void m68000_device::adda_l_ds_ad_ifm() // d1c0 f1f8 return; } -void m68000_device::adda_l_as_ad_ifm() // d1c8 f1f8 +void m68000_mcu_device::adda_l_as_ad_ifm() // d1c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -173239,7 +173239,7 @@ void m68000_device::adda_l_as_ad_ifm() // d1c8 f1f8 return; } -void m68000_device::adda_l_ais_ad_ifm() // d1d0 f1f8 +void m68000_mcu_device::adda_l_ais_ad_ifm() // d1d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -173330,7 +173330,7 @@ void m68000_device::adda_l_ais_ad_ifm() // d1d0 f1f8 return; } -void m68000_device::adda_l_aips_ad_ifm() // d1d8 f1f8 +void m68000_mcu_device::adda_l_aips_ad_ifm() // d1d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -173424,7 +173424,7 @@ void m68000_device::adda_l_aips_ad_ifm() // d1d8 f1f8 return; } -void m68000_device::adda_l_pais_ad_ifm() // d1e0 f1f8 +void m68000_mcu_device::adda_l_pais_ad_ifm() // d1e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -173519,7 +173519,7 @@ void m68000_device::adda_l_pais_ad_ifm() // d1e0 f1f8 return; } -void m68000_device::adda_l_das_ad_ifm() // d1e8 f1f8 +void m68000_mcu_device::adda_l_das_ad_ifm() // d1e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -173631,7 +173631,7 @@ void m68000_device::adda_l_das_ad_ifm() // d1e8 f1f8 return; } -void m68000_device::adda_l_dais_ad_ifm() // d1f0 f1f8 +void m68000_mcu_device::adda_l_dais_ad_ifm() // d1f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -173781,7 +173781,7 @@ adsl2: return; } -void m68000_device::adda_l_adr16_ad_ifm() // d1f8 f1ff +void m68000_mcu_device::adda_l_adr16_ad_ifm() // d1f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 00e abww1 @@ -173895,7 +173895,7 @@ void m68000_device::adda_l_adr16_ad_ifm() // d1f8 f1ff return; } -void m68000_device::adda_l_adr32_ad_ifm() // d1f9 f1ff +void m68000_mcu_device::adda_l_adr32_ad_ifm() // d1f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e6 ablw1 @@ -174030,7 +174030,7 @@ void m68000_device::adda_l_adr32_ad_ifm() // d1f9 f1ff return; } -void m68000_device::adda_l_dpc_ad_ifm() // d1fa f1ff +void m68000_mcu_device::adda_l_dpc_ad_ifm() // d1fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1c6 adsl1 @@ -174141,7 +174141,7 @@ void m68000_device::adda_l_dpc_ad_ifm() // d1fa f1ff return; } -void m68000_device::adda_l_dpci_ad_ifm() // d1fb f1ff +void m68000_mcu_device::adda_l_dpci_ad_ifm() // d1fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 1e7 aixw0 @@ -174290,7 +174290,7 @@ adsl2: return; } -void m68000_device::adda_l_imm32_ad_ifm() // d1fc f1ff +void m68000_mcu_device::adda_l_imm32_ad_ifm() // d1fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); // 0a7 e#l1 @@ -174382,7 +174382,7 @@ void m68000_device::adda_l_imm32_ad_ifm() // d1fc f1ff return; } -void m68000_device::asr_b_imm3_ds_ifm() // e000 f1f8 +void m68000_mcu_device::asr_b_imm3_ds_ifm() // e000 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -174447,7 +174447,7 @@ nbcr3: return; } -void m68000_device::lsr_b_imm3_ds_ifm() // e008 f1f8 +void m68000_mcu_device::lsr_b_imm3_ds_ifm() // e008 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -174512,7 +174512,7 @@ nbcr3: return; } -void m68000_device::roxr_b_imm3_ds_ifm() // e010 f1f8 +void m68000_mcu_device::roxr_b_imm3_ds_ifm() // e010 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -174577,7 +174577,7 @@ nbcr3: return; } -void m68000_device::ror_b_imm3_ds_ifm() // e018 f1f8 +void m68000_mcu_device::ror_b_imm3_ds_ifm() // e018 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -174642,7 +174642,7 @@ nbcr3: return; } -void m68000_device::asr_b_dd_ds_ifm() // e020 f1f8 +void m68000_mcu_device::asr_b_dd_ds_ifm() // e020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -174708,7 +174708,7 @@ nbcr3: return; } -void m68000_device::lsr_b_dd_ds_ifm() // e028 f1f8 +void m68000_mcu_device::lsr_b_dd_ds_ifm() // e028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -174774,7 +174774,7 @@ nbcr3: return; } -void m68000_device::roxr_b_dd_ds_ifm() // e030 f1f8 +void m68000_mcu_device::roxr_b_dd_ds_ifm() // e030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -174840,7 +174840,7 @@ nbcr3: return; } -void m68000_device::ror_b_dd_ds_ifm() // e038 f1f8 +void m68000_mcu_device::ror_b_dd_ds_ifm() // e038 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -174906,7 +174906,7 @@ nbcr3: return; } -void m68000_device::asr_w_imm3_ds_ifm() // e040 f1f8 +void m68000_mcu_device::asr_w_imm3_ds_ifm() // e040 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -174971,7 +174971,7 @@ nbcr3: return; } -void m68000_device::lsr_w_imm3_ds_ifm() // e048 f1f8 +void m68000_mcu_device::lsr_w_imm3_ds_ifm() // e048 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -175036,7 +175036,7 @@ nbcr3: return; } -void m68000_device::roxr_w_imm3_ds_ifm() // e050 f1f8 +void m68000_mcu_device::roxr_w_imm3_ds_ifm() // e050 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -175101,7 +175101,7 @@ nbcr3: return; } -void m68000_device::ror_w_imm3_ds_ifm() // e058 f1f8 +void m68000_mcu_device::ror_w_imm3_ds_ifm() // e058 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -175166,7 +175166,7 @@ nbcr3: return; } -void m68000_device::asr_w_dd_ds_ifm() // e060 f1f8 +void m68000_mcu_device::asr_w_dd_ds_ifm() // e060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -175232,7 +175232,7 @@ nbcr3: return; } -void m68000_device::lsr_w_dd_ds_ifm() // e068 f1f8 +void m68000_mcu_device::lsr_w_dd_ds_ifm() // e068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -175298,7 +175298,7 @@ nbcr3: return; } -void m68000_device::roxr_w_dd_ds_ifm() // e070 f1f8 +void m68000_mcu_device::roxr_w_dd_ds_ifm() // e070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -175364,7 +175364,7 @@ nbcr3: return; } -void m68000_device::ror_w_dd_ds_ifm() // e078 f1f8 +void m68000_mcu_device::ror_w_dd_ds_ifm() // e078 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -175430,7 +175430,7 @@ nbcr3: return; } -void m68000_device::asr_l_imm3_ds_ifm() // e080 f1f8 +void m68000_mcu_device::asr_l_imm3_ds_ifm() // e080 f1f8 { int ry = m_irdi & 7; // 385 srrl1 @@ -175501,7 +175501,7 @@ srrl4: return; } -void m68000_device::lsr_l_imm3_ds_ifm() // e088 f1f8 +void m68000_mcu_device::lsr_l_imm3_ds_ifm() // e088 f1f8 { int ry = m_irdi & 7; // 385 srrl1 @@ -175572,7 +175572,7 @@ srrl4: return; } -void m68000_device::roxr_l_imm3_ds_ifm() // e090 f1f8 +void m68000_mcu_device::roxr_l_imm3_ds_ifm() // e090 f1f8 { int ry = m_irdi & 7; // 385 srrl1 @@ -175643,7 +175643,7 @@ srrl4: return; } -void m68000_device::ror_l_imm3_ds_ifm() // e098 f1f8 +void m68000_mcu_device::ror_l_imm3_ds_ifm() // e098 f1f8 { int ry = m_irdi & 7; // 385 srrl1 @@ -175714,7 +175714,7 @@ srrl4: return; } -void m68000_device::asr_l_dd_ds_ifm() // e0a0 f1f8 +void m68000_mcu_device::asr_l_dd_ds_ifm() // e0a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -175786,7 +175786,7 @@ srrl4: return; } -void m68000_device::lsr_l_dd_ds_ifm() // e0a8 f1f8 +void m68000_mcu_device::lsr_l_dd_ds_ifm() // e0a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -175858,7 +175858,7 @@ srrl4: return; } -void m68000_device::roxr_l_dd_ds_ifm() // e0b0 f1f8 +void m68000_mcu_device::roxr_l_dd_ds_ifm() // e0b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -175930,7 +175930,7 @@ srrl4: return; } -void m68000_device::ror_l_dd_ds_ifm() // e0b8 f1f8 +void m68000_mcu_device::ror_l_dd_ds_ifm() // e0b8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -176002,7 +176002,7 @@ srrl4: return; } -void m68000_device::asr_ais_ifm() // e0d0 fff8 +void m68000_mcu_device::asr_ais_ifm() // e0d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -176090,7 +176090,7 @@ void m68000_device::asr_ais_ifm() // e0d0 fff8 return; } -void m68000_device::asr_aips_ifm() // e0d8 fff8 +void m68000_mcu_device::asr_aips_ifm() // e0d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -176182,7 +176182,7 @@ void m68000_device::asr_aips_ifm() // e0d8 fff8 return; } -void m68000_device::asr_pais_ifm() // e0e0 fff8 +void m68000_mcu_device::asr_pais_ifm() // e0e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -176276,7 +176276,7 @@ void m68000_device::asr_pais_ifm() // e0e0 fff8 return; } -void m68000_device::asr_das_ifm() // e0e8 fff8 +void m68000_mcu_device::asr_das_ifm() // e0e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -176386,7 +176386,7 @@ void m68000_device::asr_das_ifm() // e0e8 fff8 return; } -void m68000_device::asr_dais_ifm() // e0f0 fff8 +void m68000_mcu_device::asr_dais_ifm() // e0f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -176534,7 +176534,7 @@ adsw2: return; } -void m68000_device::asr_adr16_ifm() // e0f8 ffff +void m68000_mcu_device::asr_adr16_ifm() // e0f8 ffff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -176643,7 +176643,7 @@ void m68000_device::asr_adr16_ifm() // e0f8 ffff return; } -void m68000_device::asr_adr32_ifm() // e0f9 ffff +void m68000_mcu_device::asr_adr32_ifm() // e0f9 ffff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -176773,7 +176773,7 @@ void m68000_device::asr_adr32_ifm() // e0f9 ffff return; } -void m68000_device::asl_b_imm3_ds_ifm() // e100 f1f8 +void m68000_mcu_device::asl_b_imm3_ds_ifm() // e100 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -176838,7 +176838,7 @@ nbcr3: return; } -void m68000_device::lsl_b_imm3_ds_ifm() // e108 f1f8 +void m68000_mcu_device::lsl_b_imm3_ds_ifm() // e108 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -176904,7 +176904,7 @@ nbcr3: return; } -void m68000_device::roxl_b_imm3_ds_ifm() // e110 f1f8 +void m68000_mcu_device::roxl_b_imm3_ds_ifm() // e110 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -176969,7 +176969,7 @@ nbcr3: return; } -void m68000_device::rol_b_imm3_ds_ifm() // e118 f1f8 +void m68000_mcu_device::rol_b_imm3_ds_ifm() // e118 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -177034,7 +177034,7 @@ nbcr3: return; } -void m68000_device::asl_b_dd_ds_ifm() // e120 f1f8 +void m68000_mcu_device::asl_b_dd_ds_ifm() // e120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -177100,7 +177100,7 @@ nbcr3: return; } -void m68000_device::lsl_b_dd_ds_ifm() // e128 f1f8 +void m68000_mcu_device::lsl_b_dd_ds_ifm() // e128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -177167,7 +177167,7 @@ nbcr3: return; } -void m68000_device::roxl_b_dd_ds_ifm() // e130 f1f8 +void m68000_mcu_device::roxl_b_dd_ds_ifm() // e130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -177233,7 +177233,7 @@ nbcr3: return; } -void m68000_device::rol_b_dd_ds_ifm() // e138 f1f8 +void m68000_mcu_device::rol_b_dd_ds_ifm() // e138 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -177299,7 +177299,7 @@ nbcr3: return; } -void m68000_device::asl_w_imm3_ds_ifm() // e140 f1f8 +void m68000_mcu_device::asl_w_imm3_ds_ifm() // e140 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -177364,7 +177364,7 @@ nbcr3: return; } -void m68000_device::lsl_w_imm3_ds_ifm() // e148 f1f8 +void m68000_mcu_device::lsl_w_imm3_ds_ifm() // e148 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -177430,7 +177430,7 @@ nbcr3: return; } -void m68000_device::roxl_w_imm3_ds_ifm() // e150 f1f8 +void m68000_mcu_device::roxl_w_imm3_ds_ifm() // e150 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -177495,7 +177495,7 @@ nbcr3: return; } -void m68000_device::rol_w_imm3_ds_ifm() // e158 f1f8 +void m68000_mcu_device::rol_w_imm3_ds_ifm() // e158 f1f8 { int ry = m_irdi & 7; // 381 srrw1 @@ -177560,7 +177560,7 @@ nbcr3: return; } -void m68000_device::asl_w_dd_ds_ifm() // e160 f1f8 +void m68000_mcu_device::asl_w_dd_ds_ifm() // e160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -177626,7 +177626,7 @@ nbcr3: return; } -void m68000_device::lsl_w_dd_ds_ifm() // e168 f1f8 +void m68000_mcu_device::lsl_w_dd_ds_ifm() // e168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -177693,7 +177693,7 @@ nbcr3: return; } -void m68000_device::roxl_w_dd_ds_ifm() // e170 f1f8 +void m68000_mcu_device::roxl_w_dd_ds_ifm() // e170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -177759,7 +177759,7 @@ nbcr3: return; } -void m68000_device::rol_w_dd_ds_ifm() // e178 f1f8 +void m68000_mcu_device::rol_w_dd_ds_ifm() // e178 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -177825,7 +177825,7 @@ nbcr3: return; } -void m68000_device::asl_l_imm3_ds_ifm() // e180 f1f8 +void m68000_mcu_device::asl_l_imm3_ds_ifm() // e180 f1f8 { int ry = m_irdi & 7; // 385 srrl1 @@ -177896,7 +177896,7 @@ srrl4: return; } -void m68000_device::lsl_l_imm3_ds_ifm() // e188 f1f8 +void m68000_mcu_device::lsl_l_imm3_ds_ifm() // e188 f1f8 { int ry = m_irdi & 7; // 385 srrl1 @@ -177969,7 +177969,7 @@ srrl4: return; } -void m68000_device::roxl_l_imm3_ds_ifm() // e190 f1f8 +void m68000_mcu_device::roxl_l_imm3_ds_ifm() // e190 f1f8 { int ry = m_irdi & 7; // 385 srrl1 @@ -178040,7 +178040,7 @@ srrl4: return; } -void m68000_device::rol_l_imm3_ds_ifm() // e198 f1f8 +void m68000_mcu_device::rol_l_imm3_ds_ifm() // e198 f1f8 { int ry = m_irdi & 7; // 385 srrl1 @@ -178111,7 +178111,7 @@ srrl4: return; } -void m68000_device::asl_l_dd_ds_ifm() // e1a0 f1f8 +void m68000_mcu_device::asl_l_dd_ds_ifm() // e1a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -178183,7 +178183,7 @@ srrl4: return; } -void m68000_device::lsl_l_dd_ds_ifm() // e1a8 f1f8 +void m68000_mcu_device::lsl_l_dd_ds_ifm() // e1a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -178257,7 +178257,7 @@ srrl4: return; } -void m68000_device::roxl_l_dd_ds_ifm() // e1b0 f1f8 +void m68000_mcu_device::roxl_l_dd_ds_ifm() // e1b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -178329,7 +178329,7 @@ srrl4: return; } -void m68000_device::rol_l_dd_ds_ifm() // e1b8 f1f8 +void m68000_mcu_device::rol_l_dd_ds_ifm() // e1b8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -178401,7 +178401,7 @@ srrl4: return; } -void m68000_device::asl_ais_ifm() // e1d0 fff8 +void m68000_mcu_device::asl_ais_ifm() // e1d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178489,7 +178489,7 @@ void m68000_device::asl_ais_ifm() // e1d0 fff8 return; } -void m68000_device::asl_aips_ifm() // e1d8 fff8 +void m68000_mcu_device::asl_aips_ifm() // e1d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178581,7 +178581,7 @@ void m68000_device::asl_aips_ifm() // e1d8 fff8 return; } -void m68000_device::asl_pais_ifm() // e1e0 fff8 +void m68000_mcu_device::asl_pais_ifm() // e1e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178675,7 +178675,7 @@ void m68000_device::asl_pais_ifm() // e1e0 fff8 return; } -void m68000_device::asl_das_ifm() // e1e8 fff8 +void m68000_mcu_device::asl_das_ifm() // e1e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178785,7 +178785,7 @@ void m68000_device::asl_das_ifm() // e1e8 fff8 return; } -void m68000_device::asl_dais_ifm() // e1f0 fff8 +void m68000_mcu_device::asl_dais_ifm() // e1f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178933,7 +178933,7 @@ adsw2: return; } -void m68000_device::asl_adr16_ifm() // e1f8 ffff +void m68000_mcu_device::asl_adr16_ifm() // e1f8 ffff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -179042,7 +179042,7 @@ void m68000_device::asl_adr16_ifm() // e1f8 ffff return; } -void m68000_device::asl_adr32_ifm() // e1f9 ffff +void m68000_mcu_device::asl_adr32_ifm() // e1f9 ffff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -179172,7 +179172,7 @@ void m68000_device::asl_adr32_ifm() // e1f9 ffff return; } -void m68000_device::lsr_ais_ifm() // e2d0 fff8 +void m68000_mcu_device::lsr_ais_ifm() // e2d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179260,7 +179260,7 @@ void m68000_device::lsr_ais_ifm() // e2d0 fff8 return; } -void m68000_device::lsr_aips_ifm() // e2d8 fff8 +void m68000_mcu_device::lsr_aips_ifm() // e2d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179352,7 +179352,7 @@ void m68000_device::lsr_aips_ifm() // e2d8 fff8 return; } -void m68000_device::lsr_pais_ifm() // e2e0 fff8 +void m68000_mcu_device::lsr_pais_ifm() // e2e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179446,7 +179446,7 @@ void m68000_device::lsr_pais_ifm() // e2e0 fff8 return; } -void m68000_device::lsr_das_ifm() // e2e8 fff8 +void m68000_mcu_device::lsr_das_ifm() // e2e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179556,7 +179556,7 @@ void m68000_device::lsr_das_ifm() // e2e8 fff8 return; } -void m68000_device::lsr_dais_ifm() // e2f0 fff8 +void m68000_mcu_device::lsr_dais_ifm() // e2f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179704,7 +179704,7 @@ adsw2: return; } -void m68000_device::lsr_adr16_ifm() // e2f8 ffff +void m68000_mcu_device::lsr_adr16_ifm() // e2f8 ffff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -179813,7 +179813,7 @@ void m68000_device::lsr_adr16_ifm() // e2f8 ffff return; } -void m68000_device::lsr_adr32_ifm() // e2f9 ffff +void m68000_mcu_device::lsr_adr32_ifm() // e2f9 ffff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -179943,7 +179943,7 @@ void m68000_device::lsr_adr32_ifm() // e2f9 ffff return; } -void m68000_device::lsl_ais_ifm() // e3d0 fff8 +void m68000_mcu_device::lsl_ais_ifm() // e3d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180033,7 +180033,7 @@ void m68000_device::lsl_ais_ifm() // e3d0 fff8 return; } -void m68000_device::lsl_aips_ifm() // e3d8 fff8 +void m68000_mcu_device::lsl_aips_ifm() // e3d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180128,7 +180128,7 @@ void m68000_device::lsl_aips_ifm() // e3d8 fff8 return; } -void m68000_device::lsl_pais_ifm() // e3e0 fff8 +void m68000_mcu_device::lsl_pais_ifm() // e3e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180225,7 +180225,7 @@ void m68000_device::lsl_pais_ifm() // e3e0 fff8 return; } -void m68000_device::lsl_das_ifm() // e3e8 fff8 +void m68000_mcu_device::lsl_das_ifm() // e3e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180338,7 +180338,7 @@ void m68000_device::lsl_das_ifm() // e3e8 fff8 return; } -void m68000_device::lsl_dais_ifm() // e3f0 fff8 +void m68000_mcu_device::lsl_dais_ifm() // e3f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180491,7 +180491,7 @@ adsw2: return; } -void m68000_device::lsl_adr16_ifm() // e3f8 ffff +void m68000_mcu_device::lsl_adr16_ifm() // e3f8 ffff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -180603,7 +180603,7 @@ void m68000_device::lsl_adr16_ifm() // e3f8 ffff return; } -void m68000_device::lsl_adr32_ifm() // e3f9 ffff +void m68000_mcu_device::lsl_adr32_ifm() // e3f9 ffff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -180737,7 +180737,7 @@ void m68000_device::lsl_adr32_ifm() // e3f9 ffff return; } -void m68000_device::roxr_ais_ifm() // e4d0 fff8 +void m68000_mcu_device::roxr_ais_ifm() // e4d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180825,7 +180825,7 @@ void m68000_device::roxr_ais_ifm() // e4d0 fff8 return; } -void m68000_device::roxr_aips_ifm() // e4d8 fff8 +void m68000_mcu_device::roxr_aips_ifm() // e4d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180917,7 +180917,7 @@ void m68000_device::roxr_aips_ifm() // e4d8 fff8 return; } -void m68000_device::roxr_pais_ifm() // e4e0 fff8 +void m68000_mcu_device::roxr_pais_ifm() // e4e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181011,7 +181011,7 @@ void m68000_device::roxr_pais_ifm() // e4e0 fff8 return; } -void m68000_device::roxr_das_ifm() // e4e8 fff8 +void m68000_mcu_device::roxr_das_ifm() // e4e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181121,7 +181121,7 @@ void m68000_device::roxr_das_ifm() // e4e8 fff8 return; } -void m68000_device::roxr_dais_ifm() // e4f0 fff8 +void m68000_mcu_device::roxr_dais_ifm() // e4f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181269,7 +181269,7 @@ adsw2: return; } -void m68000_device::roxr_adr16_ifm() // e4f8 ffff +void m68000_mcu_device::roxr_adr16_ifm() // e4f8 ffff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -181378,7 +181378,7 @@ void m68000_device::roxr_adr16_ifm() // e4f8 ffff return; } -void m68000_device::roxr_adr32_ifm() // e4f9 ffff +void m68000_mcu_device::roxr_adr32_ifm() // e4f9 ffff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -181508,7 +181508,7 @@ void m68000_device::roxr_adr32_ifm() // e4f9 ffff return; } -void m68000_device::roxl_ais_ifm() // e5d0 fff8 +void m68000_mcu_device::roxl_ais_ifm() // e5d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181596,7 +181596,7 @@ void m68000_device::roxl_ais_ifm() // e5d0 fff8 return; } -void m68000_device::roxl_aips_ifm() // e5d8 fff8 +void m68000_mcu_device::roxl_aips_ifm() // e5d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181688,7 +181688,7 @@ void m68000_device::roxl_aips_ifm() // e5d8 fff8 return; } -void m68000_device::roxl_pais_ifm() // e5e0 fff8 +void m68000_mcu_device::roxl_pais_ifm() // e5e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181782,7 +181782,7 @@ void m68000_device::roxl_pais_ifm() // e5e0 fff8 return; } -void m68000_device::roxl_das_ifm() // e5e8 fff8 +void m68000_mcu_device::roxl_das_ifm() // e5e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181892,7 +181892,7 @@ void m68000_device::roxl_das_ifm() // e5e8 fff8 return; } -void m68000_device::roxl_dais_ifm() // e5f0 fff8 +void m68000_mcu_device::roxl_dais_ifm() // e5f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182040,7 +182040,7 @@ adsw2: return; } -void m68000_device::roxl_adr16_ifm() // e5f8 ffff +void m68000_mcu_device::roxl_adr16_ifm() // e5f8 ffff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -182149,7 +182149,7 @@ void m68000_device::roxl_adr16_ifm() // e5f8 ffff return; } -void m68000_device::roxl_adr32_ifm() // e5f9 ffff +void m68000_mcu_device::roxl_adr32_ifm() // e5f9 ffff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -182279,7 +182279,7 @@ void m68000_device::roxl_adr32_ifm() // e5f9 ffff return; } -void m68000_device::ror_ais_ifm() // e6d0 fff8 +void m68000_mcu_device::ror_ais_ifm() // e6d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182367,7 +182367,7 @@ void m68000_device::ror_ais_ifm() // e6d0 fff8 return; } -void m68000_device::ror_aips_ifm() // e6d8 fff8 +void m68000_mcu_device::ror_aips_ifm() // e6d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182459,7 +182459,7 @@ void m68000_device::ror_aips_ifm() // e6d8 fff8 return; } -void m68000_device::ror_pais_ifm() // e6e0 fff8 +void m68000_mcu_device::ror_pais_ifm() // e6e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182553,7 +182553,7 @@ void m68000_device::ror_pais_ifm() // e6e0 fff8 return; } -void m68000_device::ror_das_ifm() // e6e8 fff8 +void m68000_mcu_device::ror_das_ifm() // e6e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182663,7 +182663,7 @@ void m68000_device::ror_das_ifm() // e6e8 fff8 return; } -void m68000_device::ror_dais_ifm() // e6f0 fff8 +void m68000_mcu_device::ror_dais_ifm() // e6f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182811,7 +182811,7 @@ adsw2: return; } -void m68000_device::ror_adr16_ifm() // e6f8 ffff +void m68000_mcu_device::ror_adr16_ifm() // e6f8 ffff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -182920,7 +182920,7 @@ void m68000_device::ror_adr16_ifm() // e6f8 ffff return; } -void m68000_device::ror_adr32_ifm() // e6f9 ffff +void m68000_mcu_device::ror_adr32_ifm() // e6f9 ffff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -183050,7 +183050,7 @@ void m68000_device::ror_adr32_ifm() // e6f9 ffff return; } -void m68000_device::rol_ais_ifm() // e7d0 fff8 +void m68000_mcu_device::rol_ais_ifm() // e7d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183138,7 +183138,7 @@ void m68000_device::rol_ais_ifm() // e7d0 fff8 return; } -void m68000_device::rol_aips_ifm() // e7d8 fff8 +void m68000_mcu_device::rol_aips_ifm() // e7d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183230,7 +183230,7 @@ void m68000_device::rol_aips_ifm() // e7d8 fff8 return; } -void m68000_device::rol_pais_ifm() // e7e0 fff8 +void m68000_mcu_device::rol_pais_ifm() // e7e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183324,7 +183324,7 @@ void m68000_device::rol_pais_ifm() // e7e0 fff8 return; } -void m68000_device::rol_das_ifm() // e7e8 fff8 +void m68000_mcu_device::rol_das_ifm() // e7e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183434,7 +183434,7 @@ void m68000_device::rol_das_ifm() // e7e8 fff8 return; } -void m68000_device::rol_dais_ifm() // e7f0 fff8 +void m68000_mcu_device::rol_dais_ifm() // e7f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183582,7 +183582,7 @@ adsw2: return; } -void m68000_device::rol_adr16_ifm() // e7f8 ffff +void m68000_mcu_device::rol_adr16_ifm() // e7f8 ffff { int rx = (m_irdi >> 9) & 7; // 00a abwl1 @@ -183691,7 +183691,7 @@ void m68000_device::rol_adr16_ifm() // e7f8 ffff return; } -void m68000_device::rol_adr32_ifm() // e7f9 ffff +void m68000_mcu_device::rol_adr32_ifm() // e7f9 ffff { int rx = (m_irdi >> 9) & 7; // 1e2 abll1 @@ -183821,1540 +183821,1540 @@ void m68000_device::rol_adr32_ifm() // e7f9 ffff return; } -const m68000_device::handler m68000_device::s_handlers_ifm[] = { - &m68000_device::state_reset_ifm, - &m68000_device::state_bus_error_ifm, - &m68000_device::state_address_error_ifm, - &m68000_device::state_double_fault_ifm, - &m68000_device::state_interrupt_ifm, - &m68000_device::state_trace_ifm, - &m68000_device::state_illegal_ifm, - &m68000_device::state_priviledge_ifm, - &m68000_device::state_linea_ifm, - &m68000_device::state_linef_ifm, - &m68000_device::ori_b_imm8_ds_ifm, - &m68000_device::ori_b_imm8_ais_ifm, - &m68000_device::ori_b_imm8_aips_ifm, - &m68000_device::ori_b_imm8_pais_ifm, - &m68000_device::ori_b_imm8_das_ifm, - &m68000_device::ori_b_imm8_dais_ifm, - &m68000_device::ori_b_imm8_adr16_ifm, - &m68000_device::ori_b_imm8_adr32_ifm, - &m68000_device::ori_imm8_ccr_ifm, - &m68000_device::ori_w_imm16_ds_ifm, - &m68000_device::ori_w_imm16_ais_ifm, - &m68000_device::ori_w_imm16_aips_ifm, - &m68000_device::ori_w_imm16_pais_ifm, - &m68000_device::ori_w_imm16_das_ifm, - &m68000_device::ori_w_imm16_dais_ifm, - &m68000_device::ori_w_imm16_adr16_ifm, - &m68000_device::ori_w_imm16_adr32_ifm, - &m68000_device::ori_i16u_sr_ifm, - &m68000_device::ori_l_imm32_ds_ifm, - &m68000_device::ori_l_imm32_ais_ifm, - &m68000_device::ori_l_imm32_aips_ifm, - &m68000_device::ori_l_imm32_pais_ifm, - &m68000_device::ori_l_imm32_das_ifm, - &m68000_device::ori_l_imm32_dais_ifm, - &m68000_device::ori_l_imm32_adr16_ifm, - &m68000_device::ori_l_imm32_adr32_ifm, - &m68000_device::btst_dd_ds_ifm, - &m68000_device::movep_w_das_dd_ifm, - &m68000_device::btst_dd_ais_ifm, - &m68000_device::btst_dd_aips_ifm, - &m68000_device::btst_dd_pais_ifm, - &m68000_device::btst_dd_das_ifm, - &m68000_device::btst_dd_dais_ifm, - &m68000_device::btst_dd_adr16_ifm, - &m68000_device::btst_dd_adr32_ifm, - &m68000_device::btst_dd_dpc_ifm, - &m68000_device::btst_dd_dpci_ifm, - &m68000_device::btst_dd_imm_ifm, - &m68000_device::bchg_dd_ds_ifm, - &m68000_device::movep_l_das_dd_ifm, - &m68000_device::bchg_dd_ais_ifm, - &m68000_device::bchg_dd_aips_ifm, - &m68000_device::bchg_dd_pais_ifm, - &m68000_device::bchg_dd_das_ifm, - &m68000_device::bchg_dd_dais_ifm, - &m68000_device::bchg_dd_adr16_ifm, - &m68000_device::bchg_dd_adr32_ifm, - &m68000_device::bclr_dd_ds_ifm, - &m68000_device::movep_w_dd_das_ifm, - &m68000_device::bclr_dd_ais_ifm, - &m68000_device::bclr_dd_aips_ifm, - &m68000_device::bclr_dd_pais_ifm, - &m68000_device::bclr_dd_das_ifm, - &m68000_device::bclr_dd_dais_ifm, - &m68000_device::bclr_dd_adr16_ifm, - &m68000_device::bclr_dd_adr32_ifm, - &m68000_device::bset_dd_ds_ifm, - &m68000_device::movep_l_dd_das_ifm, - &m68000_device::bset_dd_ais_ifm, - &m68000_device::bset_dd_aips_ifm, - &m68000_device::bset_dd_pais_ifm, - &m68000_device::bset_dd_das_ifm, - &m68000_device::bset_dd_dais_ifm, - &m68000_device::bset_dd_adr16_ifm, - &m68000_device::bset_dd_adr32_ifm, - &m68000_device::andi_b_imm8_ds_ifm, - &m68000_device::andi_b_imm8_ais_ifm, - &m68000_device::andi_b_imm8_aips_ifm, - &m68000_device::andi_b_imm8_pais_ifm, - &m68000_device::andi_b_imm8_das_ifm, - &m68000_device::andi_b_imm8_dais_ifm, - &m68000_device::andi_b_imm8_adr16_ifm, - &m68000_device::andi_b_imm8_adr32_ifm, - &m68000_device::andi_imm8_ccr_ifm, - &m68000_device::andi_w_imm16_ds_ifm, - &m68000_device::andi_w_imm16_ais_ifm, - &m68000_device::andi_w_imm16_aips_ifm, - &m68000_device::andi_w_imm16_pais_ifm, - &m68000_device::andi_w_imm16_das_ifm, - &m68000_device::andi_w_imm16_dais_ifm, - &m68000_device::andi_w_imm16_adr16_ifm, - &m68000_device::andi_w_imm16_adr32_ifm, - &m68000_device::andi_i16u_sr_ifm, - &m68000_device::andi_l_imm32_ds_ifm, - &m68000_device::andi_l_imm32_ais_ifm, - &m68000_device::andi_l_imm32_aips_ifm, - &m68000_device::andi_l_imm32_pais_ifm, - &m68000_device::andi_l_imm32_das_ifm, - &m68000_device::andi_l_imm32_dais_ifm, - &m68000_device::andi_l_imm32_adr16_ifm, - &m68000_device::andi_l_imm32_adr32_ifm, - &m68000_device::subi_b_imm8_ds_ifm, - &m68000_device::subi_b_imm8_ais_ifm, - &m68000_device::subi_b_imm8_aips_ifm, - &m68000_device::subi_b_imm8_pais_ifm, - &m68000_device::subi_b_imm8_das_ifm, - &m68000_device::subi_b_imm8_dais_ifm, - &m68000_device::subi_b_imm8_adr16_ifm, - &m68000_device::subi_b_imm8_adr32_ifm, - &m68000_device::subi_w_imm16_ds_ifm, - &m68000_device::subi_w_imm16_ais_ifm, - &m68000_device::subi_w_imm16_aips_ifm, - &m68000_device::subi_w_imm16_pais_ifm, - &m68000_device::subi_w_imm16_das_ifm, - &m68000_device::subi_w_imm16_dais_ifm, - &m68000_device::subi_w_imm16_adr16_ifm, - &m68000_device::subi_w_imm16_adr32_ifm, - &m68000_device::subi_l_imm32_ds_ifm, - &m68000_device::subi_l_imm32_ais_ifm, - &m68000_device::subi_l_imm32_aips_ifm, - &m68000_device::subi_l_imm32_pais_ifm, - &m68000_device::subi_l_imm32_das_ifm, - &m68000_device::subi_l_imm32_dais_ifm, - &m68000_device::subi_l_imm32_adr16_ifm, - &m68000_device::subi_l_imm32_adr32_ifm, - &m68000_device::addi_b_imm8_ds_ifm, - &m68000_device::addi_b_imm8_ais_ifm, - &m68000_device::addi_b_imm8_aips_ifm, - &m68000_device::addi_b_imm8_pais_ifm, - &m68000_device::addi_b_imm8_das_ifm, - &m68000_device::addi_b_imm8_dais_ifm, - &m68000_device::addi_b_imm8_adr16_ifm, - &m68000_device::addi_b_imm8_adr32_ifm, - &m68000_device::addi_w_imm16_ds_ifm, - &m68000_device::addi_w_imm16_ais_ifm, - &m68000_device::addi_w_imm16_aips_ifm, - &m68000_device::addi_w_imm16_pais_ifm, - &m68000_device::addi_w_imm16_das_ifm, - &m68000_device::addi_w_imm16_dais_ifm, - &m68000_device::addi_w_imm16_adr16_ifm, - &m68000_device::addi_w_imm16_adr32_ifm, - &m68000_device::addi_l_imm32_ds_ifm, - &m68000_device::addi_l_imm32_ais_ifm, - &m68000_device::addi_l_imm32_aips_ifm, - &m68000_device::addi_l_imm32_pais_ifm, - &m68000_device::addi_l_imm32_das_ifm, - &m68000_device::addi_l_imm32_dais_ifm, - &m68000_device::addi_l_imm32_adr16_ifm, - &m68000_device::addi_l_imm32_adr32_ifm, - &m68000_device::btst_imm8_ds_ifm, - &m68000_device::btst_imm8_ais_ifm, - &m68000_device::btst_imm8_aips_ifm, - &m68000_device::btst_imm8_pais_ifm, - &m68000_device::btst_imm8_das_ifm, - &m68000_device::btst_imm8_dais_ifm, - &m68000_device::btst_imm8_adr16_ifm, - &m68000_device::btst_imm8_adr32_ifm, - &m68000_device::btst_imm8_dpc_ifm, - &m68000_device::btst_imm8_dpci_ifm, - &m68000_device::bchg_imm8_ds_ifm, - &m68000_device::bchg_imm8_ais_ifm, - &m68000_device::bchg_imm8_aips_ifm, - &m68000_device::bchg_imm8_pais_ifm, - &m68000_device::bchg_imm8_das_ifm, - &m68000_device::bchg_imm8_dais_ifm, - &m68000_device::bchg_imm8_adr16_ifm, - &m68000_device::bchg_imm8_adr32_ifm, - &m68000_device::bclr_imm8_ds_ifm, - &m68000_device::bclr_imm8_ais_ifm, - &m68000_device::bclr_imm8_aips_ifm, - &m68000_device::bclr_imm8_pais_ifm, - &m68000_device::bclr_imm8_das_ifm, - &m68000_device::bclr_imm8_dais_ifm, - &m68000_device::bclr_imm8_adr16_ifm, - &m68000_device::bclr_imm8_adr32_ifm, - &m68000_device::bset_imm8_ds_ifm, - &m68000_device::bset_imm8_ais_ifm, - &m68000_device::bset_imm8_aips_ifm, - &m68000_device::bset_imm8_pais_ifm, - &m68000_device::bset_imm8_das_ifm, - &m68000_device::bset_imm8_dais_ifm, - &m68000_device::bset_imm8_adr16_ifm, - &m68000_device::bset_imm8_adr32_ifm, - &m68000_device::eori_b_imm8_ds_ifm, - &m68000_device::eori_b_imm8_ais_ifm, - &m68000_device::eori_b_imm8_aips_ifm, - &m68000_device::eori_b_imm8_pais_ifm, - &m68000_device::eori_b_imm8_das_ifm, - &m68000_device::eori_b_imm8_dais_ifm, - &m68000_device::eori_b_imm8_adr16_ifm, - &m68000_device::eori_b_imm8_adr32_ifm, - &m68000_device::eori_imm8_ccr_ifm, - &m68000_device::eori_w_imm16_ds_ifm, - &m68000_device::eori_w_imm16_ais_ifm, - &m68000_device::eori_w_imm16_aips_ifm, - &m68000_device::eori_w_imm16_pais_ifm, - &m68000_device::eori_w_imm16_das_ifm, - &m68000_device::eori_w_imm16_dais_ifm, - &m68000_device::eori_w_imm16_adr16_ifm, - &m68000_device::eori_w_imm16_adr32_ifm, - &m68000_device::eori_i16u_sr_ifm, - &m68000_device::eori_l_imm32_ds_ifm, - &m68000_device::eori_l_imm32_ais_ifm, - &m68000_device::eori_l_imm32_aips_ifm, - &m68000_device::eori_l_imm32_pais_ifm, - &m68000_device::eori_l_imm32_das_ifm, - &m68000_device::eori_l_imm32_dais_ifm, - &m68000_device::eori_l_imm32_adr16_ifm, - &m68000_device::eori_l_imm32_adr32_ifm, - &m68000_device::cmpi_b_imm8_ds_ifm, - &m68000_device::cmpi_b_imm8_ais_ifm, - &m68000_device::cmpi_b_imm8_aips_ifm, - &m68000_device::cmpi_b_imm8_pais_ifm, - &m68000_device::cmpi_b_imm8_das_ifm, - &m68000_device::cmpi_b_imm8_dais_ifm, - &m68000_device::cmpi_b_imm8_adr16_ifm, - &m68000_device::cmpi_b_imm8_adr32_ifm, - &m68000_device::cmpi_w_imm16_ds_ifm, - &m68000_device::cmpi_w_imm16_ais_ifm, - &m68000_device::cmpi_w_imm16_aips_ifm, - &m68000_device::cmpi_w_imm16_pais_ifm, - &m68000_device::cmpi_w_imm16_das_ifm, - &m68000_device::cmpi_w_imm16_dais_ifm, - &m68000_device::cmpi_w_imm16_adr16_ifm, - &m68000_device::cmpi_w_imm16_adr32_ifm, - &m68000_device::cmpi_l_imm32_ds_ifm, - &m68000_device::cmpi_l_imm32_ais_ifm, - &m68000_device::cmpi_l_imm32_aips_ifm, - &m68000_device::cmpi_l_imm32_pais_ifm, - &m68000_device::cmpi_l_imm32_das_ifm, - &m68000_device::cmpi_l_imm32_dais_ifm, - &m68000_device::cmpi_l_imm32_adr16_ifm, - &m68000_device::cmpi_l_imm32_adr32_ifm, - &m68000_device::move_b_ds_dd_ifm, - &m68000_device::move_b_ais_dd_ifm, - &m68000_device::move_b_aips_dd_ifm, - &m68000_device::move_b_pais_dd_ifm, - &m68000_device::move_b_das_dd_ifm, - &m68000_device::move_b_dais_dd_ifm, - &m68000_device::move_b_adr16_dd_ifm, - &m68000_device::move_b_adr32_dd_ifm, - &m68000_device::move_b_dpc_dd_ifm, - &m68000_device::move_b_dpci_dd_ifm, - &m68000_device::move_b_imm8_dd_ifm, - &m68000_device::move_b_ds_aid_ifm, - &m68000_device::move_b_ais_aid_ifm, - &m68000_device::move_b_aips_aid_ifm, - &m68000_device::move_b_pais_aid_ifm, - &m68000_device::move_b_das_aid_ifm, - &m68000_device::move_b_dais_aid_ifm, - &m68000_device::move_b_adr16_aid_ifm, - &m68000_device::move_b_adr32_aid_ifm, - &m68000_device::move_b_dpc_aid_ifm, - &m68000_device::move_b_dpci_aid_ifm, - &m68000_device::move_b_imm8_aid_ifm, - &m68000_device::move_b_ds_aipd_ifm, - &m68000_device::move_b_ais_aipd_ifm, - &m68000_device::move_b_aips_aipd_ifm, - &m68000_device::move_b_pais_aipd_ifm, - &m68000_device::move_b_das_aipd_ifm, - &m68000_device::move_b_dais_aipd_ifm, - &m68000_device::move_b_adr16_aipd_ifm, - &m68000_device::move_b_adr32_aipd_ifm, - &m68000_device::move_b_dpc_aipd_ifm, - &m68000_device::move_b_dpci_aipd_ifm, - &m68000_device::move_b_imm8_aipd_ifm, - &m68000_device::move_b_ds_paid_ifm, - &m68000_device::move_b_ais_paid_ifm, - &m68000_device::move_b_aips_paid_ifm, - &m68000_device::move_b_pais_paid_ifm, - &m68000_device::move_b_das_paid_ifm, - &m68000_device::move_b_dais_paid_ifm, - &m68000_device::move_b_adr16_paid_ifm, - &m68000_device::move_b_adr32_paid_ifm, - &m68000_device::move_b_dpc_paid_ifm, - &m68000_device::move_b_dpci_paid_ifm, - &m68000_device::move_b_imm8_paid_ifm, - &m68000_device::move_b_ds_dad_ifm, - &m68000_device::move_b_ais_dad_ifm, - &m68000_device::move_b_aips_dad_ifm, - &m68000_device::move_b_pais_dad_ifm, - &m68000_device::move_b_das_dad_ifm, - &m68000_device::move_b_dais_dad_ifm, - &m68000_device::move_b_adr16_dad_ifm, - &m68000_device::move_b_adr32_dad_ifm, - &m68000_device::move_b_dpc_dad_ifm, - &m68000_device::move_b_dpci_dad_ifm, - &m68000_device::move_b_imm8_dad_ifm, - &m68000_device::move_b_ds_daid_ifm, - &m68000_device::move_b_ais_daid_ifm, - &m68000_device::move_b_aips_daid_ifm, - &m68000_device::move_b_pais_daid_ifm, - &m68000_device::move_b_das_daid_ifm, - &m68000_device::move_b_dais_daid_ifm, - &m68000_device::move_b_adr16_daid_ifm, - &m68000_device::move_b_adr32_daid_ifm, - &m68000_device::move_b_dpc_daid_ifm, - &m68000_device::move_b_dpci_daid_ifm, - &m68000_device::move_b_imm8_daid_ifm, - &m68000_device::move_b_ds_adr16_ifm, - &m68000_device::move_b_ais_adr16_ifm, - &m68000_device::move_b_aips_adr16_ifm, - &m68000_device::move_b_pais_adr16_ifm, - &m68000_device::move_b_das_adr16_ifm, - &m68000_device::move_b_dais_adr16_ifm, - &m68000_device::move_b_adr16_adr16_ifm, - &m68000_device::move_b_adr32_adr16_ifm, - &m68000_device::move_b_dpc_adr16_ifm, - &m68000_device::move_b_dpci_adr16_ifm, - &m68000_device::move_b_imm8_adr16_ifm, - &m68000_device::move_b_ds_adr32_ifm, - &m68000_device::move_b_ais_adr32_ifm, - &m68000_device::move_b_aips_adr32_ifm, - &m68000_device::move_b_pais_adr32_ifm, - &m68000_device::move_b_das_adr32_ifm, - &m68000_device::move_b_dais_adr32_ifm, - &m68000_device::move_b_adr16_adr32_ifm, - &m68000_device::move_b_adr32_adr32_ifm, - &m68000_device::move_b_dpc_adr32_ifm, - &m68000_device::move_b_dpci_adr32_ifm, - &m68000_device::move_b_imm8_adr32_ifm, - &m68000_device::move_l_ds_dd_ifm, - &m68000_device::move_l_as_dd_ifm, - &m68000_device::move_l_ais_dd_ifm, - &m68000_device::move_l_aips_dd_ifm, - &m68000_device::move_l_pais_dd_ifm, - &m68000_device::move_l_das_dd_ifm, - &m68000_device::move_l_dais_dd_ifm, - &m68000_device::move_l_adr16_dd_ifm, - &m68000_device::move_l_adr32_dd_ifm, - &m68000_device::move_l_dpc_dd_ifm, - &m68000_device::move_l_dpci_dd_ifm, - &m68000_device::move_l_imm32_dd_ifm, - &m68000_device::movea_l_ds_ad_ifm, - &m68000_device::movea_l_as_ad_ifm, - &m68000_device::movea_l_ais_ad_ifm, - &m68000_device::movea_l_aips_ad_ifm, - &m68000_device::movea_l_pais_ad_ifm, - &m68000_device::movea_l_das_ad_ifm, - &m68000_device::movea_l_dais_ad_ifm, - &m68000_device::movea_l_adr16_ad_ifm, - &m68000_device::movea_l_adr32_ad_ifm, - &m68000_device::movea_l_dpc_ad_ifm, - &m68000_device::movea_l_dpci_ad_ifm, - &m68000_device::movea_l_imm32_ad_ifm, - &m68000_device::move_l_ds_aid_ifm, - &m68000_device::move_l_as_aid_ifm, - &m68000_device::move_l_ais_aid_ifm, - &m68000_device::move_l_aips_aid_ifm, - &m68000_device::move_l_pais_aid_ifm, - &m68000_device::move_l_das_aid_ifm, - &m68000_device::move_l_dais_aid_ifm, - &m68000_device::move_l_adr16_aid_ifm, - &m68000_device::move_l_adr32_aid_ifm, - &m68000_device::move_l_dpc_aid_ifm, - &m68000_device::move_l_dpci_aid_ifm, - &m68000_device::move_l_imm32_aid_ifm, - &m68000_device::move_l_ds_aipd_ifm, - &m68000_device::move_l_as_aipd_ifm, - &m68000_device::move_l_ais_aipd_ifm, - &m68000_device::move_l_aips_aipd_ifm, - &m68000_device::move_l_pais_aipd_ifm, - &m68000_device::move_l_das_aipd_ifm, - &m68000_device::move_l_dais_aipd_ifm, - &m68000_device::move_l_adr16_aipd_ifm, - &m68000_device::move_l_adr32_aipd_ifm, - &m68000_device::move_l_dpc_aipd_ifm, - &m68000_device::move_l_dpci_aipd_ifm, - &m68000_device::move_l_imm32_aipd_ifm, - &m68000_device::move_l_ds_paid_ifm, - &m68000_device::move_l_as_paid_ifm, - &m68000_device::move_l_ais_paid_ifm, - &m68000_device::move_l_aips_paid_ifm, - &m68000_device::move_l_pais_paid_ifm, - &m68000_device::move_l_das_paid_ifm, - &m68000_device::move_l_dais_paid_ifm, - &m68000_device::move_l_adr16_paid_ifm, - &m68000_device::move_l_adr32_paid_ifm, - &m68000_device::move_l_dpc_paid_ifm, - &m68000_device::move_l_dpci_paid_ifm, - &m68000_device::move_l_imm32_paid_ifm, - &m68000_device::move_l_ds_dad_ifm, - &m68000_device::move_l_as_dad_ifm, - &m68000_device::move_l_ais_dad_ifm, - &m68000_device::move_l_aips_dad_ifm, - &m68000_device::move_l_pais_dad_ifm, - &m68000_device::move_l_das_dad_ifm, - &m68000_device::move_l_dais_dad_ifm, - &m68000_device::move_l_adr16_dad_ifm, - &m68000_device::move_l_adr32_dad_ifm, - &m68000_device::move_l_dpc_dad_ifm, - &m68000_device::move_l_dpci_dad_ifm, - &m68000_device::move_l_imm32_dad_ifm, - &m68000_device::move_l_ds_daid_ifm, - &m68000_device::move_l_as_daid_ifm, - &m68000_device::move_l_ais_daid_ifm, - &m68000_device::move_l_aips_daid_ifm, - &m68000_device::move_l_pais_daid_ifm, - &m68000_device::move_l_das_daid_ifm, - &m68000_device::move_l_dais_daid_ifm, - &m68000_device::move_l_adr16_daid_ifm, - &m68000_device::move_l_adr32_daid_ifm, - &m68000_device::move_l_dpc_daid_ifm, - &m68000_device::move_l_dpci_daid_ifm, - &m68000_device::move_l_imm32_daid_ifm, - &m68000_device::move_l_ds_adr16_ifm, - &m68000_device::move_l_as_adr16_ifm, - &m68000_device::move_l_ais_adr16_ifm, - &m68000_device::move_l_aips_adr16_ifm, - &m68000_device::move_l_pais_adr16_ifm, - &m68000_device::move_l_das_adr16_ifm, - &m68000_device::move_l_dais_adr16_ifm, - &m68000_device::move_l_adr16_adr16_ifm, - &m68000_device::move_l_adr32_adr16_ifm, - &m68000_device::move_l_dpc_adr16_ifm, - &m68000_device::move_l_dpci_adr16_ifm, - &m68000_device::move_l_imm32_adr16_ifm, - &m68000_device::move_l_ds_adr32_ifm, - &m68000_device::move_l_as_adr32_ifm, - &m68000_device::move_l_ais_adr32_ifm, - &m68000_device::move_l_aips_adr32_ifm, - &m68000_device::move_l_pais_adr32_ifm, - &m68000_device::move_l_das_adr32_ifm, - &m68000_device::move_l_dais_adr32_ifm, - &m68000_device::move_l_adr16_adr32_ifm, - &m68000_device::move_l_adr32_adr32_ifm, - &m68000_device::move_l_dpc_adr32_ifm, - &m68000_device::move_l_dpci_adr32_ifm, - &m68000_device::move_l_imm32_adr32_ifm, - &m68000_device::move_w_ds_dd_ifm, - &m68000_device::move_w_as_dd_ifm, - &m68000_device::move_w_ais_dd_ifm, - &m68000_device::move_w_aips_dd_ifm, - &m68000_device::move_w_pais_dd_ifm, - &m68000_device::move_w_das_dd_ifm, - &m68000_device::move_w_dais_dd_ifm, - &m68000_device::move_w_adr16_dd_ifm, - &m68000_device::move_w_adr32_dd_ifm, - &m68000_device::move_w_dpc_dd_ifm, - &m68000_device::move_w_dpci_dd_ifm, - &m68000_device::move_w_imm16_dd_ifm, - &m68000_device::movea_w_ds_ad_ifm, - &m68000_device::movea_w_as_ad_ifm, - &m68000_device::movea_w_ais_ad_ifm, - &m68000_device::movea_w_aips_ad_ifm, - &m68000_device::movea_w_pais_ad_ifm, - &m68000_device::movea_w_das_ad_ifm, - &m68000_device::movea_w_dais_ad_ifm, - &m68000_device::movea_w_adr16_ad_ifm, - &m68000_device::movea_w_adr32_ad_ifm, - &m68000_device::movea_w_dpc_ad_ifm, - &m68000_device::movea_w_dpci_ad_ifm, - &m68000_device::movea_w_imm16_ad_ifm, - &m68000_device::move_w_ds_aid_ifm, - &m68000_device::move_w_as_aid_ifm, - &m68000_device::move_w_ais_aid_ifm, - &m68000_device::move_w_aips_aid_ifm, - &m68000_device::move_w_pais_aid_ifm, - &m68000_device::move_w_das_aid_ifm, - &m68000_device::move_w_dais_aid_ifm, - &m68000_device::move_w_adr16_aid_ifm, - &m68000_device::move_w_adr32_aid_ifm, - &m68000_device::move_w_dpc_aid_ifm, - &m68000_device::move_w_dpci_aid_ifm, - &m68000_device::move_w_imm16_aid_ifm, - &m68000_device::move_w_ds_aipd_ifm, - &m68000_device::move_w_as_aipd_ifm, - &m68000_device::move_w_ais_aipd_ifm, - &m68000_device::move_w_aips_aipd_ifm, - &m68000_device::move_w_pais_aipd_ifm, - &m68000_device::move_w_das_aipd_ifm, - &m68000_device::move_w_dais_aipd_ifm, - &m68000_device::move_w_adr16_aipd_ifm, - &m68000_device::move_w_adr32_aipd_ifm, - &m68000_device::move_w_dpc_aipd_ifm, - &m68000_device::move_w_dpci_aipd_ifm, - &m68000_device::move_w_imm16_aipd_ifm, - &m68000_device::move_w_ds_paid_ifm, - &m68000_device::move_w_as_paid_ifm, - &m68000_device::move_w_ais_paid_ifm, - &m68000_device::move_w_aips_paid_ifm, - &m68000_device::move_w_pais_paid_ifm, - &m68000_device::move_w_das_paid_ifm, - &m68000_device::move_w_dais_paid_ifm, - &m68000_device::move_w_adr16_paid_ifm, - &m68000_device::move_w_adr32_paid_ifm, - &m68000_device::move_w_dpc_paid_ifm, - &m68000_device::move_w_dpci_paid_ifm, - &m68000_device::move_w_imm16_paid_ifm, - &m68000_device::move_w_ds_dad_ifm, - &m68000_device::move_w_as_dad_ifm, - &m68000_device::move_w_ais_dad_ifm, - &m68000_device::move_w_aips_dad_ifm, - &m68000_device::move_w_pais_dad_ifm, - &m68000_device::move_w_das_dad_ifm, - &m68000_device::move_w_dais_dad_ifm, - &m68000_device::move_w_adr16_dad_ifm, - &m68000_device::move_w_adr32_dad_ifm, - &m68000_device::move_w_dpc_dad_ifm, - &m68000_device::move_w_dpci_dad_ifm, - &m68000_device::move_w_imm16_dad_ifm, - &m68000_device::move_w_ds_daid_ifm, - &m68000_device::move_w_as_daid_ifm, - &m68000_device::move_w_ais_daid_ifm, - &m68000_device::move_w_aips_daid_ifm, - &m68000_device::move_w_pais_daid_ifm, - &m68000_device::move_w_das_daid_ifm, - &m68000_device::move_w_dais_daid_ifm, - &m68000_device::move_w_adr16_daid_ifm, - &m68000_device::move_w_adr32_daid_ifm, - &m68000_device::move_w_dpc_daid_ifm, - &m68000_device::move_w_dpci_daid_ifm, - &m68000_device::move_w_imm16_daid_ifm, - &m68000_device::move_w_ds_adr16_ifm, - &m68000_device::move_w_as_adr16_ifm, - &m68000_device::move_w_ais_adr16_ifm, - &m68000_device::move_w_aips_adr16_ifm, - &m68000_device::move_w_pais_adr16_ifm, - &m68000_device::move_w_das_adr16_ifm, - &m68000_device::move_w_dais_adr16_ifm, - &m68000_device::move_w_adr16_adr16_ifm, - &m68000_device::move_w_adr32_adr16_ifm, - &m68000_device::move_w_dpc_adr16_ifm, - &m68000_device::move_w_dpci_adr16_ifm, - &m68000_device::move_w_imm16_adr16_ifm, - &m68000_device::move_w_ds_adr32_ifm, - &m68000_device::move_w_as_adr32_ifm, - &m68000_device::move_w_ais_adr32_ifm, - &m68000_device::move_w_aips_adr32_ifm, - &m68000_device::move_w_pais_adr32_ifm, - &m68000_device::move_w_das_adr32_ifm, - &m68000_device::move_w_dais_adr32_ifm, - &m68000_device::move_w_adr16_adr32_ifm, - &m68000_device::move_w_adr32_adr32_ifm, - &m68000_device::move_w_dpc_adr32_ifm, - &m68000_device::move_w_dpci_adr32_ifm, - &m68000_device::move_w_imm16_adr32_ifm, - &m68000_device::negx_b_ds_ifm, - &m68000_device::negx_b_ais_ifm, - &m68000_device::negx_b_aips_ifm, - &m68000_device::negx_b_pais_ifm, - &m68000_device::negx_b_das_ifm, - &m68000_device::negx_b_dais_ifm, - &m68000_device::negx_b_adr16_ifm, - &m68000_device::negx_b_adr32_ifm, - &m68000_device::negx_w_ds_ifm, - &m68000_device::negx_w_ais_ifm, - &m68000_device::negx_w_aips_ifm, - &m68000_device::negx_w_pais_ifm, - &m68000_device::negx_w_das_ifm, - &m68000_device::negx_w_dais_ifm, - &m68000_device::negx_w_adr16_ifm, - &m68000_device::negx_w_adr32_ifm, - &m68000_device::negx_l_ds_ifm, - &m68000_device::negx_l_ais_ifm, - &m68000_device::negx_l_aips_ifm, - &m68000_device::negx_l_pais_ifm, - &m68000_device::negx_l_das_ifm, - &m68000_device::negx_l_dais_ifm, - &m68000_device::negx_l_adr16_ifm, - &m68000_device::negx_l_adr32_ifm, - &m68000_device::move_sr_ds_ifm, - &m68000_device::move_sr_ais_ifm, - &m68000_device::move_sr_aips_ifm, - &m68000_device::move_sr_pais_ifm, - &m68000_device::move_sr_das_ifm, - &m68000_device::move_sr_dais_ifm, - &m68000_device::move_sr_adr16_ifm, - &m68000_device::move_sr_adr32_ifm, - &m68000_device::chk_w_ds_dd_ifm, - &m68000_device::chk_w_ais_dd_ifm, - &m68000_device::chk_w_aips_dd_ifm, - &m68000_device::chk_w_pais_dd_ifm, - &m68000_device::chk_w_das_dd_ifm, - &m68000_device::chk_w_dais_dd_ifm, - &m68000_device::chk_w_adr16_dd_ifm, - &m68000_device::chk_w_adr32_dd_ifm, - &m68000_device::chk_w_dpc_dd_ifm, - &m68000_device::chk_w_dpci_dd_ifm, - &m68000_device::chk_w_imm16_dd_ifm, - &m68000_device::lea_ais_ad_ifm, - &m68000_device::lea_das_ad_ifm, - &m68000_device::lea_dais_ad_ifm, - &m68000_device::lea_adr16_ad_ifm, - &m68000_device::lea_adr32_ad_ifm, - &m68000_device::lea_dpc_ad_ifm, - &m68000_device::lea_dpci_ad_ifm, - &m68000_device::clr_b_ds_ifm, - &m68000_device::clr_b_ais_ifm, - &m68000_device::clr_b_aips_ifm, - &m68000_device::clr_b_pais_ifm, - &m68000_device::clr_b_das_ifm, - &m68000_device::clr_b_dais_ifm, - &m68000_device::clr_b_adr16_ifm, - &m68000_device::clr_b_adr32_ifm, - &m68000_device::clr_w_ds_ifm, - &m68000_device::clr_w_ais_ifm, - &m68000_device::clr_w_aips_ifm, - &m68000_device::clr_w_pais_ifm, - &m68000_device::clr_w_das_ifm, - &m68000_device::clr_w_dais_ifm, - &m68000_device::clr_w_adr16_ifm, - &m68000_device::clr_w_adr32_ifm, - &m68000_device::clr_l_ds_ifm, - &m68000_device::clr_l_ais_ifm, - &m68000_device::clr_l_aips_ifm, - &m68000_device::clr_l_pais_ifm, - &m68000_device::clr_l_das_ifm, - &m68000_device::clr_l_dais_ifm, - &m68000_device::clr_l_adr16_ifm, - &m68000_device::clr_l_adr32_ifm, - &m68000_device::neg_b_ds_ifm, - &m68000_device::neg_b_ais_ifm, - &m68000_device::neg_b_aips_ifm, - &m68000_device::neg_b_pais_ifm, - &m68000_device::neg_b_das_ifm, - &m68000_device::neg_b_dais_ifm, - &m68000_device::neg_b_adr16_ifm, - &m68000_device::neg_b_adr32_ifm, - &m68000_device::neg_w_ds_ifm, - &m68000_device::neg_w_ais_ifm, - &m68000_device::neg_w_aips_ifm, - &m68000_device::neg_w_pais_ifm, - &m68000_device::neg_w_das_ifm, - &m68000_device::neg_w_dais_ifm, - &m68000_device::neg_w_adr16_ifm, - &m68000_device::neg_w_adr32_ifm, - &m68000_device::neg_l_ds_ifm, - &m68000_device::neg_l_ais_ifm, - &m68000_device::neg_l_aips_ifm, - &m68000_device::neg_l_pais_ifm, - &m68000_device::neg_l_das_ifm, - &m68000_device::neg_l_dais_ifm, - &m68000_device::neg_l_adr16_ifm, - &m68000_device::neg_l_adr32_ifm, - &m68000_device::move_ds_ccr_ifm, - &m68000_device::move_ais_ccr_ifm, - &m68000_device::move_aips_ccr_ifm, - &m68000_device::move_pais_ccr_ifm, - &m68000_device::move_das_ccr_ifm, - &m68000_device::move_dais_ccr_ifm, - &m68000_device::move_adr16_ccr_ifm, - &m68000_device::move_adr32_ccr_ifm, - &m68000_device::move_dpc_ccr_ifm, - &m68000_device::move_dpci_ccr_ifm, - &m68000_device::move_imm8_ccr_ifm, - &m68000_device::not_b_ds_ifm, - &m68000_device::not_b_ais_ifm, - &m68000_device::not_b_aips_ifm, - &m68000_device::not_b_pais_ifm, - &m68000_device::not_b_das_ifm, - &m68000_device::not_b_dais_ifm, - &m68000_device::not_b_adr16_ifm, - &m68000_device::not_b_adr32_ifm, - &m68000_device::not_w_ds_ifm, - &m68000_device::not_w_ais_ifm, - &m68000_device::not_w_aips_ifm, - &m68000_device::not_w_pais_ifm, - &m68000_device::not_w_das_ifm, - &m68000_device::not_w_dais_ifm, - &m68000_device::not_w_adr16_ifm, - &m68000_device::not_w_adr32_ifm, - &m68000_device::not_l_ds_ifm, - &m68000_device::not_l_ais_ifm, - &m68000_device::not_l_aips_ifm, - &m68000_device::not_l_pais_ifm, - &m68000_device::not_l_das_ifm, - &m68000_device::not_l_dais_ifm, - &m68000_device::not_l_adr16_ifm, - &m68000_device::not_l_adr32_ifm, - &m68000_device::move_ds_sr_ifm, - &m68000_device::move_ais_sr_ifm, - &m68000_device::move_aips_sr_ifm, - &m68000_device::move_pais_sr_ifm, - &m68000_device::move_das_sr_ifm, - &m68000_device::move_dais_sr_ifm, - &m68000_device::move_adr16_sr_ifm, - &m68000_device::move_adr32_sr_ifm, - &m68000_device::move_dpc_sr_ifm, - &m68000_device::move_dpci_sr_ifm, - &m68000_device::move_i16u_sr_ifm, - &m68000_device::nbcd_b_ds_ifm, - &m68000_device::nbcd_b_ais_ifm, - &m68000_device::nbcd_b_aips_ifm, - &m68000_device::nbcd_b_pais_ifm, - &m68000_device::nbcd_b_das_ifm, - &m68000_device::nbcd_b_dais_ifm, - &m68000_device::nbcd_b_adr16_ifm, - &m68000_device::nbcd_b_adr32_ifm, - &m68000_device::swap_ds_ifm, - &m68000_device::pea_ais_ifm, - &m68000_device::pea_das_ifm, - &m68000_device::pea_dais_ifm, - &m68000_device::pea_adr16_ifm, - &m68000_device::pea_adr32_ifm, - &m68000_device::pea_dpc_ifm, - &m68000_device::pea_dpci_ifm, - &m68000_device::ext_w_ds_ifm, - &m68000_device::movem_w_list_ais_ifm, - &m68000_device::movem_w_listp_pais_ifm, - &m68000_device::movem_w_list_das_ifm, - &m68000_device::movem_w_list_dais_ifm, - &m68000_device::movem_w_list_adr16_ifm, - &m68000_device::movem_w_list_adr32_ifm, - &m68000_device::ext_l_ds_ifm, - &m68000_device::movem_l_list_ais_ifm, - &m68000_device::movem_l_listp_pais_ifm, - &m68000_device::movem_l_list_das_ifm, - &m68000_device::movem_l_list_dais_ifm, - &m68000_device::movem_l_list_adr16_ifm, - &m68000_device::movem_l_list_adr32_ifm, - &m68000_device::tst_b_ds_ifm, - &m68000_device::tst_b_ais_ifm, - &m68000_device::tst_b_aips_ifm, - &m68000_device::tst_b_pais_ifm, - &m68000_device::tst_b_das_ifm, - &m68000_device::tst_b_dais_ifm, - &m68000_device::tst_b_adr16_ifm, - &m68000_device::tst_b_adr32_ifm, - &m68000_device::tst_w_ds_ifm, - &m68000_device::tst_w_ais_ifm, - &m68000_device::tst_w_aips_ifm, - &m68000_device::tst_w_pais_ifm, - &m68000_device::tst_w_das_ifm, - &m68000_device::tst_w_dais_ifm, - &m68000_device::tst_w_adr16_ifm, - &m68000_device::tst_w_adr32_ifm, - &m68000_device::tst_l_ds_ifm, - &m68000_device::tst_l_ais_ifm, - &m68000_device::tst_l_aips_ifm, - &m68000_device::tst_l_pais_ifm, - &m68000_device::tst_l_das_ifm, - &m68000_device::tst_l_dais_ifm, - &m68000_device::tst_l_adr16_ifm, - &m68000_device::tst_l_adr32_ifm, - &m68000_device::tas_ds_ifm, - &m68000_device::tas_ais_ifm, - &m68000_device::tas_aips_ifm, - &m68000_device::tas_pais_ifm, - &m68000_device::tas_das_ifm, - &m68000_device::tas_dais_ifm, - &m68000_device::tas_adr16_ifm, - &m68000_device::tas_adr32_ifm, - &m68000_device::movem_w_ais_list_ifm, - &m68000_device::movem_w_aips_list_ifm, - &m68000_device::movem_w_das_list_ifm, - &m68000_device::movem_w_dais_list_ifm, - &m68000_device::movem_w_adr16_list_ifm, - &m68000_device::movem_w_adr32_list_ifm, - &m68000_device::movem_w_dpc_list_ifm, - &m68000_device::movem_w_dpci_list_ifm, - &m68000_device::movem_l_ais_list_ifm, - &m68000_device::movem_l_aips_list_ifm, - &m68000_device::movem_l_das_list_ifm, - &m68000_device::movem_l_dais_list_ifm, - &m68000_device::movem_l_adr16_list_ifm, - &m68000_device::movem_l_adr32_list_ifm, - &m68000_device::movem_l_dpc_list_ifm, - &m68000_device::movem_l_dpci_list_ifm, - &m68000_device::trap_imm4_ifm, - &m68000_device::link_as_imm16_ifm, - &m68000_device::unlk_as_ifm, - &m68000_device::move_as_usp_ifm, - &m68000_device::move_usp_as_ifm, - &m68000_device::reset_ifm, - &m68000_device::nop_ifm, - &m68000_device::stop_i16u_ifm, - &m68000_device::rte_ifm, - &m68000_device::rts_ifm, - &m68000_device::trapv_ifm, - &m68000_device::rtr_ifm, - &m68000_device::jsr_ais_ifm, - &m68000_device::jsr_das_ifm, - &m68000_device::jsr_dais_ifm, - &m68000_device::jsr_adr16_ifm, - &m68000_device::jsr_adr32_ifm, - &m68000_device::jsr_dpc_ifm, - &m68000_device::jsr_dpci_ifm, - &m68000_device::jmp_ais_ifm, - &m68000_device::jmp_das_ifm, - &m68000_device::jmp_dais_ifm, - &m68000_device::jmp_adr16_ifm, - &m68000_device::jmp_adr32_ifm, - &m68000_device::jmp_dpc_ifm, - &m68000_device::jmp_dpci_ifm, - &m68000_device::addq_b_imm3_ds_ifm, - &m68000_device::addq_b_imm3_ais_ifm, - &m68000_device::addq_b_imm3_aips_ifm, - &m68000_device::addq_b_imm3_pais_ifm, - &m68000_device::addq_b_imm3_das_ifm, - &m68000_device::addq_b_imm3_dais_ifm, - &m68000_device::addq_b_imm3_adr16_ifm, - &m68000_device::addq_b_imm3_adr32_ifm, - &m68000_device::addq_w_imm3_ds_ifm, - &m68000_device::addq_w_imm3_as_ifm, - &m68000_device::addq_w_imm3_ais_ifm, - &m68000_device::addq_w_imm3_aips_ifm, - &m68000_device::addq_w_imm3_pais_ifm, - &m68000_device::addq_w_imm3_das_ifm, - &m68000_device::addq_w_imm3_dais_ifm, - &m68000_device::addq_w_imm3_adr16_ifm, - &m68000_device::addq_w_imm3_adr32_ifm, - &m68000_device::addq_l_imm3_ds_ifm, - &m68000_device::addq_l_imm3_as_ifm, - &m68000_device::addq_l_imm3_ais_ifm, - &m68000_device::addq_l_imm3_aips_ifm, - &m68000_device::addq_l_imm3_pais_ifm, - &m68000_device::addq_l_imm3_das_ifm, - &m68000_device::addq_l_imm3_dais_ifm, - &m68000_device::addq_l_imm3_adr16_ifm, - &m68000_device::addq_l_imm3_adr32_ifm, - &m68000_device::st_ds_ifm, - &m68000_device::dbt_ds_rel16_ifm, - &m68000_device::st_ais_ifm, - &m68000_device::st_aips_ifm, - &m68000_device::st_pais_ifm, - &m68000_device::st_das_ifm, - &m68000_device::st_dais_ifm, - &m68000_device::st_adr16_ifm, - &m68000_device::st_adr32_ifm, - &m68000_device::subq_b_imm3_ds_ifm, - &m68000_device::subq_b_imm3_ais_ifm, - &m68000_device::subq_b_imm3_aips_ifm, - &m68000_device::subq_b_imm3_pais_ifm, - &m68000_device::subq_b_imm3_das_ifm, - &m68000_device::subq_b_imm3_dais_ifm, - &m68000_device::subq_b_imm3_adr16_ifm, - &m68000_device::subq_b_imm3_adr32_ifm, - &m68000_device::subq_w_imm3_ds_ifm, - &m68000_device::subq_w_imm3_as_ifm, - &m68000_device::subq_w_imm3_ais_ifm, - &m68000_device::subq_w_imm3_aips_ifm, - &m68000_device::subq_w_imm3_pais_ifm, - &m68000_device::subq_w_imm3_das_ifm, - &m68000_device::subq_w_imm3_dais_ifm, - &m68000_device::subq_w_imm3_adr16_ifm, - &m68000_device::subq_w_imm3_adr32_ifm, - &m68000_device::subq_l_imm3_ds_ifm, - &m68000_device::subq_l_imm3_as_ifm, - &m68000_device::subq_l_imm3_ais_ifm, - &m68000_device::subq_l_imm3_aips_ifm, - &m68000_device::subq_l_imm3_pais_ifm, - &m68000_device::subq_l_imm3_das_ifm, - &m68000_device::subq_l_imm3_dais_ifm, - &m68000_device::subq_l_imm3_adr16_ifm, - &m68000_device::subq_l_imm3_adr32_ifm, - &m68000_device::sf_ds_ifm, - &m68000_device::dbra_ds_rel16_ifm, - &m68000_device::sf_ais_ifm, - &m68000_device::sf_aips_ifm, - &m68000_device::sf_pais_ifm, - &m68000_device::sf_das_ifm, - &m68000_device::sf_dais_ifm, - &m68000_device::sf_adr16_ifm, - &m68000_device::sf_adr32_ifm, - &m68000_device::shi_ds_ifm, - &m68000_device::dbhi_ds_rel16_ifm, - &m68000_device::shi_ais_ifm, - &m68000_device::shi_aips_ifm, - &m68000_device::shi_pais_ifm, - &m68000_device::shi_das_ifm, - &m68000_device::shi_dais_ifm, - &m68000_device::shi_adr16_ifm, - &m68000_device::shi_adr32_ifm, - &m68000_device::sls_ds_ifm, - &m68000_device::dbls_ds_rel16_ifm, - &m68000_device::sls_ais_ifm, - &m68000_device::sls_aips_ifm, - &m68000_device::sls_pais_ifm, - &m68000_device::sls_das_ifm, - &m68000_device::sls_dais_ifm, - &m68000_device::sls_adr16_ifm, - &m68000_device::sls_adr32_ifm, - &m68000_device::scc_ds_ifm, - &m68000_device::dbcc_ds_rel16_ifm, - &m68000_device::scc_ais_ifm, - &m68000_device::scc_aips_ifm, - &m68000_device::scc_pais_ifm, - &m68000_device::scc_das_ifm, - &m68000_device::scc_dais_ifm, - &m68000_device::scc_adr16_ifm, - &m68000_device::scc_adr32_ifm, - &m68000_device::scs_ds_ifm, - &m68000_device::dbcs_ds_rel16_ifm, - &m68000_device::scs_ais_ifm, - &m68000_device::scs_aips_ifm, - &m68000_device::scs_pais_ifm, - &m68000_device::scs_das_ifm, - &m68000_device::scs_dais_ifm, - &m68000_device::scs_adr16_ifm, - &m68000_device::scs_adr32_ifm, - &m68000_device::sne_ds_ifm, - &m68000_device::dbne_ds_rel16_ifm, - &m68000_device::sne_ais_ifm, - &m68000_device::sne_aips_ifm, - &m68000_device::sne_pais_ifm, - &m68000_device::sne_das_ifm, - &m68000_device::sne_dais_ifm, - &m68000_device::sne_adr16_ifm, - &m68000_device::sne_adr32_ifm, - &m68000_device::seq_ds_ifm, - &m68000_device::dbeq_ds_rel16_ifm, - &m68000_device::seq_ais_ifm, - &m68000_device::seq_aips_ifm, - &m68000_device::seq_pais_ifm, - &m68000_device::seq_das_ifm, - &m68000_device::seq_dais_ifm, - &m68000_device::seq_adr16_ifm, - &m68000_device::seq_adr32_ifm, - &m68000_device::svc_ds_ifm, - &m68000_device::dbvc_ds_rel16_ifm, - &m68000_device::svc_ais_ifm, - &m68000_device::svc_aips_ifm, - &m68000_device::svc_pais_ifm, - &m68000_device::svc_das_ifm, - &m68000_device::svc_dais_ifm, - &m68000_device::svc_adr16_ifm, - &m68000_device::svc_adr32_ifm, - &m68000_device::svs_ds_ifm, - &m68000_device::dbvs_ds_rel16_ifm, - &m68000_device::svs_ais_ifm, - &m68000_device::svs_aips_ifm, - &m68000_device::svs_pais_ifm, - &m68000_device::svs_das_ifm, - &m68000_device::svs_dais_ifm, - &m68000_device::svs_adr16_ifm, - &m68000_device::svs_adr32_ifm, - &m68000_device::spl_ds_ifm, - &m68000_device::dbpl_ds_rel16_ifm, - &m68000_device::spl_ais_ifm, - &m68000_device::spl_aips_ifm, - &m68000_device::spl_pais_ifm, - &m68000_device::spl_das_ifm, - &m68000_device::spl_dais_ifm, - &m68000_device::spl_adr16_ifm, - &m68000_device::spl_adr32_ifm, - &m68000_device::smi_ds_ifm, - &m68000_device::dbmi_ds_rel16_ifm, - &m68000_device::smi_ais_ifm, - &m68000_device::smi_aips_ifm, - &m68000_device::smi_pais_ifm, - &m68000_device::smi_das_ifm, - &m68000_device::smi_dais_ifm, - &m68000_device::smi_adr16_ifm, - &m68000_device::smi_adr32_ifm, - &m68000_device::sge_ds_ifm, - &m68000_device::dbge_ds_rel16_ifm, - &m68000_device::sge_ais_ifm, - &m68000_device::sge_aips_ifm, - &m68000_device::sge_pais_ifm, - &m68000_device::sge_das_ifm, - &m68000_device::sge_dais_ifm, - &m68000_device::sge_adr16_ifm, - &m68000_device::sge_adr32_ifm, - &m68000_device::slt_ds_ifm, - &m68000_device::dblt_ds_rel16_ifm, - &m68000_device::slt_ais_ifm, - &m68000_device::slt_aips_ifm, - &m68000_device::slt_pais_ifm, - &m68000_device::slt_das_ifm, - &m68000_device::slt_dais_ifm, - &m68000_device::slt_adr16_ifm, - &m68000_device::slt_adr32_ifm, - &m68000_device::sgt_ds_ifm, - &m68000_device::dbgt_ds_rel16_ifm, - &m68000_device::sgt_ais_ifm, - &m68000_device::sgt_aips_ifm, - &m68000_device::sgt_pais_ifm, - &m68000_device::sgt_das_ifm, - &m68000_device::sgt_dais_ifm, - &m68000_device::sgt_adr16_ifm, - &m68000_device::sgt_adr32_ifm, - &m68000_device::sle_ds_ifm, - &m68000_device::dble_ds_rel16_ifm, - &m68000_device::sle_ais_ifm, - &m68000_device::sle_aips_ifm, - &m68000_device::sle_pais_ifm, - &m68000_device::sle_das_ifm, - &m68000_device::sle_dais_ifm, - &m68000_device::sle_adr16_ifm, - &m68000_device::sle_adr32_ifm, - &m68000_device::bra_rel16_ifm, - &m68000_device::bra_rel8_ifm, - &m68000_device::bsr_rel16_ifm, - &m68000_device::bsr_rel8_ifm, - &m68000_device::bhi_rel16_ifm, - &m68000_device::bhi_rel8_ifm, - &m68000_device::bls_rel16_ifm, - &m68000_device::bls_rel8_ifm, - &m68000_device::bcc_rel16_ifm, - &m68000_device::bcc_rel8_ifm, - &m68000_device::bcs_rel16_ifm, - &m68000_device::bcs_rel8_ifm, - &m68000_device::bne_rel16_ifm, - &m68000_device::bne_rel8_ifm, - &m68000_device::beq_rel16_ifm, - &m68000_device::beq_rel8_ifm, - &m68000_device::bvc_rel16_ifm, - &m68000_device::bvc_rel8_ifm, - &m68000_device::bvs_rel16_ifm, - &m68000_device::bvs_rel8_ifm, - &m68000_device::bpl_rel16_ifm, - &m68000_device::bpl_rel8_ifm, - &m68000_device::bmi_rel16_ifm, - &m68000_device::bmi_rel8_ifm, - &m68000_device::bge_rel16_ifm, - &m68000_device::bge_rel8_ifm, - &m68000_device::blt_rel16_ifm, - &m68000_device::blt_rel8_ifm, - &m68000_device::bgt_rel16_ifm, - &m68000_device::bgt_rel8_ifm, - &m68000_device::ble_rel16_ifm, - &m68000_device::ble_rel8_ifm, - &m68000_device::moveq_imm8o_dd_ifm, - &m68000_device::or_b_ds_dd_ifm, - &m68000_device::or_b_ais_dd_ifm, - &m68000_device::or_b_aips_dd_ifm, - &m68000_device::or_b_pais_dd_ifm, - &m68000_device::or_b_das_dd_ifm, - &m68000_device::or_b_dais_dd_ifm, - &m68000_device::or_b_adr16_dd_ifm, - &m68000_device::or_b_adr32_dd_ifm, - &m68000_device::or_b_dpc_dd_ifm, - &m68000_device::or_b_dpci_dd_ifm, - &m68000_device::or_b_imm8_dd_ifm, - &m68000_device::or_w_ds_dd_ifm, - &m68000_device::or_w_ais_dd_ifm, - &m68000_device::or_w_aips_dd_ifm, - &m68000_device::or_w_pais_dd_ifm, - &m68000_device::or_w_das_dd_ifm, - &m68000_device::or_w_dais_dd_ifm, - &m68000_device::or_w_adr16_dd_ifm, - &m68000_device::or_w_adr32_dd_ifm, - &m68000_device::or_w_dpc_dd_ifm, - &m68000_device::or_w_dpci_dd_ifm, - &m68000_device::or_w_imm16_dd_ifm, - &m68000_device::or_l_ds_dd_ifm, - &m68000_device::or_l_ais_dd_ifm, - &m68000_device::or_l_aips_dd_ifm, - &m68000_device::or_l_pais_dd_ifm, - &m68000_device::or_l_das_dd_ifm, - &m68000_device::or_l_dais_dd_ifm, - &m68000_device::or_l_adr16_dd_ifm, - &m68000_device::or_l_adr32_dd_ifm, - &m68000_device::or_l_dpc_dd_ifm, - &m68000_device::or_l_dpci_dd_ifm, - &m68000_device::or_l_imm32_dd_ifm, - &m68000_device::divu_w_ds_dd_ifm, - &m68000_device::divu_w_ais_dd_ifm, - &m68000_device::divu_w_aips_dd_ifm, - &m68000_device::divu_w_pais_dd_ifm, - &m68000_device::divu_w_das_dd_ifm, - &m68000_device::divu_w_dais_dd_ifm, - &m68000_device::divu_w_adr16_dd_ifm, - &m68000_device::divu_w_adr32_dd_ifm, - &m68000_device::divu_w_dpc_dd_ifm, - &m68000_device::divu_w_dpci_dd_ifm, - &m68000_device::divu_w_imm16_dd_ifm, - &m68000_device::sbcd_ds_dd_ifm, - &m68000_device::sbcd_pais_paid_ifm, - &m68000_device::or_b_dd_ais_ifm, - &m68000_device::or_b_dd_aips_ifm, - &m68000_device::or_b_dd_pais_ifm, - &m68000_device::or_b_dd_das_ifm, - &m68000_device::or_b_dd_dais_ifm, - &m68000_device::or_b_dd_adr16_ifm, - &m68000_device::or_b_dd_adr32_ifm, - &m68000_device::or_w_dd_ais_ifm, - &m68000_device::or_w_dd_aips_ifm, - &m68000_device::or_w_dd_pais_ifm, - &m68000_device::or_w_dd_das_ifm, - &m68000_device::or_w_dd_dais_ifm, - &m68000_device::or_w_dd_adr16_ifm, - &m68000_device::or_w_dd_adr32_ifm, - &m68000_device::or_l_dd_ais_ifm, - &m68000_device::or_l_dd_aips_ifm, - &m68000_device::or_l_dd_pais_ifm, - &m68000_device::or_l_dd_das_ifm, - &m68000_device::or_l_dd_dais_ifm, - &m68000_device::or_l_dd_adr16_ifm, - &m68000_device::or_l_dd_adr32_ifm, - &m68000_device::divs_w_ds_dd_ifm, - &m68000_device::divs_w_ais_dd_ifm, - &m68000_device::divs_w_aips_dd_ifm, - &m68000_device::divs_w_pais_dd_ifm, - &m68000_device::divs_w_das_dd_ifm, - &m68000_device::divs_w_dais_dd_ifm, - &m68000_device::divs_w_adr16_dd_ifm, - &m68000_device::divs_w_adr32_dd_ifm, - &m68000_device::divs_w_dpc_dd_ifm, - &m68000_device::divs_w_dpci_dd_ifm, - &m68000_device::divs_w_imm16_dd_ifm, - &m68000_device::sub_b_ds_dd_ifm, - &m68000_device::sub_b_ais_dd_ifm, - &m68000_device::sub_b_aips_dd_ifm, - &m68000_device::sub_b_pais_dd_ifm, - &m68000_device::sub_b_das_dd_ifm, - &m68000_device::sub_b_dais_dd_ifm, - &m68000_device::sub_b_adr16_dd_ifm, - &m68000_device::sub_b_adr32_dd_ifm, - &m68000_device::sub_b_dpc_dd_ifm, - &m68000_device::sub_b_dpci_dd_ifm, - &m68000_device::sub_b_imm8_dd_ifm, - &m68000_device::sub_w_ds_dd_ifm, - &m68000_device::sub_w_as_dd_ifm, - &m68000_device::sub_w_ais_dd_ifm, - &m68000_device::sub_w_aips_dd_ifm, - &m68000_device::sub_w_pais_dd_ifm, - &m68000_device::sub_w_das_dd_ifm, - &m68000_device::sub_w_dais_dd_ifm, - &m68000_device::sub_w_adr16_dd_ifm, - &m68000_device::sub_w_adr32_dd_ifm, - &m68000_device::sub_w_dpc_dd_ifm, - &m68000_device::sub_w_dpci_dd_ifm, - &m68000_device::sub_w_imm16_dd_ifm, - &m68000_device::sub_l_ds_dd_ifm, - &m68000_device::sub_l_as_dd_ifm, - &m68000_device::sub_l_ais_dd_ifm, - &m68000_device::sub_l_aips_dd_ifm, - &m68000_device::sub_l_pais_dd_ifm, - &m68000_device::sub_l_das_dd_ifm, - &m68000_device::sub_l_dais_dd_ifm, - &m68000_device::sub_l_adr16_dd_ifm, - &m68000_device::sub_l_adr32_dd_ifm, - &m68000_device::sub_l_dpc_dd_ifm, - &m68000_device::sub_l_dpci_dd_ifm, - &m68000_device::sub_l_imm32_dd_ifm, - &m68000_device::suba_w_ds_ad_ifm, - &m68000_device::suba_w_as_ad_ifm, - &m68000_device::suba_w_ais_ad_ifm, - &m68000_device::suba_w_aips_ad_ifm, - &m68000_device::suba_w_pais_ad_ifm, - &m68000_device::suba_w_das_ad_ifm, - &m68000_device::suba_w_dais_ad_ifm, - &m68000_device::suba_w_adr16_ad_ifm, - &m68000_device::suba_w_adr32_ad_ifm, - &m68000_device::suba_w_dpc_ad_ifm, - &m68000_device::suba_w_dpci_ad_ifm, - &m68000_device::suba_w_imm16_ad_ifm, - &m68000_device::subx_b_ds_dd_ifm, - &m68000_device::subx_b_pais_paid_ifm, - &m68000_device::sub_b_dd_ais_ifm, - &m68000_device::sub_b_dd_aips_ifm, - &m68000_device::sub_b_dd_pais_ifm, - &m68000_device::sub_b_dd_das_ifm, - &m68000_device::sub_b_dd_dais_ifm, - &m68000_device::sub_b_dd_adr16_ifm, - &m68000_device::sub_b_dd_adr32_ifm, - &m68000_device::subx_w_ds_dd_ifm, - &m68000_device::subx_w_pais_paid_ifm, - &m68000_device::sub_w_dd_ais_ifm, - &m68000_device::sub_w_dd_aips_ifm, - &m68000_device::sub_w_dd_pais_ifm, - &m68000_device::sub_w_dd_das_ifm, - &m68000_device::sub_w_dd_dais_ifm, - &m68000_device::sub_w_dd_adr16_ifm, - &m68000_device::sub_w_dd_adr32_ifm, - &m68000_device::subx_l_ds_dd_ifm, - &m68000_device::subx_l_pais_paid_ifm, - &m68000_device::sub_l_dd_ais_ifm, - &m68000_device::sub_l_dd_aips_ifm, - &m68000_device::sub_l_dd_pais_ifm, - &m68000_device::sub_l_dd_das_ifm, - &m68000_device::sub_l_dd_dais_ifm, - &m68000_device::sub_l_dd_adr16_ifm, - &m68000_device::sub_l_dd_adr32_ifm, - &m68000_device::suba_l_ds_ad_ifm, - &m68000_device::suba_l_as_ad_ifm, - &m68000_device::suba_l_ais_ad_ifm, - &m68000_device::suba_l_aips_ad_ifm, - &m68000_device::suba_l_pais_ad_ifm, - &m68000_device::suba_l_das_ad_ifm, - &m68000_device::suba_l_dais_ad_ifm, - &m68000_device::suba_l_adr16_ad_ifm, - &m68000_device::suba_l_adr32_ad_ifm, - &m68000_device::suba_l_dpc_ad_ifm, - &m68000_device::suba_l_dpci_ad_ifm, - &m68000_device::suba_l_imm32_ad_ifm, - &m68000_device::cmp_b_ds_dd_ifm, - &m68000_device::cmp_b_ais_dd_ifm, - &m68000_device::cmp_b_aips_dd_ifm, - &m68000_device::cmp_b_pais_dd_ifm, - &m68000_device::cmp_b_das_dd_ifm, - &m68000_device::cmp_b_dais_dd_ifm, - &m68000_device::cmp_b_adr16_dd_ifm, - &m68000_device::cmp_b_adr32_dd_ifm, - &m68000_device::cmp_b_dpc_dd_ifm, - &m68000_device::cmp_b_dpci_dd_ifm, - &m68000_device::cmp_b_imm8_dd_ifm, - &m68000_device::cmp_w_ds_dd_ifm, - &m68000_device::cmp_w_as_dd_ifm, - &m68000_device::cmp_w_ais_dd_ifm, - &m68000_device::cmp_w_aips_dd_ifm, - &m68000_device::cmp_w_pais_dd_ifm, - &m68000_device::cmp_w_das_dd_ifm, - &m68000_device::cmp_w_dais_dd_ifm, - &m68000_device::cmp_w_adr16_dd_ifm, - &m68000_device::cmp_w_adr32_dd_ifm, - &m68000_device::cmp_w_dpc_dd_ifm, - &m68000_device::cmp_w_dpci_dd_ifm, - &m68000_device::cmp_w_imm16_dd_ifm, - &m68000_device::cmp_l_ds_dd_ifm, - &m68000_device::cmp_l_as_dd_ifm, - &m68000_device::cmp_l_ais_dd_ifm, - &m68000_device::cmp_l_aips_dd_ifm, - &m68000_device::cmp_l_pais_dd_ifm, - &m68000_device::cmp_l_das_dd_ifm, - &m68000_device::cmp_l_dais_dd_ifm, - &m68000_device::cmp_l_adr16_dd_ifm, - &m68000_device::cmp_l_adr32_dd_ifm, - &m68000_device::cmp_l_dpc_dd_ifm, - &m68000_device::cmp_l_dpci_dd_ifm, - &m68000_device::cmp_l_imm32_dd_ifm, - &m68000_device::cmpa_w_ds_ad_ifm, - &m68000_device::cmpa_w_as_ad_ifm, - &m68000_device::cmpa_w_ais_ad_ifm, - &m68000_device::cmpa_w_aips_ad_ifm, - &m68000_device::cmpa_w_pais_ad_ifm, - &m68000_device::cmpa_w_das_ad_ifm, - &m68000_device::cmpa_w_dais_ad_ifm, - &m68000_device::cmpa_w_adr16_ad_ifm, - &m68000_device::cmpa_w_adr32_ad_ifm, - &m68000_device::cmpa_w_dpc_ad_ifm, - &m68000_device::cmpa_w_dpci_ad_ifm, - &m68000_device::cmpa_w_imm16_ad_ifm, - &m68000_device::eor_b_dd_ds_ifm, - &m68000_device::cmpm_b_aips_aipd_ifm, - &m68000_device::eor_b_dd_ais_ifm, - &m68000_device::eor_b_dd_aips_ifm, - &m68000_device::eor_b_dd_pais_ifm, - &m68000_device::eor_b_dd_das_ifm, - &m68000_device::eor_b_dd_dais_ifm, - &m68000_device::eor_b_dd_adr16_ifm, - &m68000_device::eor_b_dd_adr32_ifm, - &m68000_device::eor_w_dd_ds_ifm, - &m68000_device::cmpm_w_aips_aipd_ifm, - &m68000_device::eor_w_dd_ais_ifm, - &m68000_device::eor_w_dd_aips_ifm, - &m68000_device::eor_w_dd_pais_ifm, - &m68000_device::eor_w_dd_das_ifm, - &m68000_device::eor_w_dd_dais_ifm, - &m68000_device::eor_w_dd_adr16_ifm, - &m68000_device::eor_w_dd_adr32_ifm, - &m68000_device::eor_l_dd_ds_ifm, - &m68000_device::cmpm_l_aips_aipd_ifm, - &m68000_device::eor_l_dd_ais_ifm, - &m68000_device::eor_l_dd_aips_ifm, - &m68000_device::eor_l_dd_pais_ifm, - &m68000_device::eor_l_dd_das_ifm, - &m68000_device::eor_l_dd_dais_ifm, - &m68000_device::eor_l_dd_adr16_ifm, - &m68000_device::eor_l_dd_adr32_ifm, - &m68000_device::cmpa_l_ds_ad_ifm, - &m68000_device::cmpa_l_as_ad_ifm, - &m68000_device::cmpa_l_ais_ad_ifm, - &m68000_device::cmpa_l_aips_ad_ifm, - &m68000_device::cmpa_l_pais_ad_ifm, - &m68000_device::cmpa_l_das_ad_ifm, - &m68000_device::cmpa_l_dais_ad_ifm, - &m68000_device::cmpa_l_adr16_ad_ifm, - &m68000_device::cmpa_l_adr32_ad_ifm, - &m68000_device::cmpa_l_dpc_ad_ifm, - &m68000_device::cmpa_l_dpci_ad_ifm, - &m68000_device::cmpa_l_imm32_ad_ifm, - &m68000_device::and_b_ds_dd_ifm, - &m68000_device::and_b_ais_dd_ifm, - &m68000_device::and_b_aips_dd_ifm, - &m68000_device::and_b_pais_dd_ifm, - &m68000_device::and_b_das_dd_ifm, - &m68000_device::and_b_dais_dd_ifm, - &m68000_device::and_b_adr16_dd_ifm, - &m68000_device::and_b_adr32_dd_ifm, - &m68000_device::and_b_dpc_dd_ifm, - &m68000_device::and_b_dpci_dd_ifm, - &m68000_device::and_b_imm8_dd_ifm, - &m68000_device::and_w_ds_dd_ifm, - &m68000_device::and_w_ais_dd_ifm, - &m68000_device::and_w_aips_dd_ifm, - &m68000_device::and_w_pais_dd_ifm, - &m68000_device::and_w_das_dd_ifm, - &m68000_device::and_w_dais_dd_ifm, - &m68000_device::and_w_adr16_dd_ifm, - &m68000_device::and_w_adr32_dd_ifm, - &m68000_device::and_w_dpc_dd_ifm, - &m68000_device::and_w_dpci_dd_ifm, - &m68000_device::and_w_imm16_dd_ifm, - &m68000_device::and_l_ds_dd_ifm, - &m68000_device::and_l_ais_dd_ifm, - &m68000_device::and_l_aips_dd_ifm, - &m68000_device::and_l_pais_dd_ifm, - &m68000_device::and_l_das_dd_ifm, - &m68000_device::and_l_dais_dd_ifm, - &m68000_device::and_l_adr16_dd_ifm, - &m68000_device::and_l_adr32_dd_ifm, - &m68000_device::and_l_dpc_dd_ifm, - &m68000_device::and_l_dpci_dd_ifm, - &m68000_device::and_l_imm32_dd_ifm, - &m68000_device::mulu_w_ds_dd_ifm, - &m68000_device::mulu_w_ais_dd_ifm, - &m68000_device::mulu_w_aips_dd_ifm, - &m68000_device::mulu_w_pais_dd_ifm, - &m68000_device::mulu_w_das_dd_ifm, - &m68000_device::mulu_w_dais_dd_ifm, - &m68000_device::mulu_w_adr16_dd_ifm, - &m68000_device::mulu_w_adr32_dd_ifm, - &m68000_device::mulu_w_dpc_dd_ifm, - &m68000_device::mulu_w_dpci_dd_ifm, - &m68000_device::mulu_w_imm16_dd_ifm, - &m68000_device::abcd_ds_dd_ifm, - &m68000_device::abcd_pais_paid_ifm, - &m68000_device::and_b_dd_ais_ifm, - &m68000_device::and_b_dd_aips_ifm, - &m68000_device::and_b_dd_pais_ifm, - &m68000_device::and_b_dd_das_ifm, - &m68000_device::and_b_dd_dais_ifm, - &m68000_device::and_b_dd_adr16_ifm, - &m68000_device::and_b_dd_adr32_ifm, - &m68000_device::exg_dd_ds_ifm, - &m68000_device::exg_ad_as_ifm, - &m68000_device::and_w_dd_ais_ifm, - &m68000_device::and_w_dd_aips_ifm, - &m68000_device::and_w_dd_pais_ifm, - &m68000_device::and_w_dd_das_ifm, - &m68000_device::and_w_dd_dais_ifm, - &m68000_device::and_w_dd_adr16_ifm, - &m68000_device::and_w_dd_adr32_ifm, - &m68000_device::exg_dd_as_ifm, - &m68000_device::and_l_dd_ais_ifm, - &m68000_device::and_l_dd_aips_ifm, - &m68000_device::and_l_dd_pais_ifm, - &m68000_device::and_l_dd_das_ifm, - &m68000_device::and_l_dd_dais_ifm, - &m68000_device::and_l_dd_adr16_ifm, - &m68000_device::and_l_dd_adr32_ifm, - &m68000_device::muls_w_ds_dd_ifm, - &m68000_device::muls_w_ais_dd_ifm, - &m68000_device::muls_w_aips_dd_ifm, - &m68000_device::muls_w_pais_dd_ifm, - &m68000_device::muls_w_das_dd_ifm, - &m68000_device::muls_w_dais_dd_ifm, - &m68000_device::muls_w_adr16_dd_ifm, - &m68000_device::muls_w_adr32_dd_ifm, - &m68000_device::muls_w_dpc_dd_ifm, - &m68000_device::muls_w_dpci_dd_ifm, - &m68000_device::muls_w_imm16_dd_ifm, - &m68000_device::add_b_ds_dd_ifm, - &m68000_device::add_b_ais_dd_ifm, - &m68000_device::add_b_aips_dd_ifm, - &m68000_device::add_b_pais_dd_ifm, - &m68000_device::add_b_das_dd_ifm, - &m68000_device::add_b_dais_dd_ifm, - &m68000_device::add_b_adr16_dd_ifm, - &m68000_device::add_b_adr32_dd_ifm, - &m68000_device::add_b_dpc_dd_ifm, - &m68000_device::add_b_dpci_dd_ifm, - &m68000_device::add_b_imm8_dd_ifm, - &m68000_device::add_w_ds_dd_ifm, - &m68000_device::add_w_as_dd_ifm, - &m68000_device::add_w_ais_dd_ifm, - &m68000_device::add_w_aips_dd_ifm, - &m68000_device::add_w_pais_dd_ifm, - &m68000_device::add_w_das_dd_ifm, - &m68000_device::add_w_dais_dd_ifm, - &m68000_device::add_w_adr16_dd_ifm, - &m68000_device::add_w_adr32_dd_ifm, - &m68000_device::add_w_dpc_dd_ifm, - &m68000_device::add_w_dpci_dd_ifm, - &m68000_device::add_w_imm16_dd_ifm, - &m68000_device::add_l_ds_dd_ifm, - &m68000_device::add_l_as_dd_ifm, - &m68000_device::add_l_ais_dd_ifm, - &m68000_device::add_l_aips_dd_ifm, - &m68000_device::add_l_pais_dd_ifm, - &m68000_device::add_l_das_dd_ifm, - &m68000_device::add_l_dais_dd_ifm, - &m68000_device::add_l_adr16_dd_ifm, - &m68000_device::add_l_adr32_dd_ifm, - &m68000_device::add_l_dpc_dd_ifm, - &m68000_device::add_l_dpci_dd_ifm, - &m68000_device::add_l_imm32_dd_ifm, - &m68000_device::adda_w_ds_ad_ifm, - &m68000_device::adda_w_as_ad_ifm, - &m68000_device::adda_w_ais_ad_ifm, - &m68000_device::adda_w_aips_ad_ifm, - &m68000_device::adda_w_pais_ad_ifm, - &m68000_device::adda_w_das_ad_ifm, - &m68000_device::adda_w_dais_ad_ifm, - &m68000_device::adda_w_adr16_ad_ifm, - &m68000_device::adda_w_adr32_ad_ifm, - &m68000_device::adda_w_dpc_ad_ifm, - &m68000_device::adda_w_dpci_ad_ifm, - &m68000_device::adda_w_imm16_ad_ifm, - &m68000_device::addx_b_ds_dd_ifm, - &m68000_device::addx_b_pais_paid_ifm, - &m68000_device::add_b_dd_ais_ifm, - &m68000_device::add_b_dd_aips_ifm, - &m68000_device::add_b_dd_pais_ifm, - &m68000_device::add_b_dd_das_ifm, - &m68000_device::add_b_dd_dais_ifm, - &m68000_device::add_b_dd_adr16_ifm, - &m68000_device::add_b_dd_adr32_ifm, - &m68000_device::addx_w_ds_dd_ifm, - &m68000_device::addx_w_pais_paid_ifm, - &m68000_device::add_w_dd_ais_ifm, - &m68000_device::add_w_dd_aips_ifm, - &m68000_device::add_w_dd_pais_ifm, - &m68000_device::add_w_dd_das_ifm, - &m68000_device::add_w_dd_dais_ifm, - &m68000_device::add_w_dd_adr16_ifm, - &m68000_device::add_w_dd_adr32_ifm, - &m68000_device::addx_l_ds_dd_ifm, - &m68000_device::addx_l_pais_paid_ifm, - &m68000_device::add_l_dd_ais_ifm, - &m68000_device::add_l_dd_aips_ifm, - &m68000_device::add_l_dd_pais_ifm, - &m68000_device::add_l_dd_das_ifm, - &m68000_device::add_l_dd_dais_ifm, - &m68000_device::add_l_dd_adr16_ifm, - &m68000_device::add_l_dd_adr32_ifm, - &m68000_device::adda_l_ds_ad_ifm, - &m68000_device::adda_l_as_ad_ifm, - &m68000_device::adda_l_ais_ad_ifm, - &m68000_device::adda_l_aips_ad_ifm, - &m68000_device::adda_l_pais_ad_ifm, - &m68000_device::adda_l_das_ad_ifm, - &m68000_device::adda_l_dais_ad_ifm, - &m68000_device::adda_l_adr16_ad_ifm, - &m68000_device::adda_l_adr32_ad_ifm, - &m68000_device::adda_l_dpc_ad_ifm, - &m68000_device::adda_l_dpci_ad_ifm, - &m68000_device::adda_l_imm32_ad_ifm, - &m68000_device::asr_b_imm3_ds_ifm, - &m68000_device::lsr_b_imm3_ds_ifm, - &m68000_device::roxr_b_imm3_ds_ifm, - &m68000_device::ror_b_imm3_ds_ifm, - &m68000_device::asr_b_dd_ds_ifm, - &m68000_device::lsr_b_dd_ds_ifm, - &m68000_device::roxr_b_dd_ds_ifm, - &m68000_device::ror_b_dd_ds_ifm, - &m68000_device::asr_w_imm3_ds_ifm, - &m68000_device::lsr_w_imm3_ds_ifm, - &m68000_device::roxr_w_imm3_ds_ifm, - &m68000_device::ror_w_imm3_ds_ifm, - &m68000_device::asr_w_dd_ds_ifm, - &m68000_device::lsr_w_dd_ds_ifm, - &m68000_device::roxr_w_dd_ds_ifm, - &m68000_device::ror_w_dd_ds_ifm, - &m68000_device::asr_l_imm3_ds_ifm, - &m68000_device::lsr_l_imm3_ds_ifm, - &m68000_device::roxr_l_imm3_ds_ifm, - &m68000_device::ror_l_imm3_ds_ifm, - &m68000_device::asr_l_dd_ds_ifm, - &m68000_device::lsr_l_dd_ds_ifm, - &m68000_device::roxr_l_dd_ds_ifm, - &m68000_device::ror_l_dd_ds_ifm, - &m68000_device::asr_ais_ifm, - &m68000_device::asr_aips_ifm, - &m68000_device::asr_pais_ifm, - &m68000_device::asr_das_ifm, - &m68000_device::asr_dais_ifm, - &m68000_device::asr_adr16_ifm, - &m68000_device::asr_adr32_ifm, - &m68000_device::asl_b_imm3_ds_ifm, - &m68000_device::lsl_b_imm3_ds_ifm, - &m68000_device::roxl_b_imm3_ds_ifm, - &m68000_device::rol_b_imm3_ds_ifm, - &m68000_device::asl_b_dd_ds_ifm, - &m68000_device::lsl_b_dd_ds_ifm, - &m68000_device::roxl_b_dd_ds_ifm, - &m68000_device::rol_b_dd_ds_ifm, - &m68000_device::asl_w_imm3_ds_ifm, - &m68000_device::lsl_w_imm3_ds_ifm, - &m68000_device::roxl_w_imm3_ds_ifm, - &m68000_device::rol_w_imm3_ds_ifm, - &m68000_device::asl_w_dd_ds_ifm, - &m68000_device::lsl_w_dd_ds_ifm, - &m68000_device::roxl_w_dd_ds_ifm, - &m68000_device::rol_w_dd_ds_ifm, - &m68000_device::asl_l_imm3_ds_ifm, - &m68000_device::lsl_l_imm3_ds_ifm, - &m68000_device::roxl_l_imm3_ds_ifm, - &m68000_device::rol_l_imm3_ds_ifm, - &m68000_device::asl_l_dd_ds_ifm, - &m68000_device::lsl_l_dd_ds_ifm, - &m68000_device::roxl_l_dd_ds_ifm, - &m68000_device::rol_l_dd_ds_ifm, - &m68000_device::asl_ais_ifm, - &m68000_device::asl_aips_ifm, - &m68000_device::asl_pais_ifm, - &m68000_device::asl_das_ifm, - &m68000_device::asl_dais_ifm, - &m68000_device::asl_adr16_ifm, - &m68000_device::asl_adr32_ifm, - &m68000_device::lsr_ais_ifm, - &m68000_device::lsr_aips_ifm, - &m68000_device::lsr_pais_ifm, - &m68000_device::lsr_das_ifm, - &m68000_device::lsr_dais_ifm, - &m68000_device::lsr_adr16_ifm, - &m68000_device::lsr_adr32_ifm, - &m68000_device::lsl_ais_ifm, - &m68000_device::lsl_aips_ifm, - &m68000_device::lsl_pais_ifm, - &m68000_device::lsl_das_ifm, - &m68000_device::lsl_dais_ifm, - &m68000_device::lsl_adr16_ifm, - &m68000_device::lsl_adr32_ifm, - &m68000_device::roxr_ais_ifm, - &m68000_device::roxr_aips_ifm, - &m68000_device::roxr_pais_ifm, - &m68000_device::roxr_das_ifm, - &m68000_device::roxr_dais_ifm, - &m68000_device::roxr_adr16_ifm, - &m68000_device::roxr_adr32_ifm, - &m68000_device::roxl_ais_ifm, - &m68000_device::roxl_aips_ifm, - &m68000_device::roxl_pais_ifm, - &m68000_device::roxl_das_ifm, - &m68000_device::roxl_dais_ifm, - &m68000_device::roxl_adr16_ifm, - &m68000_device::roxl_adr32_ifm, - &m68000_device::ror_ais_ifm, - &m68000_device::ror_aips_ifm, - &m68000_device::ror_pais_ifm, - &m68000_device::ror_das_ifm, - &m68000_device::ror_dais_ifm, - &m68000_device::ror_adr16_ifm, - &m68000_device::ror_adr32_ifm, - &m68000_device::rol_ais_ifm, - &m68000_device::rol_aips_ifm, - &m68000_device::rol_pais_ifm, - &m68000_device::rol_das_ifm, - &m68000_device::rol_dais_ifm, - &m68000_device::rol_adr16_ifm, - &m68000_device::rol_adr32_ifm, +const m68000_mcu_device::handlerm m68000_mcu_device::s_handlers_ifm[] = { + &m68000_mcu_device::state_reset_ifm, + &m68000_mcu_device::state_bus_error_ifm, + &m68000_mcu_device::state_address_error_ifm, + &m68000_mcu_device::state_double_fault_ifm, + &m68000_mcu_device::state_interrupt_ifm, + &m68000_mcu_device::state_trace_ifm, + &m68000_mcu_device::state_illegal_ifm, + &m68000_mcu_device::state_priviledge_ifm, + &m68000_mcu_device::state_linea_ifm, + &m68000_mcu_device::state_linef_ifm, + &m68000_mcu_device::ori_b_imm8_ds_ifm, + &m68000_mcu_device::ori_b_imm8_ais_ifm, + &m68000_mcu_device::ori_b_imm8_aips_ifm, + &m68000_mcu_device::ori_b_imm8_pais_ifm, + &m68000_mcu_device::ori_b_imm8_das_ifm, + &m68000_mcu_device::ori_b_imm8_dais_ifm, + &m68000_mcu_device::ori_b_imm8_adr16_ifm, + &m68000_mcu_device::ori_b_imm8_adr32_ifm, + &m68000_mcu_device::ori_imm8_ccr_ifm, + &m68000_mcu_device::ori_w_imm16_ds_ifm, + &m68000_mcu_device::ori_w_imm16_ais_ifm, + &m68000_mcu_device::ori_w_imm16_aips_ifm, + &m68000_mcu_device::ori_w_imm16_pais_ifm, + &m68000_mcu_device::ori_w_imm16_das_ifm, + &m68000_mcu_device::ori_w_imm16_dais_ifm, + &m68000_mcu_device::ori_w_imm16_adr16_ifm, + &m68000_mcu_device::ori_w_imm16_adr32_ifm, + &m68000_mcu_device::ori_i16u_sr_ifm, + &m68000_mcu_device::ori_l_imm32_ds_ifm, + &m68000_mcu_device::ori_l_imm32_ais_ifm, + &m68000_mcu_device::ori_l_imm32_aips_ifm, + &m68000_mcu_device::ori_l_imm32_pais_ifm, + &m68000_mcu_device::ori_l_imm32_das_ifm, + &m68000_mcu_device::ori_l_imm32_dais_ifm, + &m68000_mcu_device::ori_l_imm32_adr16_ifm, + &m68000_mcu_device::ori_l_imm32_adr32_ifm, + &m68000_mcu_device::btst_dd_ds_ifm, + &m68000_mcu_device::movep_w_das_dd_ifm, + &m68000_mcu_device::btst_dd_ais_ifm, + &m68000_mcu_device::btst_dd_aips_ifm, + &m68000_mcu_device::btst_dd_pais_ifm, + &m68000_mcu_device::btst_dd_das_ifm, + &m68000_mcu_device::btst_dd_dais_ifm, + &m68000_mcu_device::btst_dd_adr16_ifm, + &m68000_mcu_device::btst_dd_adr32_ifm, + &m68000_mcu_device::btst_dd_dpc_ifm, + &m68000_mcu_device::btst_dd_dpci_ifm, + &m68000_mcu_device::btst_dd_imm_ifm, + &m68000_mcu_device::bchg_dd_ds_ifm, + &m68000_mcu_device::movep_l_das_dd_ifm, + &m68000_mcu_device::bchg_dd_ais_ifm, + &m68000_mcu_device::bchg_dd_aips_ifm, + &m68000_mcu_device::bchg_dd_pais_ifm, + &m68000_mcu_device::bchg_dd_das_ifm, + &m68000_mcu_device::bchg_dd_dais_ifm, + &m68000_mcu_device::bchg_dd_adr16_ifm, + &m68000_mcu_device::bchg_dd_adr32_ifm, + &m68000_mcu_device::bclr_dd_ds_ifm, + &m68000_mcu_device::movep_w_dd_das_ifm, + &m68000_mcu_device::bclr_dd_ais_ifm, + &m68000_mcu_device::bclr_dd_aips_ifm, + &m68000_mcu_device::bclr_dd_pais_ifm, + &m68000_mcu_device::bclr_dd_das_ifm, + &m68000_mcu_device::bclr_dd_dais_ifm, + &m68000_mcu_device::bclr_dd_adr16_ifm, + &m68000_mcu_device::bclr_dd_adr32_ifm, + &m68000_mcu_device::bset_dd_ds_ifm, + &m68000_mcu_device::movep_l_dd_das_ifm, + &m68000_mcu_device::bset_dd_ais_ifm, + &m68000_mcu_device::bset_dd_aips_ifm, + &m68000_mcu_device::bset_dd_pais_ifm, + &m68000_mcu_device::bset_dd_das_ifm, + &m68000_mcu_device::bset_dd_dais_ifm, + &m68000_mcu_device::bset_dd_adr16_ifm, + &m68000_mcu_device::bset_dd_adr32_ifm, + &m68000_mcu_device::andi_b_imm8_ds_ifm, + &m68000_mcu_device::andi_b_imm8_ais_ifm, + &m68000_mcu_device::andi_b_imm8_aips_ifm, + &m68000_mcu_device::andi_b_imm8_pais_ifm, + &m68000_mcu_device::andi_b_imm8_das_ifm, + &m68000_mcu_device::andi_b_imm8_dais_ifm, + &m68000_mcu_device::andi_b_imm8_adr16_ifm, + &m68000_mcu_device::andi_b_imm8_adr32_ifm, + &m68000_mcu_device::andi_imm8_ccr_ifm, + &m68000_mcu_device::andi_w_imm16_ds_ifm, + &m68000_mcu_device::andi_w_imm16_ais_ifm, + &m68000_mcu_device::andi_w_imm16_aips_ifm, + &m68000_mcu_device::andi_w_imm16_pais_ifm, + &m68000_mcu_device::andi_w_imm16_das_ifm, + &m68000_mcu_device::andi_w_imm16_dais_ifm, + &m68000_mcu_device::andi_w_imm16_adr16_ifm, + &m68000_mcu_device::andi_w_imm16_adr32_ifm, + &m68000_mcu_device::andi_i16u_sr_ifm, + &m68000_mcu_device::andi_l_imm32_ds_ifm, + &m68000_mcu_device::andi_l_imm32_ais_ifm, + &m68000_mcu_device::andi_l_imm32_aips_ifm, + &m68000_mcu_device::andi_l_imm32_pais_ifm, + &m68000_mcu_device::andi_l_imm32_das_ifm, + &m68000_mcu_device::andi_l_imm32_dais_ifm, + &m68000_mcu_device::andi_l_imm32_adr16_ifm, + &m68000_mcu_device::andi_l_imm32_adr32_ifm, + &m68000_mcu_device::subi_b_imm8_ds_ifm, + &m68000_mcu_device::subi_b_imm8_ais_ifm, + &m68000_mcu_device::subi_b_imm8_aips_ifm, + &m68000_mcu_device::subi_b_imm8_pais_ifm, + &m68000_mcu_device::subi_b_imm8_das_ifm, + &m68000_mcu_device::subi_b_imm8_dais_ifm, + &m68000_mcu_device::subi_b_imm8_adr16_ifm, + &m68000_mcu_device::subi_b_imm8_adr32_ifm, + &m68000_mcu_device::subi_w_imm16_ds_ifm, + &m68000_mcu_device::subi_w_imm16_ais_ifm, + &m68000_mcu_device::subi_w_imm16_aips_ifm, + &m68000_mcu_device::subi_w_imm16_pais_ifm, + &m68000_mcu_device::subi_w_imm16_das_ifm, + &m68000_mcu_device::subi_w_imm16_dais_ifm, + &m68000_mcu_device::subi_w_imm16_adr16_ifm, + &m68000_mcu_device::subi_w_imm16_adr32_ifm, + &m68000_mcu_device::subi_l_imm32_ds_ifm, + &m68000_mcu_device::subi_l_imm32_ais_ifm, + &m68000_mcu_device::subi_l_imm32_aips_ifm, + &m68000_mcu_device::subi_l_imm32_pais_ifm, + &m68000_mcu_device::subi_l_imm32_das_ifm, + &m68000_mcu_device::subi_l_imm32_dais_ifm, + &m68000_mcu_device::subi_l_imm32_adr16_ifm, + &m68000_mcu_device::subi_l_imm32_adr32_ifm, + &m68000_mcu_device::addi_b_imm8_ds_ifm, + &m68000_mcu_device::addi_b_imm8_ais_ifm, + &m68000_mcu_device::addi_b_imm8_aips_ifm, + &m68000_mcu_device::addi_b_imm8_pais_ifm, + &m68000_mcu_device::addi_b_imm8_das_ifm, + &m68000_mcu_device::addi_b_imm8_dais_ifm, + &m68000_mcu_device::addi_b_imm8_adr16_ifm, + &m68000_mcu_device::addi_b_imm8_adr32_ifm, + &m68000_mcu_device::addi_w_imm16_ds_ifm, + &m68000_mcu_device::addi_w_imm16_ais_ifm, + &m68000_mcu_device::addi_w_imm16_aips_ifm, + &m68000_mcu_device::addi_w_imm16_pais_ifm, + &m68000_mcu_device::addi_w_imm16_das_ifm, + &m68000_mcu_device::addi_w_imm16_dais_ifm, + &m68000_mcu_device::addi_w_imm16_adr16_ifm, + &m68000_mcu_device::addi_w_imm16_adr32_ifm, + &m68000_mcu_device::addi_l_imm32_ds_ifm, + &m68000_mcu_device::addi_l_imm32_ais_ifm, + &m68000_mcu_device::addi_l_imm32_aips_ifm, + &m68000_mcu_device::addi_l_imm32_pais_ifm, + &m68000_mcu_device::addi_l_imm32_das_ifm, + &m68000_mcu_device::addi_l_imm32_dais_ifm, + &m68000_mcu_device::addi_l_imm32_adr16_ifm, + &m68000_mcu_device::addi_l_imm32_adr32_ifm, + &m68000_mcu_device::btst_imm8_ds_ifm, + &m68000_mcu_device::btst_imm8_ais_ifm, + &m68000_mcu_device::btst_imm8_aips_ifm, + &m68000_mcu_device::btst_imm8_pais_ifm, + &m68000_mcu_device::btst_imm8_das_ifm, + &m68000_mcu_device::btst_imm8_dais_ifm, + &m68000_mcu_device::btst_imm8_adr16_ifm, + &m68000_mcu_device::btst_imm8_adr32_ifm, + &m68000_mcu_device::btst_imm8_dpc_ifm, + &m68000_mcu_device::btst_imm8_dpci_ifm, + &m68000_mcu_device::bchg_imm8_ds_ifm, + &m68000_mcu_device::bchg_imm8_ais_ifm, + &m68000_mcu_device::bchg_imm8_aips_ifm, + &m68000_mcu_device::bchg_imm8_pais_ifm, + &m68000_mcu_device::bchg_imm8_das_ifm, + &m68000_mcu_device::bchg_imm8_dais_ifm, + &m68000_mcu_device::bchg_imm8_adr16_ifm, + &m68000_mcu_device::bchg_imm8_adr32_ifm, + &m68000_mcu_device::bclr_imm8_ds_ifm, + &m68000_mcu_device::bclr_imm8_ais_ifm, + &m68000_mcu_device::bclr_imm8_aips_ifm, + &m68000_mcu_device::bclr_imm8_pais_ifm, + &m68000_mcu_device::bclr_imm8_das_ifm, + &m68000_mcu_device::bclr_imm8_dais_ifm, + &m68000_mcu_device::bclr_imm8_adr16_ifm, + &m68000_mcu_device::bclr_imm8_adr32_ifm, + &m68000_mcu_device::bset_imm8_ds_ifm, + &m68000_mcu_device::bset_imm8_ais_ifm, + &m68000_mcu_device::bset_imm8_aips_ifm, + &m68000_mcu_device::bset_imm8_pais_ifm, + &m68000_mcu_device::bset_imm8_das_ifm, + &m68000_mcu_device::bset_imm8_dais_ifm, + &m68000_mcu_device::bset_imm8_adr16_ifm, + &m68000_mcu_device::bset_imm8_adr32_ifm, + &m68000_mcu_device::eori_b_imm8_ds_ifm, + &m68000_mcu_device::eori_b_imm8_ais_ifm, + &m68000_mcu_device::eori_b_imm8_aips_ifm, + &m68000_mcu_device::eori_b_imm8_pais_ifm, + &m68000_mcu_device::eori_b_imm8_das_ifm, + &m68000_mcu_device::eori_b_imm8_dais_ifm, + &m68000_mcu_device::eori_b_imm8_adr16_ifm, + &m68000_mcu_device::eori_b_imm8_adr32_ifm, + &m68000_mcu_device::eori_imm8_ccr_ifm, + &m68000_mcu_device::eori_w_imm16_ds_ifm, + &m68000_mcu_device::eori_w_imm16_ais_ifm, + &m68000_mcu_device::eori_w_imm16_aips_ifm, + &m68000_mcu_device::eori_w_imm16_pais_ifm, + &m68000_mcu_device::eori_w_imm16_das_ifm, + &m68000_mcu_device::eori_w_imm16_dais_ifm, + &m68000_mcu_device::eori_w_imm16_adr16_ifm, + &m68000_mcu_device::eori_w_imm16_adr32_ifm, + &m68000_mcu_device::eori_i16u_sr_ifm, + &m68000_mcu_device::eori_l_imm32_ds_ifm, + &m68000_mcu_device::eori_l_imm32_ais_ifm, + &m68000_mcu_device::eori_l_imm32_aips_ifm, + &m68000_mcu_device::eori_l_imm32_pais_ifm, + &m68000_mcu_device::eori_l_imm32_das_ifm, + &m68000_mcu_device::eori_l_imm32_dais_ifm, + &m68000_mcu_device::eori_l_imm32_adr16_ifm, + &m68000_mcu_device::eori_l_imm32_adr32_ifm, + &m68000_mcu_device::cmpi_b_imm8_ds_ifm, + &m68000_mcu_device::cmpi_b_imm8_ais_ifm, + &m68000_mcu_device::cmpi_b_imm8_aips_ifm, + &m68000_mcu_device::cmpi_b_imm8_pais_ifm, + &m68000_mcu_device::cmpi_b_imm8_das_ifm, + &m68000_mcu_device::cmpi_b_imm8_dais_ifm, + &m68000_mcu_device::cmpi_b_imm8_adr16_ifm, + &m68000_mcu_device::cmpi_b_imm8_adr32_ifm, + &m68000_mcu_device::cmpi_w_imm16_ds_ifm, + &m68000_mcu_device::cmpi_w_imm16_ais_ifm, + &m68000_mcu_device::cmpi_w_imm16_aips_ifm, + &m68000_mcu_device::cmpi_w_imm16_pais_ifm, + &m68000_mcu_device::cmpi_w_imm16_das_ifm, + &m68000_mcu_device::cmpi_w_imm16_dais_ifm, + &m68000_mcu_device::cmpi_w_imm16_adr16_ifm, + &m68000_mcu_device::cmpi_w_imm16_adr32_ifm, + &m68000_mcu_device::cmpi_l_imm32_ds_ifm, + &m68000_mcu_device::cmpi_l_imm32_ais_ifm, + &m68000_mcu_device::cmpi_l_imm32_aips_ifm, + &m68000_mcu_device::cmpi_l_imm32_pais_ifm, + &m68000_mcu_device::cmpi_l_imm32_das_ifm, + &m68000_mcu_device::cmpi_l_imm32_dais_ifm, + &m68000_mcu_device::cmpi_l_imm32_adr16_ifm, + &m68000_mcu_device::cmpi_l_imm32_adr32_ifm, + &m68000_mcu_device::move_b_ds_dd_ifm, + &m68000_mcu_device::move_b_ais_dd_ifm, + &m68000_mcu_device::move_b_aips_dd_ifm, + &m68000_mcu_device::move_b_pais_dd_ifm, + &m68000_mcu_device::move_b_das_dd_ifm, + &m68000_mcu_device::move_b_dais_dd_ifm, + &m68000_mcu_device::move_b_adr16_dd_ifm, + &m68000_mcu_device::move_b_adr32_dd_ifm, + &m68000_mcu_device::move_b_dpc_dd_ifm, + &m68000_mcu_device::move_b_dpci_dd_ifm, + &m68000_mcu_device::move_b_imm8_dd_ifm, + &m68000_mcu_device::move_b_ds_aid_ifm, + &m68000_mcu_device::move_b_ais_aid_ifm, + &m68000_mcu_device::move_b_aips_aid_ifm, + &m68000_mcu_device::move_b_pais_aid_ifm, + &m68000_mcu_device::move_b_das_aid_ifm, + &m68000_mcu_device::move_b_dais_aid_ifm, + &m68000_mcu_device::move_b_adr16_aid_ifm, + &m68000_mcu_device::move_b_adr32_aid_ifm, + &m68000_mcu_device::move_b_dpc_aid_ifm, + &m68000_mcu_device::move_b_dpci_aid_ifm, + &m68000_mcu_device::move_b_imm8_aid_ifm, + &m68000_mcu_device::move_b_ds_aipd_ifm, + &m68000_mcu_device::move_b_ais_aipd_ifm, + &m68000_mcu_device::move_b_aips_aipd_ifm, + &m68000_mcu_device::move_b_pais_aipd_ifm, + &m68000_mcu_device::move_b_das_aipd_ifm, + &m68000_mcu_device::move_b_dais_aipd_ifm, + &m68000_mcu_device::move_b_adr16_aipd_ifm, + &m68000_mcu_device::move_b_adr32_aipd_ifm, + &m68000_mcu_device::move_b_dpc_aipd_ifm, + &m68000_mcu_device::move_b_dpci_aipd_ifm, + &m68000_mcu_device::move_b_imm8_aipd_ifm, + &m68000_mcu_device::move_b_ds_paid_ifm, + &m68000_mcu_device::move_b_ais_paid_ifm, + &m68000_mcu_device::move_b_aips_paid_ifm, + &m68000_mcu_device::move_b_pais_paid_ifm, + &m68000_mcu_device::move_b_das_paid_ifm, + &m68000_mcu_device::move_b_dais_paid_ifm, + &m68000_mcu_device::move_b_adr16_paid_ifm, + &m68000_mcu_device::move_b_adr32_paid_ifm, + &m68000_mcu_device::move_b_dpc_paid_ifm, + &m68000_mcu_device::move_b_dpci_paid_ifm, + &m68000_mcu_device::move_b_imm8_paid_ifm, + &m68000_mcu_device::move_b_ds_dad_ifm, + &m68000_mcu_device::move_b_ais_dad_ifm, + &m68000_mcu_device::move_b_aips_dad_ifm, + &m68000_mcu_device::move_b_pais_dad_ifm, + &m68000_mcu_device::move_b_das_dad_ifm, + &m68000_mcu_device::move_b_dais_dad_ifm, + &m68000_mcu_device::move_b_adr16_dad_ifm, + &m68000_mcu_device::move_b_adr32_dad_ifm, + &m68000_mcu_device::move_b_dpc_dad_ifm, + &m68000_mcu_device::move_b_dpci_dad_ifm, + &m68000_mcu_device::move_b_imm8_dad_ifm, + &m68000_mcu_device::move_b_ds_daid_ifm, + &m68000_mcu_device::move_b_ais_daid_ifm, + &m68000_mcu_device::move_b_aips_daid_ifm, + &m68000_mcu_device::move_b_pais_daid_ifm, + &m68000_mcu_device::move_b_das_daid_ifm, + &m68000_mcu_device::move_b_dais_daid_ifm, + &m68000_mcu_device::move_b_adr16_daid_ifm, + &m68000_mcu_device::move_b_adr32_daid_ifm, + &m68000_mcu_device::move_b_dpc_daid_ifm, + &m68000_mcu_device::move_b_dpci_daid_ifm, + &m68000_mcu_device::move_b_imm8_daid_ifm, + &m68000_mcu_device::move_b_ds_adr16_ifm, + &m68000_mcu_device::move_b_ais_adr16_ifm, + &m68000_mcu_device::move_b_aips_adr16_ifm, + &m68000_mcu_device::move_b_pais_adr16_ifm, + &m68000_mcu_device::move_b_das_adr16_ifm, + &m68000_mcu_device::move_b_dais_adr16_ifm, + &m68000_mcu_device::move_b_adr16_adr16_ifm, + &m68000_mcu_device::move_b_adr32_adr16_ifm, + &m68000_mcu_device::move_b_dpc_adr16_ifm, + &m68000_mcu_device::move_b_dpci_adr16_ifm, + &m68000_mcu_device::move_b_imm8_adr16_ifm, + &m68000_mcu_device::move_b_ds_adr32_ifm, + &m68000_mcu_device::move_b_ais_adr32_ifm, + &m68000_mcu_device::move_b_aips_adr32_ifm, + &m68000_mcu_device::move_b_pais_adr32_ifm, + &m68000_mcu_device::move_b_das_adr32_ifm, + &m68000_mcu_device::move_b_dais_adr32_ifm, + &m68000_mcu_device::move_b_adr16_adr32_ifm, + &m68000_mcu_device::move_b_adr32_adr32_ifm, + &m68000_mcu_device::move_b_dpc_adr32_ifm, + &m68000_mcu_device::move_b_dpci_adr32_ifm, + &m68000_mcu_device::move_b_imm8_adr32_ifm, + &m68000_mcu_device::move_l_ds_dd_ifm, + &m68000_mcu_device::move_l_as_dd_ifm, + &m68000_mcu_device::move_l_ais_dd_ifm, + &m68000_mcu_device::move_l_aips_dd_ifm, + &m68000_mcu_device::move_l_pais_dd_ifm, + &m68000_mcu_device::move_l_das_dd_ifm, + &m68000_mcu_device::move_l_dais_dd_ifm, + &m68000_mcu_device::move_l_adr16_dd_ifm, + &m68000_mcu_device::move_l_adr32_dd_ifm, + &m68000_mcu_device::move_l_dpc_dd_ifm, + &m68000_mcu_device::move_l_dpci_dd_ifm, + &m68000_mcu_device::move_l_imm32_dd_ifm, + &m68000_mcu_device::movea_l_ds_ad_ifm, + &m68000_mcu_device::movea_l_as_ad_ifm, + &m68000_mcu_device::movea_l_ais_ad_ifm, + &m68000_mcu_device::movea_l_aips_ad_ifm, + &m68000_mcu_device::movea_l_pais_ad_ifm, + &m68000_mcu_device::movea_l_das_ad_ifm, + &m68000_mcu_device::movea_l_dais_ad_ifm, + &m68000_mcu_device::movea_l_adr16_ad_ifm, + &m68000_mcu_device::movea_l_adr32_ad_ifm, + &m68000_mcu_device::movea_l_dpc_ad_ifm, + &m68000_mcu_device::movea_l_dpci_ad_ifm, + &m68000_mcu_device::movea_l_imm32_ad_ifm, + &m68000_mcu_device::move_l_ds_aid_ifm, + &m68000_mcu_device::move_l_as_aid_ifm, + &m68000_mcu_device::move_l_ais_aid_ifm, + &m68000_mcu_device::move_l_aips_aid_ifm, + &m68000_mcu_device::move_l_pais_aid_ifm, + &m68000_mcu_device::move_l_das_aid_ifm, + &m68000_mcu_device::move_l_dais_aid_ifm, + &m68000_mcu_device::move_l_adr16_aid_ifm, + &m68000_mcu_device::move_l_adr32_aid_ifm, + &m68000_mcu_device::move_l_dpc_aid_ifm, + &m68000_mcu_device::move_l_dpci_aid_ifm, + &m68000_mcu_device::move_l_imm32_aid_ifm, + &m68000_mcu_device::move_l_ds_aipd_ifm, + &m68000_mcu_device::move_l_as_aipd_ifm, + &m68000_mcu_device::move_l_ais_aipd_ifm, + &m68000_mcu_device::move_l_aips_aipd_ifm, + &m68000_mcu_device::move_l_pais_aipd_ifm, + &m68000_mcu_device::move_l_das_aipd_ifm, + &m68000_mcu_device::move_l_dais_aipd_ifm, + &m68000_mcu_device::move_l_adr16_aipd_ifm, + &m68000_mcu_device::move_l_adr32_aipd_ifm, + &m68000_mcu_device::move_l_dpc_aipd_ifm, + &m68000_mcu_device::move_l_dpci_aipd_ifm, + &m68000_mcu_device::move_l_imm32_aipd_ifm, + &m68000_mcu_device::move_l_ds_paid_ifm, + &m68000_mcu_device::move_l_as_paid_ifm, + &m68000_mcu_device::move_l_ais_paid_ifm, + &m68000_mcu_device::move_l_aips_paid_ifm, + &m68000_mcu_device::move_l_pais_paid_ifm, + &m68000_mcu_device::move_l_das_paid_ifm, + &m68000_mcu_device::move_l_dais_paid_ifm, + &m68000_mcu_device::move_l_adr16_paid_ifm, + &m68000_mcu_device::move_l_adr32_paid_ifm, + &m68000_mcu_device::move_l_dpc_paid_ifm, + &m68000_mcu_device::move_l_dpci_paid_ifm, + &m68000_mcu_device::move_l_imm32_paid_ifm, + &m68000_mcu_device::move_l_ds_dad_ifm, + &m68000_mcu_device::move_l_as_dad_ifm, + &m68000_mcu_device::move_l_ais_dad_ifm, + &m68000_mcu_device::move_l_aips_dad_ifm, + &m68000_mcu_device::move_l_pais_dad_ifm, + &m68000_mcu_device::move_l_das_dad_ifm, + &m68000_mcu_device::move_l_dais_dad_ifm, + &m68000_mcu_device::move_l_adr16_dad_ifm, + &m68000_mcu_device::move_l_adr32_dad_ifm, + &m68000_mcu_device::move_l_dpc_dad_ifm, + &m68000_mcu_device::move_l_dpci_dad_ifm, + &m68000_mcu_device::move_l_imm32_dad_ifm, + &m68000_mcu_device::move_l_ds_daid_ifm, + &m68000_mcu_device::move_l_as_daid_ifm, + &m68000_mcu_device::move_l_ais_daid_ifm, + &m68000_mcu_device::move_l_aips_daid_ifm, + &m68000_mcu_device::move_l_pais_daid_ifm, + &m68000_mcu_device::move_l_das_daid_ifm, + &m68000_mcu_device::move_l_dais_daid_ifm, + &m68000_mcu_device::move_l_adr16_daid_ifm, + &m68000_mcu_device::move_l_adr32_daid_ifm, + &m68000_mcu_device::move_l_dpc_daid_ifm, + &m68000_mcu_device::move_l_dpci_daid_ifm, + &m68000_mcu_device::move_l_imm32_daid_ifm, + &m68000_mcu_device::move_l_ds_adr16_ifm, + &m68000_mcu_device::move_l_as_adr16_ifm, + &m68000_mcu_device::move_l_ais_adr16_ifm, + &m68000_mcu_device::move_l_aips_adr16_ifm, + &m68000_mcu_device::move_l_pais_adr16_ifm, + &m68000_mcu_device::move_l_das_adr16_ifm, + &m68000_mcu_device::move_l_dais_adr16_ifm, + &m68000_mcu_device::move_l_adr16_adr16_ifm, + &m68000_mcu_device::move_l_adr32_adr16_ifm, + &m68000_mcu_device::move_l_dpc_adr16_ifm, + &m68000_mcu_device::move_l_dpci_adr16_ifm, + &m68000_mcu_device::move_l_imm32_adr16_ifm, + &m68000_mcu_device::move_l_ds_adr32_ifm, + &m68000_mcu_device::move_l_as_adr32_ifm, + &m68000_mcu_device::move_l_ais_adr32_ifm, + &m68000_mcu_device::move_l_aips_adr32_ifm, + &m68000_mcu_device::move_l_pais_adr32_ifm, + &m68000_mcu_device::move_l_das_adr32_ifm, + &m68000_mcu_device::move_l_dais_adr32_ifm, + &m68000_mcu_device::move_l_adr16_adr32_ifm, + &m68000_mcu_device::move_l_adr32_adr32_ifm, + &m68000_mcu_device::move_l_dpc_adr32_ifm, + &m68000_mcu_device::move_l_dpci_adr32_ifm, + &m68000_mcu_device::move_l_imm32_adr32_ifm, + &m68000_mcu_device::move_w_ds_dd_ifm, + &m68000_mcu_device::move_w_as_dd_ifm, + &m68000_mcu_device::move_w_ais_dd_ifm, + &m68000_mcu_device::move_w_aips_dd_ifm, + &m68000_mcu_device::move_w_pais_dd_ifm, + &m68000_mcu_device::move_w_das_dd_ifm, + &m68000_mcu_device::move_w_dais_dd_ifm, + &m68000_mcu_device::move_w_adr16_dd_ifm, + &m68000_mcu_device::move_w_adr32_dd_ifm, + &m68000_mcu_device::move_w_dpc_dd_ifm, + &m68000_mcu_device::move_w_dpci_dd_ifm, + &m68000_mcu_device::move_w_imm16_dd_ifm, + &m68000_mcu_device::movea_w_ds_ad_ifm, + &m68000_mcu_device::movea_w_as_ad_ifm, + &m68000_mcu_device::movea_w_ais_ad_ifm, + &m68000_mcu_device::movea_w_aips_ad_ifm, + &m68000_mcu_device::movea_w_pais_ad_ifm, + &m68000_mcu_device::movea_w_das_ad_ifm, + &m68000_mcu_device::movea_w_dais_ad_ifm, + &m68000_mcu_device::movea_w_adr16_ad_ifm, + &m68000_mcu_device::movea_w_adr32_ad_ifm, + &m68000_mcu_device::movea_w_dpc_ad_ifm, + &m68000_mcu_device::movea_w_dpci_ad_ifm, + &m68000_mcu_device::movea_w_imm16_ad_ifm, + &m68000_mcu_device::move_w_ds_aid_ifm, + &m68000_mcu_device::move_w_as_aid_ifm, + &m68000_mcu_device::move_w_ais_aid_ifm, + &m68000_mcu_device::move_w_aips_aid_ifm, + &m68000_mcu_device::move_w_pais_aid_ifm, + &m68000_mcu_device::move_w_das_aid_ifm, + &m68000_mcu_device::move_w_dais_aid_ifm, + &m68000_mcu_device::move_w_adr16_aid_ifm, + &m68000_mcu_device::move_w_adr32_aid_ifm, + &m68000_mcu_device::move_w_dpc_aid_ifm, + &m68000_mcu_device::move_w_dpci_aid_ifm, + &m68000_mcu_device::move_w_imm16_aid_ifm, + &m68000_mcu_device::move_w_ds_aipd_ifm, + &m68000_mcu_device::move_w_as_aipd_ifm, + &m68000_mcu_device::move_w_ais_aipd_ifm, + &m68000_mcu_device::move_w_aips_aipd_ifm, + &m68000_mcu_device::move_w_pais_aipd_ifm, + &m68000_mcu_device::move_w_das_aipd_ifm, + &m68000_mcu_device::move_w_dais_aipd_ifm, + &m68000_mcu_device::move_w_adr16_aipd_ifm, + &m68000_mcu_device::move_w_adr32_aipd_ifm, + &m68000_mcu_device::move_w_dpc_aipd_ifm, + &m68000_mcu_device::move_w_dpci_aipd_ifm, + &m68000_mcu_device::move_w_imm16_aipd_ifm, + &m68000_mcu_device::move_w_ds_paid_ifm, + &m68000_mcu_device::move_w_as_paid_ifm, + &m68000_mcu_device::move_w_ais_paid_ifm, + &m68000_mcu_device::move_w_aips_paid_ifm, + &m68000_mcu_device::move_w_pais_paid_ifm, + &m68000_mcu_device::move_w_das_paid_ifm, + &m68000_mcu_device::move_w_dais_paid_ifm, + &m68000_mcu_device::move_w_adr16_paid_ifm, + &m68000_mcu_device::move_w_adr32_paid_ifm, + &m68000_mcu_device::move_w_dpc_paid_ifm, + &m68000_mcu_device::move_w_dpci_paid_ifm, + &m68000_mcu_device::move_w_imm16_paid_ifm, + &m68000_mcu_device::move_w_ds_dad_ifm, + &m68000_mcu_device::move_w_as_dad_ifm, + &m68000_mcu_device::move_w_ais_dad_ifm, + &m68000_mcu_device::move_w_aips_dad_ifm, + &m68000_mcu_device::move_w_pais_dad_ifm, + &m68000_mcu_device::move_w_das_dad_ifm, + &m68000_mcu_device::move_w_dais_dad_ifm, + &m68000_mcu_device::move_w_adr16_dad_ifm, + &m68000_mcu_device::move_w_adr32_dad_ifm, + &m68000_mcu_device::move_w_dpc_dad_ifm, + &m68000_mcu_device::move_w_dpci_dad_ifm, + &m68000_mcu_device::move_w_imm16_dad_ifm, + &m68000_mcu_device::move_w_ds_daid_ifm, + &m68000_mcu_device::move_w_as_daid_ifm, + &m68000_mcu_device::move_w_ais_daid_ifm, + &m68000_mcu_device::move_w_aips_daid_ifm, + &m68000_mcu_device::move_w_pais_daid_ifm, + &m68000_mcu_device::move_w_das_daid_ifm, + &m68000_mcu_device::move_w_dais_daid_ifm, + &m68000_mcu_device::move_w_adr16_daid_ifm, + &m68000_mcu_device::move_w_adr32_daid_ifm, + &m68000_mcu_device::move_w_dpc_daid_ifm, + &m68000_mcu_device::move_w_dpci_daid_ifm, + &m68000_mcu_device::move_w_imm16_daid_ifm, + &m68000_mcu_device::move_w_ds_adr16_ifm, + &m68000_mcu_device::move_w_as_adr16_ifm, + &m68000_mcu_device::move_w_ais_adr16_ifm, + &m68000_mcu_device::move_w_aips_adr16_ifm, + &m68000_mcu_device::move_w_pais_adr16_ifm, + &m68000_mcu_device::move_w_das_adr16_ifm, + &m68000_mcu_device::move_w_dais_adr16_ifm, + &m68000_mcu_device::move_w_adr16_adr16_ifm, + &m68000_mcu_device::move_w_adr32_adr16_ifm, + &m68000_mcu_device::move_w_dpc_adr16_ifm, + &m68000_mcu_device::move_w_dpci_adr16_ifm, + &m68000_mcu_device::move_w_imm16_adr16_ifm, + &m68000_mcu_device::move_w_ds_adr32_ifm, + &m68000_mcu_device::move_w_as_adr32_ifm, + &m68000_mcu_device::move_w_ais_adr32_ifm, + &m68000_mcu_device::move_w_aips_adr32_ifm, + &m68000_mcu_device::move_w_pais_adr32_ifm, + &m68000_mcu_device::move_w_das_adr32_ifm, + &m68000_mcu_device::move_w_dais_adr32_ifm, + &m68000_mcu_device::move_w_adr16_adr32_ifm, + &m68000_mcu_device::move_w_adr32_adr32_ifm, + &m68000_mcu_device::move_w_dpc_adr32_ifm, + &m68000_mcu_device::move_w_dpci_adr32_ifm, + &m68000_mcu_device::move_w_imm16_adr32_ifm, + &m68000_mcu_device::negx_b_ds_ifm, + &m68000_mcu_device::negx_b_ais_ifm, + &m68000_mcu_device::negx_b_aips_ifm, + &m68000_mcu_device::negx_b_pais_ifm, + &m68000_mcu_device::negx_b_das_ifm, + &m68000_mcu_device::negx_b_dais_ifm, + &m68000_mcu_device::negx_b_adr16_ifm, + &m68000_mcu_device::negx_b_adr32_ifm, + &m68000_mcu_device::negx_w_ds_ifm, + &m68000_mcu_device::negx_w_ais_ifm, + &m68000_mcu_device::negx_w_aips_ifm, + &m68000_mcu_device::negx_w_pais_ifm, + &m68000_mcu_device::negx_w_das_ifm, + &m68000_mcu_device::negx_w_dais_ifm, + &m68000_mcu_device::negx_w_adr16_ifm, + &m68000_mcu_device::negx_w_adr32_ifm, + &m68000_mcu_device::negx_l_ds_ifm, + &m68000_mcu_device::negx_l_ais_ifm, + &m68000_mcu_device::negx_l_aips_ifm, + &m68000_mcu_device::negx_l_pais_ifm, + &m68000_mcu_device::negx_l_das_ifm, + &m68000_mcu_device::negx_l_dais_ifm, + &m68000_mcu_device::negx_l_adr16_ifm, + &m68000_mcu_device::negx_l_adr32_ifm, + &m68000_mcu_device::move_sr_ds_ifm, + &m68000_mcu_device::move_sr_ais_ifm, + &m68000_mcu_device::move_sr_aips_ifm, + &m68000_mcu_device::move_sr_pais_ifm, + &m68000_mcu_device::move_sr_das_ifm, + &m68000_mcu_device::move_sr_dais_ifm, + &m68000_mcu_device::move_sr_adr16_ifm, + &m68000_mcu_device::move_sr_adr32_ifm, + &m68000_mcu_device::chk_w_ds_dd_ifm, + &m68000_mcu_device::chk_w_ais_dd_ifm, + &m68000_mcu_device::chk_w_aips_dd_ifm, + &m68000_mcu_device::chk_w_pais_dd_ifm, + &m68000_mcu_device::chk_w_das_dd_ifm, + &m68000_mcu_device::chk_w_dais_dd_ifm, + &m68000_mcu_device::chk_w_adr16_dd_ifm, + &m68000_mcu_device::chk_w_adr32_dd_ifm, + &m68000_mcu_device::chk_w_dpc_dd_ifm, + &m68000_mcu_device::chk_w_dpci_dd_ifm, + &m68000_mcu_device::chk_w_imm16_dd_ifm, + &m68000_mcu_device::lea_ais_ad_ifm, + &m68000_mcu_device::lea_das_ad_ifm, + &m68000_mcu_device::lea_dais_ad_ifm, + &m68000_mcu_device::lea_adr16_ad_ifm, + &m68000_mcu_device::lea_adr32_ad_ifm, + &m68000_mcu_device::lea_dpc_ad_ifm, + &m68000_mcu_device::lea_dpci_ad_ifm, + &m68000_mcu_device::clr_b_ds_ifm, + &m68000_mcu_device::clr_b_ais_ifm, + &m68000_mcu_device::clr_b_aips_ifm, + &m68000_mcu_device::clr_b_pais_ifm, + &m68000_mcu_device::clr_b_das_ifm, + &m68000_mcu_device::clr_b_dais_ifm, + &m68000_mcu_device::clr_b_adr16_ifm, + &m68000_mcu_device::clr_b_adr32_ifm, + &m68000_mcu_device::clr_w_ds_ifm, + &m68000_mcu_device::clr_w_ais_ifm, + &m68000_mcu_device::clr_w_aips_ifm, + &m68000_mcu_device::clr_w_pais_ifm, + &m68000_mcu_device::clr_w_das_ifm, + &m68000_mcu_device::clr_w_dais_ifm, + &m68000_mcu_device::clr_w_adr16_ifm, + &m68000_mcu_device::clr_w_adr32_ifm, + &m68000_mcu_device::clr_l_ds_ifm, + &m68000_mcu_device::clr_l_ais_ifm, + &m68000_mcu_device::clr_l_aips_ifm, + &m68000_mcu_device::clr_l_pais_ifm, + &m68000_mcu_device::clr_l_das_ifm, + &m68000_mcu_device::clr_l_dais_ifm, + &m68000_mcu_device::clr_l_adr16_ifm, + &m68000_mcu_device::clr_l_adr32_ifm, + &m68000_mcu_device::neg_b_ds_ifm, + &m68000_mcu_device::neg_b_ais_ifm, + &m68000_mcu_device::neg_b_aips_ifm, + &m68000_mcu_device::neg_b_pais_ifm, + &m68000_mcu_device::neg_b_das_ifm, + &m68000_mcu_device::neg_b_dais_ifm, + &m68000_mcu_device::neg_b_adr16_ifm, + &m68000_mcu_device::neg_b_adr32_ifm, + &m68000_mcu_device::neg_w_ds_ifm, + &m68000_mcu_device::neg_w_ais_ifm, + &m68000_mcu_device::neg_w_aips_ifm, + &m68000_mcu_device::neg_w_pais_ifm, + &m68000_mcu_device::neg_w_das_ifm, + &m68000_mcu_device::neg_w_dais_ifm, + &m68000_mcu_device::neg_w_adr16_ifm, + &m68000_mcu_device::neg_w_adr32_ifm, + &m68000_mcu_device::neg_l_ds_ifm, + &m68000_mcu_device::neg_l_ais_ifm, + &m68000_mcu_device::neg_l_aips_ifm, + &m68000_mcu_device::neg_l_pais_ifm, + &m68000_mcu_device::neg_l_das_ifm, + &m68000_mcu_device::neg_l_dais_ifm, + &m68000_mcu_device::neg_l_adr16_ifm, + &m68000_mcu_device::neg_l_adr32_ifm, + &m68000_mcu_device::move_ds_ccr_ifm, + &m68000_mcu_device::move_ais_ccr_ifm, + &m68000_mcu_device::move_aips_ccr_ifm, + &m68000_mcu_device::move_pais_ccr_ifm, + &m68000_mcu_device::move_das_ccr_ifm, + &m68000_mcu_device::move_dais_ccr_ifm, + &m68000_mcu_device::move_adr16_ccr_ifm, + &m68000_mcu_device::move_adr32_ccr_ifm, + &m68000_mcu_device::move_dpc_ccr_ifm, + &m68000_mcu_device::move_dpci_ccr_ifm, + &m68000_mcu_device::move_imm8_ccr_ifm, + &m68000_mcu_device::not_b_ds_ifm, + &m68000_mcu_device::not_b_ais_ifm, + &m68000_mcu_device::not_b_aips_ifm, + &m68000_mcu_device::not_b_pais_ifm, + &m68000_mcu_device::not_b_das_ifm, + &m68000_mcu_device::not_b_dais_ifm, + &m68000_mcu_device::not_b_adr16_ifm, + &m68000_mcu_device::not_b_adr32_ifm, + &m68000_mcu_device::not_w_ds_ifm, + &m68000_mcu_device::not_w_ais_ifm, + &m68000_mcu_device::not_w_aips_ifm, + &m68000_mcu_device::not_w_pais_ifm, + &m68000_mcu_device::not_w_das_ifm, + &m68000_mcu_device::not_w_dais_ifm, + &m68000_mcu_device::not_w_adr16_ifm, + &m68000_mcu_device::not_w_adr32_ifm, + &m68000_mcu_device::not_l_ds_ifm, + &m68000_mcu_device::not_l_ais_ifm, + &m68000_mcu_device::not_l_aips_ifm, + &m68000_mcu_device::not_l_pais_ifm, + &m68000_mcu_device::not_l_das_ifm, + &m68000_mcu_device::not_l_dais_ifm, + &m68000_mcu_device::not_l_adr16_ifm, + &m68000_mcu_device::not_l_adr32_ifm, + &m68000_mcu_device::move_ds_sr_ifm, + &m68000_mcu_device::move_ais_sr_ifm, + &m68000_mcu_device::move_aips_sr_ifm, + &m68000_mcu_device::move_pais_sr_ifm, + &m68000_mcu_device::move_das_sr_ifm, + &m68000_mcu_device::move_dais_sr_ifm, + &m68000_mcu_device::move_adr16_sr_ifm, + &m68000_mcu_device::move_adr32_sr_ifm, + &m68000_mcu_device::move_dpc_sr_ifm, + &m68000_mcu_device::move_dpci_sr_ifm, + &m68000_mcu_device::move_i16u_sr_ifm, + &m68000_mcu_device::nbcd_b_ds_ifm, + &m68000_mcu_device::nbcd_b_ais_ifm, + &m68000_mcu_device::nbcd_b_aips_ifm, + &m68000_mcu_device::nbcd_b_pais_ifm, + &m68000_mcu_device::nbcd_b_das_ifm, + &m68000_mcu_device::nbcd_b_dais_ifm, + &m68000_mcu_device::nbcd_b_adr16_ifm, + &m68000_mcu_device::nbcd_b_adr32_ifm, + &m68000_mcu_device::swap_ds_ifm, + &m68000_mcu_device::pea_ais_ifm, + &m68000_mcu_device::pea_das_ifm, + &m68000_mcu_device::pea_dais_ifm, + &m68000_mcu_device::pea_adr16_ifm, + &m68000_mcu_device::pea_adr32_ifm, + &m68000_mcu_device::pea_dpc_ifm, + &m68000_mcu_device::pea_dpci_ifm, + &m68000_mcu_device::ext_w_ds_ifm, + &m68000_mcu_device::movem_w_list_ais_ifm, + &m68000_mcu_device::movem_w_listp_pais_ifm, + &m68000_mcu_device::movem_w_list_das_ifm, + &m68000_mcu_device::movem_w_list_dais_ifm, + &m68000_mcu_device::movem_w_list_adr16_ifm, + &m68000_mcu_device::movem_w_list_adr32_ifm, + &m68000_mcu_device::ext_l_ds_ifm, + &m68000_mcu_device::movem_l_list_ais_ifm, + &m68000_mcu_device::movem_l_listp_pais_ifm, + &m68000_mcu_device::movem_l_list_das_ifm, + &m68000_mcu_device::movem_l_list_dais_ifm, + &m68000_mcu_device::movem_l_list_adr16_ifm, + &m68000_mcu_device::movem_l_list_adr32_ifm, + &m68000_mcu_device::tst_b_ds_ifm, + &m68000_mcu_device::tst_b_ais_ifm, + &m68000_mcu_device::tst_b_aips_ifm, + &m68000_mcu_device::tst_b_pais_ifm, + &m68000_mcu_device::tst_b_das_ifm, + &m68000_mcu_device::tst_b_dais_ifm, + &m68000_mcu_device::tst_b_adr16_ifm, + &m68000_mcu_device::tst_b_adr32_ifm, + &m68000_mcu_device::tst_w_ds_ifm, + &m68000_mcu_device::tst_w_ais_ifm, + &m68000_mcu_device::tst_w_aips_ifm, + &m68000_mcu_device::tst_w_pais_ifm, + &m68000_mcu_device::tst_w_das_ifm, + &m68000_mcu_device::tst_w_dais_ifm, + &m68000_mcu_device::tst_w_adr16_ifm, + &m68000_mcu_device::tst_w_adr32_ifm, + &m68000_mcu_device::tst_l_ds_ifm, + &m68000_mcu_device::tst_l_ais_ifm, + &m68000_mcu_device::tst_l_aips_ifm, + &m68000_mcu_device::tst_l_pais_ifm, + &m68000_mcu_device::tst_l_das_ifm, + &m68000_mcu_device::tst_l_dais_ifm, + &m68000_mcu_device::tst_l_adr16_ifm, + &m68000_mcu_device::tst_l_adr32_ifm, + &m68000_mcu_device::tas_ds_ifm, + &m68000_mcu_device::tas_ais_ifm, + &m68000_mcu_device::tas_aips_ifm, + &m68000_mcu_device::tas_pais_ifm, + &m68000_mcu_device::tas_das_ifm, + &m68000_mcu_device::tas_dais_ifm, + &m68000_mcu_device::tas_adr16_ifm, + &m68000_mcu_device::tas_adr32_ifm, + &m68000_mcu_device::movem_w_ais_list_ifm, + &m68000_mcu_device::movem_w_aips_list_ifm, + &m68000_mcu_device::movem_w_das_list_ifm, + &m68000_mcu_device::movem_w_dais_list_ifm, + &m68000_mcu_device::movem_w_adr16_list_ifm, + &m68000_mcu_device::movem_w_adr32_list_ifm, + &m68000_mcu_device::movem_w_dpc_list_ifm, + &m68000_mcu_device::movem_w_dpci_list_ifm, + &m68000_mcu_device::movem_l_ais_list_ifm, + &m68000_mcu_device::movem_l_aips_list_ifm, + &m68000_mcu_device::movem_l_das_list_ifm, + &m68000_mcu_device::movem_l_dais_list_ifm, + &m68000_mcu_device::movem_l_adr16_list_ifm, + &m68000_mcu_device::movem_l_adr32_list_ifm, + &m68000_mcu_device::movem_l_dpc_list_ifm, + &m68000_mcu_device::movem_l_dpci_list_ifm, + &m68000_mcu_device::trap_imm4_ifm, + &m68000_mcu_device::link_as_imm16_ifm, + &m68000_mcu_device::unlk_as_ifm, + &m68000_mcu_device::move_as_usp_ifm, + &m68000_mcu_device::move_usp_as_ifm, + &m68000_mcu_device::reset_ifm, + &m68000_mcu_device::nop_ifm, + &m68000_mcu_device::stop_i16u_ifm, + &m68000_mcu_device::rte_ifm, + &m68000_mcu_device::rts_ifm, + &m68000_mcu_device::trapv_ifm, + &m68000_mcu_device::rtr_ifm, + &m68000_mcu_device::jsr_ais_ifm, + &m68000_mcu_device::jsr_das_ifm, + &m68000_mcu_device::jsr_dais_ifm, + &m68000_mcu_device::jsr_adr16_ifm, + &m68000_mcu_device::jsr_adr32_ifm, + &m68000_mcu_device::jsr_dpc_ifm, + &m68000_mcu_device::jsr_dpci_ifm, + &m68000_mcu_device::jmp_ais_ifm, + &m68000_mcu_device::jmp_das_ifm, + &m68000_mcu_device::jmp_dais_ifm, + &m68000_mcu_device::jmp_adr16_ifm, + &m68000_mcu_device::jmp_adr32_ifm, + &m68000_mcu_device::jmp_dpc_ifm, + &m68000_mcu_device::jmp_dpci_ifm, + &m68000_mcu_device::addq_b_imm3_ds_ifm, + &m68000_mcu_device::addq_b_imm3_ais_ifm, + &m68000_mcu_device::addq_b_imm3_aips_ifm, + &m68000_mcu_device::addq_b_imm3_pais_ifm, + &m68000_mcu_device::addq_b_imm3_das_ifm, + &m68000_mcu_device::addq_b_imm3_dais_ifm, + &m68000_mcu_device::addq_b_imm3_adr16_ifm, + &m68000_mcu_device::addq_b_imm3_adr32_ifm, + &m68000_mcu_device::addq_w_imm3_ds_ifm, + &m68000_mcu_device::addq_w_imm3_as_ifm, + &m68000_mcu_device::addq_w_imm3_ais_ifm, + &m68000_mcu_device::addq_w_imm3_aips_ifm, + &m68000_mcu_device::addq_w_imm3_pais_ifm, + &m68000_mcu_device::addq_w_imm3_das_ifm, + &m68000_mcu_device::addq_w_imm3_dais_ifm, + &m68000_mcu_device::addq_w_imm3_adr16_ifm, + &m68000_mcu_device::addq_w_imm3_adr32_ifm, + &m68000_mcu_device::addq_l_imm3_ds_ifm, + &m68000_mcu_device::addq_l_imm3_as_ifm, + &m68000_mcu_device::addq_l_imm3_ais_ifm, + &m68000_mcu_device::addq_l_imm3_aips_ifm, + &m68000_mcu_device::addq_l_imm3_pais_ifm, + &m68000_mcu_device::addq_l_imm3_das_ifm, + &m68000_mcu_device::addq_l_imm3_dais_ifm, + &m68000_mcu_device::addq_l_imm3_adr16_ifm, + &m68000_mcu_device::addq_l_imm3_adr32_ifm, + &m68000_mcu_device::st_ds_ifm, + &m68000_mcu_device::dbt_ds_rel16_ifm, + &m68000_mcu_device::st_ais_ifm, + &m68000_mcu_device::st_aips_ifm, + &m68000_mcu_device::st_pais_ifm, + &m68000_mcu_device::st_das_ifm, + &m68000_mcu_device::st_dais_ifm, + &m68000_mcu_device::st_adr16_ifm, + &m68000_mcu_device::st_adr32_ifm, + &m68000_mcu_device::subq_b_imm3_ds_ifm, + &m68000_mcu_device::subq_b_imm3_ais_ifm, + &m68000_mcu_device::subq_b_imm3_aips_ifm, + &m68000_mcu_device::subq_b_imm3_pais_ifm, + &m68000_mcu_device::subq_b_imm3_das_ifm, + &m68000_mcu_device::subq_b_imm3_dais_ifm, + &m68000_mcu_device::subq_b_imm3_adr16_ifm, + &m68000_mcu_device::subq_b_imm3_adr32_ifm, + &m68000_mcu_device::subq_w_imm3_ds_ifm, + &m68000_mcu_device::subq_w_imm3_as_ifm, + &m68000_mcu_device::subq_w_imm3_ais_ifm, + &m68000_mcu_device::subq_w_imm3_aips_ifm, + &m68000_mcu_device::subq_w_imm3_pais_ifm, + &m68000_mcu_device::subq_w_imm3_das_ifm, + &m68000_mcu_device::subq_w_imm3_dais_ifm, + &m68000_mcu_device::subq_w_imm3_adr16_ifm, + &m68000_mcu_device::subq_w_imm3_adr32_ifm, + &m68000_mcu_device::subq_l_imm3_ds_ifm, + &m68000_mcu_device::subq_l_imm3_as_ifm, + &m68000_mcu_device::subq_l_imm3_ais_ifm, + &m68000_mcu_device::subq_l_imm3_aips_ifm, + &m68000_mcu_device::subq_l_imm3_pais_ifm, + &m68000_mcu_device::subq_l_imm3_das_ifm, + &m68000_mcu_device::subq_l_imm3_dais_ifm, + &m68000_mcu_device::subq_l_imm3_adr16_ifm, + &m68000_mcu_device::subq_l_imm3_adr32_ifm, + &m68000_mcu_device::sf_ds_ifm, + &m68000_mcu_device::dbra_ds_rel16_ifm, + &m68000_mcu_device::sf_ais_ifm, + &m68000_mcu_device::sf_aips_ifm, + &m68000_mcu_device::sf_pais_ifm, + &m68000_mcu_device::sf_das_ifm, + &m68000_mcu_device::sf_dais_ifm, + &m68000_mcu_device::sf_adr16_ifm, + &m68000_mcu_device::sf_adr32_ifm, + &m68000_mcu_device::shi_ds_ifm, + &m68000_mcu_device::dbhi_ds_rel16_ifm, + &m68000_mcu_device::shi_ais_ifm, + &m68000_mcu_device::shi_aips_ifm, + &m68000_mcu_device::shi_pais_ifm, + &m68000_mcu_device::shi_das_ifm, + &m68000_mcu_device::shi_dais_ifm, + &m68000_mcu_device::shi_adr16_ifm, + &m68000_mcu_device::shi_adr32_ifm, + &m68000_mcu_device::sls_ds_ifm, + &m68000_mcu_device::dbls_ds_rel16_ifm, + &m68000_mcu_device::sls_ais_ifm, + &m68000_mcu_device::sls_aips_ifm, + &m68000_mcu_device::sls_pais_ifm, + &m68000_mcu_device::sls_das_ifm, + &m68000_mcu_device::sls_dais_ifm, + &m68000_mcu_device::sls_adr16_ifm, + &m68000_mcu_device::sls_adr32_ifm, + &m68000_mcu_device::scc_ds_ifm, + &m68000_mcu_device::dbcc_ds_rel16_ifm, + &m68000_mcu_device::scc_ais_ifm, + &m68000_mcu_device::scc_aips_ifm, + &m68000_mcu_device::scc_pais_ifm, + &m68000_mcu_device::scc_das_ifm, + &m68000_mcu_device::scc_dais_ifm, + &m68000_mcu_device::scc_adr16_ifm, + &m68000_mcu_device::scc_adr32_ifm, + &m68000_mcu_device::scs_ds_ifm, + &m68000_mcu_device::dbcs_ds_rel16_ifm, + &m68000_mcu_device::scs_ais_ifm, + &m68000_mcu_device::scs_aips_ifm, + &m68000_mcu_device::scs_pais_ifm, + &m68000_mcu_device::scs_das_ifm, + &m68000_mcu_device::scs_dais_ifm, + &m68000_mcu_device::scs_adr16_ifm, + &m68000_mcu_device::scs_adr32_ifm, + &m68000_mcu_device::sne_ds_ifm, + &m68000_mcu_device::dbne_ds_rel16_ifm, + &m68000_mcu_device::sne_ais_ifm, + &m68000_mcu_device::sne_aips_ifm, + &m68000_mcu_device::sne_pais_ifm, + &m68000_mcu_device::sne_das_ifm, + &m68000_mcu_device::sne_dais_ifm, + &m68000_mcu_device::sne_adr16_ifm, + &m68000_mcu_device::sne_adr32_ifm, + &m68000_mcu_device::seq_ds_ifm, + &m68000_mcu_device::dbeq_ds_rel16_ifm, + &m68000_mcu_device::seq_ais_ifm, + &m68000_mcu_device::seq_aips_ifm, + &m68000_mcu_device::seq_pais_ifm, + &m68000_mcu_device::seq_das_ifm, + &m68000_mcu_device::seq_dais_ifm, + &m68000_mcu_device::seq_adr16_ifm, + &m68000_mcu_device::seq_adr32_ifm, + &m68000_mcu_device::svc_ds_ifm, + &m68000_mcu_device::dbvc_ds_rel16_ifm, + &m68000_mcu_device::svc_ais_ifm, + &m68000_mcu_device::svc_aips_ifm, + &m68000_mcu_device::svc_pais_ifm, + &m68000_mcu_device::svc_das_ifm, + &m68000_mcu_device::svc_dais_ifm, + &m68000_mcu_device::svc_adr16_ifm, + &m68000_mcu_device::svc_adr32_ifm, + &m68000_mcu_device::svs_ds_ifm, + &m68000_mcu_device::dbvs_ds_rel16_ifm, + &m68000_mcu_device::svs_ais_ifm, + &m68000_mcu_device::svs_aips_ifm, + &m68000_mcu_device::svs_pais_ifm, + &m68000_mcu_device::svs_das_ifm, + &m68000_mcu_device::svs_dais_ifm, + &m68000_mcu_device::svs_adr16_ifm, + &m68000_mcu_device::svs_adr32_ifm, + &m68000_mcu_device::spl_ds_ifm, + &m68000_mcu_device::dbpl_ds_rel16_ifm, + &m68000_mcu_device::spl_ais_ifm, + &m68000_mcu_device::spl_aips_ifm, + &m68000_mcu_device::spl_pais_ifm, + &m68000_mcu_device::spl_das_ifm, + &m68000_mcu_device::spl_dais_ifm, + &m68000_mcu_device::spl_adr16_ifm, + &m68000_mcu_device::spl_adr32_ifm, + &m68000_mcu_device::smi_ds_ifm, + &m68000_mcu_device::dbmi_ds_rel16_ifm, + &m68000_mcu_device::smi_ais_ifm, + &m68000_mcu_device::smi_aips_ifm, + &m68000_mcu_device::smi_pais_ifm, + &m68000_mcu_device::smi_das_ifm, + &m68000_mcu_device::smi_dais_ifm, + &m68000_mcu_device::smi_adr16_ifm, + &m68000_mcu_device::smi_adr32_ifm, + &m68000_mcu_device::sge_ds_ifm, + &m68000_mcu_device::dbge_ds_rel16_ifm, + &m68000_mcu_device::sge_ais_ifm, + &m68000_mcu_device::sge_aips_ifm, + &m68000_mcu_device::sge_pais_ifm, + &m68000_mcu_device::sge_das_ifm, + &m68000_mcu_device::sge_dais_ifm, + &m68000_mcu_device::sge_adr16_ifm, + &m68000_mcu_device::sge_adr32_ifm, + &m68000_mcu_device::slt_ds_ifm, + &m68000_mcu_device::dblt_ds_rel16_ifm, + &m68000_mcu_device::slt_ais_ifm, + &m68000_mcu_device::slt_aips_ifm, + &m68000_mcu_device::slt_pais_ifm, + &m68000_mcu_device::slt_das_ifm, + &m68000_mcu_device::slt_dais_ifm, + &m68000_mcu_device::slt_adr16_ifm, + &m68000_mcu_device::slt_adr32_ifm, + &m68000_mcu_device::sgt_ds_ifm, + &m68000_mcu_device::dbgt_ds_rel16_ifm, + &m68000_mcu_device::sgt_ais_ifm, + &m68000_mcu_device::sgt_aips_ifm, + &m68000_mcu_device::sgt_pais_ifm, + &m68000_mcu_device::sgt_das_ifm, + &m68000_mcu_device::sgt_dais_ifm, + &m68000_mcu_device::sgt_adr16_ifm, + &m68000_mcu_device::sgt_adr32_ifm, + &m68000_mcu_device::sle_ds_ifm, + &m68000_mcu_device::dble_ds_rel16_ifm, + &m68000_mcu_device::sle_ais_ifm, + &m68000_mcu_device::sle_aips_ifm, + &m68000_mcu_device::sle_pais_ifm, + &m68000_mcu_device::sle_das_ifm, + &m68000_mcu_device::sle_dais_ifm, + &m68000_mcu_device::sle_adr16_ifm, + &m68000_mcu_device::sle_adr32_ifm, + &m68000_mcu_device::bra_rel16_ifm, + &m68000_mcu_device::bra_rel8_ifm, + &m68000_mcu_device::bsr_rel16_ifm, + &m68000_mcu_device::bsr_rel8_ifm, + &m68000_mcu_device::bhi_rel16_ifm, + &m68000_mcu_device::bhi_rel8_ifm, + &m68000_mcu_device::bls_rel16_ifm, + &m68000_mcu_device::bls_rel8_ifm, + &m68000_mcu_device::bcc_rel16_ifm, + &m68000_mcu_device::bcc_rel8_ifm, + &m68000_mcu_device::bcs_rel16_ifm, + &m68000_mcu_device::bcs_rel8_ifm, + &m68000_mcu_device::bne_rel16_ifm, + &m68000_mcu_device::bne_rel8_ifm, + &m68000_mcu_device::beq_rel16_ifm, + &m68000_mcu_device::beq_rel8_ifm, + &m68000_mcu_device::bvc_rel16_ifm, + &m68000_mcu_device::bvc_rel8_ifm, + &m68000_mcu_device::bvs_rel16_ifm, + &m68000_mcu_device::bvs_rel8_ifm, + &m68000_mcu_device::bpl_rel16_ifm, + &m68000_mcu_device::bpl_rel8_ifm, + &m68000_mcu_device::bmi_rel16_ifm, + &m68000_mcu_device::bmi_rel8_ifm, + &m68000_mcu_device::bge_rel16_ifm, + &m68000_mcu_device::bge_rel8_ifm, + &m68000_mcu_device::blt_rel16_ifm, + &m68000_mcu_device::blt_rel8_ifm, + &m68000_mcu_device::bgt_rel16_ifm, + &m68000_mcu_device::bgt_rel8_ifm, + &m68000_mcu_device::ble_rel16_ifm, + &m68000_mcu_device::ble_rel8_ifm, + &m68000_mcu_device::moveq_imm8o_dd_ifm, + &m68000_mcu_device::or_b_ds_dd_ifm, + &m68000_mcu_device::or_b_ais_dd_ifm, + &m68000_mcu_device::or_b_aips_dd_ifm, + &m68000_mcu_device::or_b_pais_dd_ifm, + &m68000_mcu_device::or_b_das_dd_ifm, + &m68000_mcu_device::or_b_dais_dd_ifm, + &m68000_mcu_device::or_b_adr16_dd_ifm, + &m68000_mcu_device::or_b_adr32_dd_ifm, + &m68000_mcu_device::or_b_dpc_dd_ifm, + &m68000_mcu_device::or_b_dpci_dd_ifm, + &m68000_mcu_device::or_b_imm8_dd_ifm, + &m68000_mcu_device::or_w_ds_dd_ifm, + &m68000_mcu_device::or_w_ais_dd_ifm, + &m68000_mcu_device::or_w_aips_dd_ifm, + &m68000_mcu_device::or_w_pais_dd_ifm, + &m68000_mcu_device::or_w_das_dd_ifm, + &m68000_mcu_device::or_w_dais_dd_ifm, + &m68000_mcu_device::or_w_adr16_dd_ifm, + &m68000_mcu_device::or_w_adr32_dd_ifm, + &m68000_mcu_device::or_w_dpc_dd_ifm, + &m68000_mcu_device::or_w_dpci_dd_ifm, + &m68000_mcu_device::or_w_imm16_dd_ifm, + &m68000_mcu_device::or_l_ds_dd_ifm, + &m68000_mcu_device::or_l_ais_dd_ifm, + &m68000_mcu_device::or_l_aips_dd_ifm, + &m68000_mcu_device::or_l_pais_dd_ifm, + &m68000_mcu_device::or_l_das_dd_ifm, + &m68000_mcu_device::or_l_dais_dd_ifm, + &m68000_mcu_device::or_l_adr16_dd_ifm, + &m68000_mcu_device::or_l_adr32_dd_ifm, + &m68000_mcu_device::or_l_dpc_dd_ifm, + &m68000_mcu_device::or_l_dpci_dd_ifm, + &m68000_mcu_device::or_l_imm32_dd_ifm, + &m68000_mcu_device::divu_w_ds_dd_ifm, + &m68000_mcu_device::divu_w_ais_dd_ifm, + &m68000_mcu_device::divu_w_aips_dd_ifm, + &m68000_mcu_device::divu_w_pais_dd_ifm, + &m68000_mcu_device::divu_w_das_dd_ifm, + &m68000_mcu_device::divu_w_dais_dd_ifm, + &m68000_mcu_device::divu_w_adr16_dd_ifm, + &m68000_mcu_device::divu_w_adr32_dd_ifm, + &m68000_mcu_device::divu_w_dpc_dd_ifm, + &m68000_mcu_device::divu_w_dpci_dd_ifm, + &m68000_mcu_device::divu_w_imm16_dd_ifm, + &m68000_mcu_device::sbcd_ds_dd_ifm, + &m68000_mcu_device::sbcd_pais_paid_ifm, + &m68000_mcu_device::or_b_dd_ais_ifm, + &m68000_mcu_device::or_b_dd_aips_ifm, + &m68000_mcu_device::or_b_dd_pais_ifm, + &m68000_mcu_device::or_b_dd_das_ifm, + &m68000_mcu_device::or_b_dd_dais_ifm, + &m68000_mcu_device::or_b_dd_adr16_ifm, + &m68000_mcu_device::or_b_dd_adr32_ifm, + &m68000_mcu_device::or_w_dd_ais_ifm, + &m68000_mcu_device::or_w_dd_aips_ifm, + &m68000_mcu_device::or_w_dd_pais_ifm, + &m68000_mcu_device::or_w_dd_das_ifm, + &m68000_mcu_device::or_w_dd_dais_ifm, + &m68000_mcu_device::or_w_dd_adr16_ifm, + &m68000_mcu_device::or_w_dd_adr32_ifm, + &m68000_mcu_device::or_l_dd_ais_ifm, + &m68000_mcu_device::or_l_dd_aips_ifm, + &m68000_mcu_device::or_l_dd_pais_ifm, + &m68000_mcu_device::or_l_dd_das_ifm, + &m68000_mcu_device::or_l_dd_dais_ifm, + &m68000_mcu_device::or_l_dd_adr16_ifm, + &m68000_mcu_device::or_l_dd_adr32_ifm, + &m68000_mcu_device::divs_w_ds_dd_ifm, + &m68000_mcu_device::divs_w_ais_dd_ifm, + &m68000_mcu_device::divs_w_aips_dd_ifm, + &m68000_mcu_device::divs_w_pais_dd_ifm, + &m68000_mcu_device::divs_w_das_dd_ifm, + &m68000_mcu_device::divs_w_dais_dd_ifm, + &m68000_mcu_device::divs_w_adr16_dd_ifm, + &m68000_mcu_device::divs_w_adr32_dd_ifm, + &m68000_mcu_device::divs_w_dpc_dd_ifm, + &m68000_mcu_device::divs_w_dpci_dd_ifm, + &m68000_mcu_device::divs_w_imm16_dd_ifm, + &m68000_mcu_device::sub_b_ds_dd_ifm, + &m68000_mcu_device::sub_b_ais_dd_ifm, + &m68000_mcu_device::sub_b_aips_dd_ifm, + &m68000_mcu_device::sub_b_pais_dd_ifm, + &m68000_mcu_device::sub_b_das_dd_ifm, + &m68000_mcu_device::sub_b_dais_dd_ifm, + &m68000_mcu_device::sub_b_adr16_dd_ifm, + &m68000_mcu_device::sub_b_adr32_dd_ifm, + &m68000_mcu_device::sub_b_dpc_dd_ifm, + &m68000_mcu_device::sub_b_dpci_dd_ifm, + &m68000_mcu_device::sub_b_imm8_dd_ifm, + &m68000_mcu_device::sub_w_ds_dd_ifm, + &m68000_mcu_device::sub_w_as_dd_ifm, + &m68000_mcu_device::sub_w_ais_dd_ifm, + &m68000_mcu_device::sub_w_aips_dd_ifm, + &m68000_mcu_device::sub_w_pais_dd_ifm, + &m68000_mcu_device::sub_w_das_dd_ifm, + &m68000_mcu_device::sub_w_dais_dd_ifm, + &m68000_mcu_device::sub_w_adr16_dd_ifm, + &m68000_mcu_device::sub_w_adr32_dd_ifm, + &m68000_mcu_device::sub_w_dpc_dd_ifm, + &m68000_mcu_device::sub_w_dpci_dd_ifm, + &m68000_mcu_device::sub_w_imm16_dd_ifm, + &m68000_mcu_device::sub_l_ds_dd_ifm, + &m68000_mcu_device::sub_l_as_dd_ifm, + &m68000_mcu_device::sub_l_ais_dd_ifm, + &m68000_mcu_device::sub_l_aips_dd_ifm, + &m68000_mcu_device::sub_l_pais_dd_ifm, + &m68000_mcu_device::sub_l_das_dd_ifm, + &m68000_mcu_device::sub_l_dais_dd_ifm, + &m68000_mcu_device::sub_l_adr16_dd_ifm, + &m68000_mcu_device::sub_l_adr32_dd_ifm, + &m68000_mcu_device::sub_l_dpc_dd_ifm, + &m68000_mcu_device::sub_l_dpci_dd_ifm, + &m68000_mcu_device::sub_l_imm32_dd_ifm, + &m68000_mcu_device::suba_w_ds_ad_ifm, + &m68000_mcu_device::suba_w_as_ad_ifm, + &m68000_mcu_device::suba_w_ais_ad_ifm, + &m68000_mcu_device::suba_w_aips_ad_ifm, + &m68000_mcu_device::suba_w_pais_ad_ifm, + &m68000_mcu_device::suba_w_das_ad_ifm, + &m68000_mcu_device::suba_w_dais_ad_ifm, + &m68000_mcu_device::suba_w_adr16_ad_ifm, + &m68000_mcu_device::suba_w_adr32_ad_ifm, + &m68000_mcu_device::suba_w_dpc_ad_ifm, + &m68000_mcu_device::suba_w_dpci_ad_ifm, + &m68000_mcu_device::suba_w_imm16_ad_ifm, + &m68000_mcu_device::subx_b_ds_dd_ifm, + &m68000_mcu_device::subx_b_pais_paid_ifm, + &m68000_mcu_device::sub_b_dd_ais_ifm, + &m68000_mcu_device::sub_b_dd_aips_ifm, + &m68000_mcu_device::sub_b_dd_pais_ifm, + &m68000_mcu_device::sub_b_dd_das_ifm, + &m68000_mcu_device::sub_b_dd_dais_ifm, + &m68000_mcu_device::sub_b_dd_adr16_ifm, + &m68000_mcu_device::sub_b_dd_adr32_ifm, + &m68000_mcu_device::subx_w_ds_dd_ifm, + &m68000_mcu_device::subx_w_pais_paid_ifm, + &m68000_mcu_device::sub_w_dd_ais_ifm, + &m68000_mcu_device::sub_w_dd_aips_ifm, + &m68000_mcu_device::sub_w_dd_pais_ifm, + &m68000_mcu_device::sub_w_dd_das_ifm, + &m68000_mcu_device::sub_w_dd_dais_ifm, + &m68000_mcu_device::sub_w_dd_adr16_ifm, + &m68000_mcu_device::sub_w_dd_adr32_ifm, + &m68000_mcu_device::subx_l_ds_dd_ifm, + &m68000_mcu_device::subx_l_pais_paid_ifm, + &m68000_mcu_device::sub_l_dd_ais_ifm, + &m68000_mcu_device::sub_l_dd_aips_ifm, + &m68000_mcu_device::sub_l_dd_pais_ifm, + &m68000_mcu_device::sub_l_dd_das_ifm, + &m68000_mcu_device::sub_l_dd_dais_ifm, + &m68000_mcu_device::sub_l_dd_adr16_ifm, + &m68000_mcu_device::sub_l_dd_adr32_ifm, + &m68000_mcu_device::suba_l_ds_ad_ifm, + &m68000_mcu_device::suba_l_as_ad_ifm, + &m68000_mcu_device::suba_l_ais_ad_ifm, + &m68000_mcu_device::suba_l_aips_ad_ifm, + &m68000_mcu_device::suba_l_pais_ad_ifm, + &m68000_mcu_device::suba_l_das_ad_ifm, + &m68000_mcu_device::suba_l_dais_ad_ifm, + &m68000_mcu_device::suba_l_adr16_ad_ifm, + &m68000_mcu_device::suba_l_adr32_ad_ifm, + &m68000_mcu_device::suba_l_dpc_ad_ifm, + &m68000_mcu_device::suba_l_dpci_ad_ifm, + &m68000_mcu_device::suba_l_imm32_ad_ifm, + &m68000_mcu_device::cmp_b_ds_dd_ifm, + &m68000_mcu_device::cmp_b_ais_dd_ifm, + &m68000_mcu_device::cmp_b_aips_dd_ifm, + &m68000_mcu_device::cmp_b_pais_dd_ifm, + &m68000_mcu_device::cmp_b_das_dd_ifm, + &m68000_mcu_device::cmp_b_dais_dd_ifm, + &m68000_mcu_device::cmp_b_adr16_dd_ifm, + &m68000_mcu_device::cmp_b_adr32_dd_ifm, + &m68000_mcu_device::cmp_b_dpc_dd_ifm, + &m68000_mcu_device::cmp_b_dpci_dd_ifm, + &m68000_mcu_device::cmp_b_imm8_dd_ifm, + &m68000_mcu_device::cmp_w_ds_dd_ifm, + &m68000_mcu_device::cmp_w_as_dd_ifm, + &m68000_mcu_device::cmp_w_ais_dd_ifm, + &m68000_mcu_device::cmp_w_aips_dd_ifm, + &m68000_mcu_device::cmp_w_pais_dd_ifm, + &m68000_mcu_device::cmp_w_das_dd_ifm, + &m68000_mcu_device::cmp_w_dais_dd_ifm, + &m68000_mcu_device::cmp_w_adr16_dd_ifm, + &m68000_mcu_device::cmp_w_adr32_dd_ifm, + &m68000_mcu_device::cmp_w_dpc_dd_ifm, + &m68000_mcu_device::cmp_w_dpci_dd_ifm, + &m68000_mcu_device::cmp_w_imm16_dd_ifm, + &m68000_mcu_device::cmp_l_ds_dd_ifm, + &m68000_mcu_device::cmp_l_as_dd_ifm, + &m68000_mcu_device::cmp_l_ais_dd_ifm, + &m68000_mcu_device::cmp_l_aips_dd_ifm, + &m68000_mcu_device::cmp_l_pais_dd_ifm, + &m68000_mcu_device::cmp_l_das_dd_ifm, + &m68000_mcu_device::cmp_l_dais_dd_ifm, + &m68000_mcu_device::cmp_l_adr16_dd_ifm, + &m68000_mcu_device::cmp_l_adr32_dd_ifm, + &m68000_mcu_device::cmp_l_dpc_dd_ifm, + &m68000_mcu_device::cmp_l_dpci_dd_ifm, + &m68000_mcu_device::cmp_l_imm32_dd_ifm, + &m68000_mcu_device::cmpa_w_ds_ad_ifm, + &m68000_mcu_device::cmpa_w_as_ad_ifm, + &m68000_mcu_device::cmpa_w_ais_ad_ifm, + &m68000_mcu_device::cmpa_w_aips_ad_ifm, + &m68000_mcu_device::cmpa_w_pais_ad_ifm, + &m68000_mcu_device::cmpa_w_das_ad_ifm, + &m68000_mcu_device::cmpa_w_dais_ad_ifm, + &m68000_mcu_device::cmpa_w_adr16_ad_ifm, + &m68000_mcu_device::cmpa_w_adr32_ad_ifm, + &m68000_mcu_device::cmpa_w_dpc_ad_ifm, + &m68000_mcu_device::cmpa_w_dpci_ad_ifm, + &m68000_mcu_device::cmpa_w_imm16_ad_ifm, + &m68000_mcu_device::eor_b_dd_ds_ifm, + &m68000_mcu_device::cmpm_b_aips_aipd_ifm, + &m68000_mcu_device::eor_b_dd_ais_ifm, + &m68000_mcu_device::eor_b_dd_aips_ifm, + &m68000_mcu_device::eor_b_dd_pais_ifm, + &m68000_mcu_device::eor_b_dd_das_ifm, + &m68000_mcu_device::eor_b_dd_dais_ifm, + &m68000_mcu_device::eor_b_dd_adr16_ifm, + &m68000_mcu_device::eor_b_dd_adr32_ifm, + &m68000_mcu_device::eor_w_dd_ds_ifm, + &m68000_mcu_device::cmpm_w_aips_aipd_ifm, + &m68000_mcu_device::eor_w_dd_ais_ifm, + &m68000_mcu_device::eor_w_dd_aips_ifm, + &m68000_mcu_device::eor_w_dd_pais_ifm, + &m68000_mcu_device::eor_w_dd_das_ifm, + &m68000_mcu_device::eor_w_dd_dais_ifm, + &m68000_mcu_device::eor_w_dd_adr16_ifm, + &m68000_mcu_device::eor_w_dd_adr32_ifm, + &m68000_mcu_device::eor_l_dd_ds_ifm, + &m68000_mcu_device::cmpm_l_aips_aipd_ifm, + &m68000_mcu_device::eor_l_dd_ais_ifm, + &m68000_mcu_device::eor_l_dd_aips_ifm, + &m68000_mcu_device::eor_l_dd_pais_ifm, + &m68000_mcu_device::eor_l_dd_das_ifm, + &m68000_mcu_device::eor_l_dd_dais_ifm, + &m68000_mcu_device::eor_l_dd_adr16_ifm, + &m68000_mcu_device::eor_l_dd_adr32_ifm, + &m68000_mcu_device::cmpa_l_ds_ad_ifm, + &m68000_mcu_device::cmpa_l_as_ad_ifm, + &m68000_mcu_device::cmpa_l_ais_ad_ifm, + &m68000_mcu_device::cmpa_l_aips_ad_ifm, + &m68000_mcu_device::cmpa_l_pais_ad_ifm, + &m68000_mcu_device::cmpa_l_das_ad_ifm, + &m68000_mcu_device::cmpa_l_dais_ad_ifm, + &m68000_mcu_device::cmpa_l_adr16_ad_ifm, + &m68000_mcu_device::cmpa_l_adr32_ad_ifm, + &m68000_mcu_device::cmpa_l_dpc_ad_ifm, + &m68000_mcu_device::cmpa_l_dpci_ad_ifm, + &m68000_mcu_device::cmpa_l_imm32_ad_ifm, + &m68000_mcu_device::and_b_ds_dd_ifm, + &m68000_mcu_device::and_b_ais_dd_ifm, + &m68000_mcu_device::and_b_aips_dd_ifm, + &m68000_mcu_device::and_b_pais_dd_ifm, + &m68000_mcu_device::and_b_das_dd_ifm, + &m68000_mcu_device::and_b_dais_dd_ifm, + &m68000_mcu_device::and_b_adr16_dd_ifm, + &m68000_mcu_device::and_b_adr32_dd_ifm, + &m68000_mcu_device::and_b_dpc_dd_ifm, + &m68000_mcu_device::and_b_dpci_dd_ifm, + &m68000_mcu_device::and_b_imm8_dd_ifm, + &m68000_mcu_device::and_w_ds_dd_ifm, + &m68000_mcu_device::and_w_ais_dd_ifm, + &m68000_mcu_device::and_w_aips_dd_ifm, + &m68000_mcu_device::and_w_pais_dd_ifm, + &m68000_mcu_device::and_w_das_dd_ifm, + &m68000_mcu_device::and_w_dais_dd_ifm, + &m68000_mcu_device::and_w_adr16_dd_ifm, + &m68000_mcu_device::and_w_adr32_dd_ifm, + &m68000_mcu_device::and_w_dpc_dd_ifm, + &m68000_mcu_device::and_w_dpci_dd_ifm, + &m68000_mcu_device::and_w_imm16_dd_ifm, + &m68000_mcu_device::and_l_ds_dd_ifm, + &m68000_mcu_device::and_l_ais_dd_ifm, + &m68000_mcu_device::and_l_aips_dd_ifm, + &m68000_mcu_device::and_l_pais_dd_ifm, + &m68000_mcu_device::and_l_das_dd_ifm, + &m68000_mcu_device::and_l_dais_dd_ifm, + &m68000_mcu_device::and_l_adr16_dd_ifm, + &m68000_mcu_device::and_l_adr32_dd_ifm, + &m68000_mcu_device::and_l_dpc_dd_ifm, + &m68000_mcu_device::and_l_dpci_dd_ifm, + &m68000_mcu_device::and_l_imm32_dd_ifm, + &m68000_mcu_device::mulu_w_ds_dd_ifm, + &m68000_mcu_device::mulu_w_ais_dd_ifm, + &m68000_mcu_device::mulu_w_aips_dd_ifm, + &m68000_mcu_device::mulu_w_pais_dd_ifm, + &m68000_mcu_device::mulu_w_das_dd_ifm, + &m68000_mcu_device::mulu_w_dais_dd_ifm, + &m68000_mcu_device::mulu_w_adr16_dd_ifm, + &m68000_mcu_device::mulu_w_adr32_dd_ifm, + &m68000_mcu_device::mulu_w_dpc_dd_ifm, + &m68000_mcu_device::mulu_w_dpci_dd_ifm, + &m68000_mcu_device::mulu_w_imm16_dd_ifm, + &m68000_mcu_device::abcd_ds_dd_ifm, + &m68000_mcu_device::abcd_pais_paid_ifm, + &m68000_mcu_device::and_b_dd_ais_ifm, + &m68000_mcu_device::and_b_dd_aips_ifm, + &m68000_mcu_device::and_b_dd_pais_ifm, + &m68000_mcu_device::and_b_dd_das_ifm, + &m68000_mcu_device::and_b_dd_dais_ifm, + &m68000_mcu_device::and_b_dd_adr16_ifm, + &m68000_mcu_device::and_b_dd_adr32_ifm, + &m68000_mcu_device::exg_dd_ds_ifm, + &m68000_mcu_device::exg_ad_as_ifm, + &m68000_mcu_device::and_w_dd_ais_ifm, + &m68000_mcu_device::and_w_dd_aips_ifm, + &m68000_mcu_device::and_w_dd_pais_ifm, + &m68000_mcu_device::and_w_dd_das_ifm, + &m68000_mcu_device::and_w_dd_dais_ifm, + &m68000_mcu_device::and_w_dd_adr16_ifm, + &m68000_mcu_device::and_w_dd_adr32_ifm, + &m68000_mcu_device::exg_dd_as_ifm, + &m68000_mcu_device::and_l_dd_ais_ifm, + &m68000_mcu_device::and_l_dd_aips_ifm, + &m68000_mcu_device::and_l_dd_pais_ifm, + &m68000_mcu_device::and_l_dd_das_ifm, + &m68000_mcu_device::and_l_dd_dais_ifm, + &m68000_mcu_device::and_l_dd_adr16_ifm, + &m68000_mcu_device::and_l_dd_adr32_ifm, + &m68000_mcu_device::muls_w_ds_dd_ifm, + &m68000_mcu_device::muls_w_ais_dd_ifm, + &m68000_mcu_device::muls_w_aips_dd_ifm, + &m68000_mcu_device::muls_w_pais_dd_ifm, + &m68000_mcu_device::muls_w_das_dd_ifm, + &m68000_mcu_device::muls_w_dais_dd_ifm, + &m68000_mcu_device::muls_w_adr16_dd_ifm, + &m68000_mcu_device::muls_w_adr32_dd_ifm, + &m68000_mcu_device::muls_w_dpc_dd_ifm, + &m68000_mcu_device::muls_w_dpci_dd_ifm, + &m68000_mcu_device::muls_w_imm16_dd_ifm, + &m68000_mcu_device::add_b_ds_dd_ifm, + &m68000_mcu_device::add_b_ais_dd_ifm, + &m68000_mcu_device::add_b_aips_dd_ifm, + &m68000_mcu_device::add_b_pais_dd_ifm, + &m68000_mcu_device::add_b_das_dd_ifm, + &m68000_mcu_device::add_b_dais_dd_ifm, + &m68000_mcu_device::add_b_adr16_dd_ifm, + &m68000_mcu_device::add_b_adr32_dd_ifm, + &m68000_mcu_device::add_b_dpc_dd_ifm, + &m68000_mcu_device::add_b_dpci_dd_ifm, + &m68000_mcu_device::add_b_imm8_dd_ifm, + &m68000_mcu_device::add_w_ds_dd_ifm, + &m68000_mcu_device::add_w_as_dd_ifm, + &m68000_mcu_device::add_w_ais_dd_ifm, + &m68000_mcu_device::add_w_aips_dd_ifm, + &m68000_mcu_device::add_w_pais_dd_ifm, + &m68000_mcu_device::add_w_das_dd_ifm, + &m68000_mcu_device::add_w_dais_dd_ifm, + &m68000_mcu_device::add_w_adr16_dd_ifm, + &m68000_mcu_device::add_w_adr32_dd_ifm, + &m68000_mcu_device::add_w_dpc_dd_ifm, + &m68000_mcu_device::add_w_dpci_dd_ifm, + &m68000_mcu_device::add_w_imm16_dd_ifm, + &m68000_mcu_device::add_l_ds_dd_ifm, + &m68000_mcu_device::add_l_as_dd_ifm, + &m68000_mcu_device::add_l_ais_dd_ifm, + &m68000_mcu_device::add_l_aips_dd_ifm, + &m68000_mcu_device::add_l_pais_dd_ifm, + &m68000_mcu_device::add_l_das_dd_ifm, + &m68000_mcu_device::add_l_dais_dd_ifm, + &m68000_mcu_device::add_l_adr16_dd_ifm, + &m68000_mcu_device::add_l_adr32_dd_ifm, + &m68000_mcu_device::add_l_dpc_dd_ifm, + &m68000_mcu_device::add_l_dpci_dd_ifm, + &m68000_mcu_device::add_l_imm32_dd_ifm, + &m68000_mcu_device::adda_w_ds_ad_ifm, + &m68000_mcu_device::adda_w_as_ad_ifm, + &m68000_mcu_device::adda_w_ais_ad_ifm, + &m68000_mcu_device::adda_w_aips_ad_ifm, + &m68000_mcu_device::adda_w_pais_ad_ifm, + &m68000_mcu_device::adda_w_das_ad_ifm, + &m68000_mcu_device::adda_w_dais_ad_ifm, + &m68000_mcu_device::adda_w_adr16_ad_ifm, + &m68000_mcu_device::adda_w_adr32_ad_ifm, + &m68000_mcu_device::adda_w_dpc_ad_ifm, + &m68000_mcu_device::adda_w_dpci_ad_ifm, + &m68000_mcu_device::adda_w_imm16_ad_ifm, + &m68000_mcu_device::addx_b_ds_dd_ifm, + &m68000_mcu_device::addx_b_pais_paid_ifm, + &m68000_mcu_device::add_b_dd_ais_ifm, + &m68000_mcu_device::add_b_dd_aips_ifm, + &m68000_mcu_device::add_b_dd_pais_ifm, + &m68000_mcu_device::add_b_dd_das_ifm, + &m68000_mcu_device::add_b_dd_dais_ifm, + &m68000_mcu_device::add_b_dd_adr16_ifm, + &m68000_mcu_device::add_b_dd_adr32_ifm, + &m68000_mcu_device::addx_w_ds_dd_ifm, + &m68000_mcu_device::addx_w_pais_paid_ifm, + &m68000_mcu_device::add_w_dd_ais_ifm, + &m68000_mcu_device::add_w_dd_aips_ifm, + &m68000_mcu_device::add_w_dd_pais_ifm, + &m68000_mcu_device::add_w_dd_das_ifm, + &m68000_mcu_device::add_w_dd_dais_ifm, + &m68000_mcu_device::add_w_dd_adr16_ifm, + &m68000_mcu_device::add_w_dd_adr32_ifm, + &m68000_mcu_device::addx_l_ds_dd_ifm, + &m68000_mcu_device::addx_l_pais_paid_ifm, + &m68000_mcu_device::add_l_dd_ais_ifm, + &m68000_mcu_device::add_l_dd_aips_ifm, + &m68000_mcu_device::add_l_dd_pais_ifm, + &m68000_mcu_device::add_l_dd_das_ifm, + &m68000_mcu_device::add_l_dd_dais_ifm, + &m68000_mcu_device::add_l_dd_adr16_ifm, + &m68000_mcu_device::add_l_dd_adr32_ifm, + &m68000_mcu_device::adda_l_ds_ad_ifm, + &m68000_mcu_device::adda_l_as_ad_ifm, + &m68000_mcu_device::adda_l_ais_ad_ifm, + &m68000_mcu_device::adda_l_aips_ad_ifm, + &m68000_mcu_device::adda_l_pais_ad_ifm, + &m68000_mcu_device::adda_l_das_ad_ifm, + &m68000_mcu_device::adda_l_dais_ad_ifm, + &m68000_mcu_device::adda_l_adr16_ad_ifm, + &m68000_mcu_device::adda_l_adr32_ad_ifm, + &m68000_mcu_device::adda_l_dpc_ad_ifm, + &m68000_mcu_device::adda_l_dpci_ad_ifm, + &m68000_mcu_device::adda_l_imm32_ad_ifm, + &m68000_mcu_device::asr_b_imm3_ds_ifm, + &m68000_mcu_device::lsr_b_imm3_ds_ifm, + &m68000_mcu_device::roxr_b_imm3_ds_ifm, + &m68000_mcu_device::ror_b_imm3_ds_ifm, + &m68000_mcu_device::asr_b_dd_ds_ifm, + &m68000_mcu_device::lsr_b_dd_ds_ifm, + &m68000_mcu_device::roxr_b_dd_ds_ifm, + &m68000_mcu_device::ror_b_dd_ds_ifm, + &m68000_mcu_device::asr_w_imm3_ds_ifm, + &m68000_mcu_device::lsr_w_imm3_ds_ifm, + &m68000_mcu_device::roxr_w_imm3_ds_ifm, + &m68000_mcu_device::ror_w_imm3_ds_ifm, + &m68000_mcu_device::asr_w_dd_ds_ifm, + &m68000_mcu_device::lsr_w_dd_ds_ifm, + &m68000_mcu_device::roxr_w_dd_ds_ifm, + &m68000_mcu_device::ror_w_dd_ds_ifm, + &m68000_mcu_device::asr_l_imm3_ds_ifm, + &m68000_mcu_device::lsr_l_imm3_ds_ifm, + &m68000_mcu_device::roxr_l_imm3_ds_ifm, + &m68000_mcu_device::ror_l_imm3_ds_ifm, + &m68000_mcu_device::asr_l_dd_ds_ifm, + &m68000_mcu_device::lsr_l_dd_ds_ifm, + &m68000_mcu_device::roxr_l_dd_ds_ifm, + &m68000_mcu_device::ror_l_dd_ds_ifm, + &m68000_mcu_device::asr_ais_ifm, + &m68000_mcu_device::asr_aips_ifm, + &m68000_mcu_device::asr_pais_ifm, + &m68000_mcu_device::asr_das_ifm, + &m68000_mcu_device::asr_dais_ifm, + &m68000_mcu_device::asr_adr16_ifm, + &m68000_mcu_device::asr_adr32_ifm, + &m68000_mcu_device::asl_b_imm3_ds_ifm, + &m68000_mcu_device::lsl_b_imm3_ds_ifm, + &m68000_mcu_device::roxl_b_imm3_ds_ifm, + &m68000_mcu_device::rol_b_imm3_ds_ifm, + &m68000_mcu_device::asl_b_dd_ds_ifm, + &m68000_mcu_device::lsl_b_dd_ds_ifm, + &m68000_mcu_device::roxl_b_dd_ds_ifm, + &m68000_mcu_device::rol_b_dd_ds_ifm, + &m68000_mcu_device::asl_w_imm3_ds_ifm, + &m68000_mcu_device::lsl_w_imm3_ds_ifm, + &m68000_mcu_device::roxl_w_imm3_ds_ifm, + &m68000_mcu_device::rol_w_imm3_ds_ifm, + &m68000_mcu_device::asl_w_dd_ds_ifm, + &m68000_mcu_device::lsl_w_dd_ds_ifm, + &m68000_mcu_device::roxl_w_dd_ds_ifm, + &m68000_mcu_device::rol_w_dd_ds_ifm, + &m68000_mcu_device::asl_l_imm3_ds_ifm, + &m68000_mcu_device::lsl_l_imm3_ds_ifm, + &m68000_mcu_device::roxl_l_imm3_ds_ifm, + &m68000_mcu_device::rol_l_imm3_ds_ifm, + &m68000_mcu_device::asl_l_dd_ds_ifm, + &m68000_mcu_device::lsl_l_dd_ds_ifm, + &m68000_mcu_device::roxl_l_dd_ds_ifm, + &m68000_mcu_device::rol_l_dd_ds_ifm, + &m68000_mcu_device::asl_ais_ifm, + &m68000_mcu_device::asl_aips_ifm, + &m68000_mcu_device::asl_pais_ifm, + &m68000_mcu_device::asl_das_ifm, + &m68000_mcu_device::asl_dais_ifm, + &m68000_mcu_device::asl_adr16_ifm, + &m68000_mcu_device::asl_adr32_ifm, + &m68000_mcu_device::lsr_ais_ifm, + &m68000_mcu_device::lsr_aips_ifm, + &m68000_mcu_device::lsr_pais_ifm, + &m68000_mcu_device::lsr_das_ifm, + &m68000_mcu_device::lsr_dais_ifm, + &m68000_mcu_device::lsr_adr16_ifm, + &m68000_mcu_device::lsr_adr32_ifm, + &m68000_mcu_device::lsl_ais_ifm, + &m68000_mcu_device::lsl_aips_ifm, + &m68000_mcu_device::lsl_pais_ifm, + &m68000_mcu_device::lsl_das_ifm, + &m68000_mcu_device::lsl_dais_ifm, + &m68000_mcu_device::lsl_adr16_ifm, + &m68000_mcu_device::lsl_adr32_ifm, + &m68000_mcu_device::roxr_ais_ifm, + &m68000_mcu_device::roxr_aips_ifm, + &m68000_mcu_device::roxr_pais_ifm, + &m68000_mcu_device::roxr_das_ifm, + &m68000_mcu_device::roxr_dais_ifm, + &m68000_mcu_device::roxr_adr16_ifm, + &m68000_mcu_device::roxr_adr32_ifm, + &m68000_mcu_device::roxl_ais_ifm, + &m68000_mcu_device::roxl_aips_ifm, + &m68000_mcu_device::roxl_pais_ifm, + &m68000_mcu_device::roxl_das_ifm, + &m68000_mcu_device::roxl_dais_ifm, + &m68000_mcu_device::roxl_adr16_ifm, + &m68000_mcu_device::roxl_adr32_ifm, + &m68000_mcu_device::ror_ais_ifm, + &m68000_mcu_device::ror_aips_ifm, + &m68000_mcu_device::ror_pais_ifm, + &m68000_mcu_device::ror_das_ifm, + &m68000_mcu_device::ror_dais_ifm, + &m68000_mcu_device::ror_adr16_ifm, + &m68000_mcu_device::ror_adr32_ifm, + &m68000_mcu_device::rol_ais_ifm, + &m68000_mcu_device::rol_aips_ifm, + &m68000_mcu_device::rol_pais_ifm, + &m68000_mcu_device::rol_das_ifm, + &m68000_mcu_device::rol_dais_ifm, + &m68000_mcu_device::rol_adr16_ifm, + &m68000_mcu_device::rol_adr32_ifm, }; diff --git a/src/devices/cpu/m68000/m68000-sipm.cpp b/src/devices/cpu/m68000/m68000mcu-sipm.cpp similarity index 96% rename from src/devices/cpu/m68000/m68000-sipm.cpp rename to src/devices/cpu/m68000/m68000mcu-sipm.cpp index 089b8c5d849..0ff2a221d7c 100644 --- a/src/devices/cpu/m68000/m68000-sipm.cpp +++ b/src/devices/cpu/m68000/m68000mcu-sipm.cpp @@ -1,11 +1,11 @@ // Instruction handlers for the m68000 (indirect, partial, mcu) // -// Generated by m68000gen.py sipm m68000.lst m68000-sipm.cpp +// Generated by m68000gen.py sipm m68000.lst m68000mcu-sipm.cpp #include "emu.h" -#include "m68000.h" +#include "m68000mcu.h" -void m68000_device::state_reset_ipm() +void m68000_mcu_device::state_reset_ipm() { switch(m_inst_substate) { case 0: @@ -194,7 +194,7 @@ void m68000_device::state_reset_ipm() } } -void m68000_device::state_bus_error_ipm() +void m68000_mcu_device::state_bus_error_ipm() { switch(m_inst_substate) { case 0: @@ -510,7 +510,7 @@ void m68000_device::state_bus_error_ipm() } } -void m68000_device::state_address_error_ipm() +void m68000_mcu_device::state_address_error_ipm() { switch(m_inst_substate) { case 0: @@ -826,7 +826,7 @@ void m68000_device::state_address_error_ipm() } } -void m68000_device::state_double_fault_ipm() +void m68000_mcu_device::state_double_fault_ipm() { switch(m_inst_substate) { case 0: @@ -835,7 +835,7 @@ void m68000_device::state_double_fault_ipm() } } -void m68000_device::state_interrupt_ipm() +void m68000_mcu_device::state_interrupt_ipm() { switch(m_inst_substate) { case 0: @@ -1083,7 +1083,7 @@ void m68000_device::state_interrupt_ipm() } } -void m68000_device::state_trace_ipm() +void m68000_mcu_device::state_trace_ipm() { switch(m_inst_substate) { case 0: @@ -1292,7 +1292,7 @@ void m68000_device::state_trace_ipm() } } -void m68000_device::state_illegal_ipm() +void m68000_mcu_device::state_illegal_ipm() { switch(m_inst_substate) { case 0: @@ -1501,7 +1501,7 @@ void m68000_device::state_illegal_ipm() } } -void m68000_device::state_priviledge_ipm() +void m68000_mcu_device::state_priviledge_ipm() { switch(m_inst_substate) { case 0: @@ -1710,7 +1710,7 @@ void m68000_device::state_priviledge_ipm() } } -void m68000_device::state_linea_ipm() +void m68000_mcu_device::state_linea_ipm() { switch(m_inst_substate) { case 0: @@ -1919,7 +1919,7 @@ void m68000_device::state_linea_ipm() } } -void m68000_device::state_linef_ipm() +void m68000_mcu_device::state_linef_ipm() { switch(m_inst_substate) { case 0: @@ -2128,7 +2128,7 @@ void m68000_device::state_linef_ipm() } } -void m68000_device::ori_b_imm8_ds_ipm() // 0000 fff8 +void m68000_mcu_device::ori_b_imm8_ds_ipm() // 0000 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -2203,7 +2203,7 @@ void m68000_device::ori_b_imm8_ds_ipm() // 0000 fff8 } } -void m68000_device::ori_b_imm8_ais_ipm() // 0010 fff8 +void m68000_mcu_device::ori_b_imm8_ais_ipm() // 0010 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -2317,7 +2317,7 @@ void m68000_device::ori_b_imm8_ais_ipm() // 0010 fff8 } } -void m68000_device::ori_b_imm8_aips_ipm() // 0018 fff8 +void m68000_mcu_device::ori_b_imm8_aips_ipm() // 0018 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -2436,7 +2436,7 @@ void m68000_device::ori_b_imm8_aips_ipm() // 0018 fff8 } } -void m68000_device::ori_b_imm8_pais_ipm() // 0020 fff8 +void m68000_mcu_device::ori_b_imm8_pais_ipm() // 0020 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -2557,7 +2557,7 @@ void m68000_device::ori_b_imm8_pais_ipm() // 0020 fff8 } } -void m68000_device::ori_b_imm8_das_ipm() // 0028 fff8 +void m68000_mcu_device::ori_b_imm8_das_ipm() // 0028 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -2697,7 +2697,7 @@ void m68000_device::ori_b_imm8_das_ipm() // 0028 fff8 } } -void m68000_device::ori_b_imm8_dais_ipm() // 0030 fff8 +void m68000_mcu_device::ori_b_imm8_dais_ipm() // 0030 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -2880,7 +2880,7 @@ adsw2: } } -void m68000_device::ori_b_imm8_adr16_ipm() // 0038 ffff +void m68000_mcu_device::ori_b_imm8_adr16_ipm() // 0038 ffff { switch(m_inst_substate) { case 0: @@ -3019,7 +3019,7 @@ void m68000_device::ori_b_imm8_adr16_ipm() // 0038 ffff } } -void m68000_device::ori_b_imm8_adr32_ipm() // 0039 ffff +void m68000_mcu_device::ori_b_imm8_adr32_ipm() // 0039 ffff { switch(m_inst_substate) { case 0: @@ -3183,7 +3183,7 @@ void m68000_device::ori_b_imm8_adr32_ipm() // 0039 ffff } } -void m68000_device::ori_imm8_ccr_ipm() // 003c ffff +void m68000_mcu_device::ori_imm8_ccr_ipm() // 003c ffff { switch(m_inst_substate) { case 0: @@ -3301,7 +3301,7 @@ void m68000_device::ori_imm8_ccr_ipm() // 003c ffff } } -void m68000_device::ori_w_imm16_ds_ipm() // 0040 fff8 +void m68000_mcu_device::ori_w_imm16_ds_ipm() // 0040 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -3376,7 +3376,7 @@ void m68000_device::ori_w_imm16_ds_ipm() // 0040 fff8 } } -void m68000_device::ori_w_imm16_ais_ipm() // 0050 fff8 +void m68000_mcu_device::ori_w_imm16_ais_ipm() // 0050 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -3500,7 +3500,7 @@ void m68000_device::ori_w_imm16_ais_ipm() // 0050 fff8 } } -void m68000_device::ori_w_imm16_aips_ipm() // 0058 fff8 +void m68000_mcu_device::ori_w_imm16_aips_ipm() // 0058 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -3629,7 +3629,7 @@ void m68000_device::ori_w_imm16_aips_ipm() // 0058 fff8 } } -void m68000_device::ori_w_imm16_pais_ipm() // 0060 fff8 +void m68000_mcu_device::ori_w_imm16_pais_ipm() // 0060 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -3760,7 +3760,7 @@ void m68000_device::ori_w_imm16_pais_ipm() // 0060 fff8 } } -void m68000_device::ori_w_imm16_das_ipm() // 0068 fff8 +void m68000_mcu_device::ori_w_imm16_das_ipm() // 0068 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -3910,7 +3910,7 @@ void m68000_device::ori_w_imm16_das_ipm() // 0068 fff8 } } -void m68000_device::ori_w_imm16_dais_ipm() // 0070 fff8 +void m68000_mcu_device::ori_w_imm16_dais_ipm() // 0070 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -4103,7 +4103,7 @@ adsw2: } } -void m68000_device::ori_w_imm16_adr16_ipm() // 0078 ffff +void m68000_mcu_device::ori_w_imm16_adr16_ipm() // 0078 ffff { switch(m_inst_substate) { case 0: @@ -4252,7 +4252,7 @@ void m68000_device::ori_w_imm16_adr16_ipm() // 0078 ffff } } -void m68000_device::ori_w_imm16_adr32_ipm() // 0079 ffff +void m68000_mcu_device::ori_w_imm16_adr32_ipm() // 0079 ffff { switch(m_inst_substate) { case 0: @@ -4426,7 +4426,7 @@ void m68000_device::ori_w_imm16_adr32_ipm() // 0079 ffff } } -void m68000_device::ori_i16u_sr_ipm() // 007c ffff +void m68000_mcu_device::ori_i16u_sr_ipm() // 007c ffff { switch(m_inst_substate) { case 0: @@ -4550,7 +4550,7 @@ void m68000_device::ori_i16u_sr_ipm() // 007c ffff } } -void m68000_device::ori_l_imm32_ds_ipm() // 0080 fff8 +void m68000_mcu_device::ori_l_imm32_ds_ipm() // 0080 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -4659,7 +4659,7 @@ void m68000_device::ori_l_imm32_ds_ipm() // 0080 fff8 } } -void m68000_device::ori_l_imm32_ais_ipm() // 0090 fff8 +void m68000_mcu_device::ori_l_imm32_ais_ipm() // 0090 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -4858,7 +4858,7 @@ void m68000_device::ori_l_imm32_ais_ipm() // 0090 fff8 } } -void m68000_device::ori_l_imm32_aips_ipm() // 0098 fff8 +void m68000_mcu_device::ori_l_imm32_aips_ipm() // 0098 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -5061,7 +5061,7 @@ void m68000_device::ori_l_imm32_aips_ipm() // 0098 fff8 } } -void m68000_device::ori_l_imm32_pais_ipm() // 00a0 fff8 +void m68000_mcu_device::ori_l_imm32_pais_ipm() // 00a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -5265,7 +5265,7 @@ void m68000_device::ori_l_imm32_pais_ipm() // 00a0 fff8 } } -void m68000_device::ori_l_imm32_das_ipm() // 00a8 fff8 +void m68000_mcu_device::ori_l_imm32_das_ipm() // 00a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -5489,7 +5489,7 @@ void m68000_device::ori_l_imm32_das_ipm() // 00a8 fff8 } } -void m68000_device::ori_l_imm32_dais_ipm() // 00b0 fff8 +void m68000_mcu_device::ori_l_imm32_dais_ipm() // 00b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -5756,7 +5756,7 @@ adsl2: } } -void m68000_device::ori_l_imm32_adr16_ipm() // 00b8 ffff +void m68000_mcu_device::ori_l_imm32_adr16_ipm() // 00b8 ffff { switch(m_inst_substate) { case 0: @@ -5983,7 +5983,7 @@ void m68000_device::ori_l_imm32_adr16_ipm() // 00b8 ffff } } -void m68000_device::ori_l_imm32_adr32_ipm() // 00b9 ffff +void m68000_mcu_device::ori_l_imm32_adr32_ipm() // 00b9 ffff { switch(m_inst_substate) { case 0: @@ -6235,7 +6235,7 @@ void m68000_device::ori_l_imm32_adr32_ipm() // 00b9 ffff } } -void m68000_device::btst_dd_ds_ipm() // 0100 f1f8 +void m68000_mcu_device::btst_dd_ds_ipm() // 0100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -6313,7 +6313,7 @@ btsr3: } } -void m68000_device::movep_w_das_dd_ipm() // 0108 f1f8 +void m68000_mcu_device::movep_w_das_dd_ipm() // 0108 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6423,7 +6423,7 @@ void m68000_device::movep_w_das_dd_ipm() // 0108 f1f8 } } -void m68000_device::btst_dd_ais_ipm() // 0110 f1f8 +void m68000_mcu_device::btst_dd_ais_ipm() // 0110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6495,7 +6495,7 @@ void m68000_device::btst_dd_ais_ipm() // 0110 f1f8 } } -void m68000_device::btst_dd_aips_ipm() // 0118 f1f8 +void m68000_mcu_device::btst_dd_aips_ipm() // 0118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6572,7 +6572,7 @@ void m68000_device::btst_dd_aips_ipm() // 0118 f1f8 } } -void m68000_device::btst_dd_pais_ipm() // 0120 f1f8 +void m68000_mcu_device::btst_dd_pais_ipm() // 0120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6651,7 +6651,7 @@ void m68000_device::btst_dd_pais_ipm() // 0120 f1f8 } } -void m68000_device::btst_dd_das_ipm() // 0128 f1f8 +void m68000_mcu_device::btst_dd_das_ipm() // 0128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6749,7 +6749,7 @@ void m68000_device::btst_dd_das_ipm() // 0128 f1f8 } } -void m68000_device::btst_dd_dais_ipm() // 0130 f1f8 +void m68000_mcu_device::btst_dd_dais_ipm() // 0130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -6890,7 +6890,7 @@ adsw2: } } -void m68000_device::btst_dd_adr16_ipm() // 0138 f1ff +void m68000_mcu_device::btst_dd_adr16_ipm() // 0138 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -6987,7 +6987,7 @@ void m68000_device::btst_dd_adr16_ipm() // 0138 f1ff } } -void m68000_device::btst_dd_adr32_ipm() // 0139 f1ff +void m68000_mcu_device::btst_dd_adr32_ipm() // 0139 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -7109,7 +7109,7 @@ void m68000_device::btst_dd_adr32_ipm() // 0139 f1ff } } -void m68000_device::btst_dd_dpc_ipm() // 013a f1ff +void m68000_mcu_device::btst_dd_dpc_ipm() // 013a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -7206,7 +7206,7 @@ void m68000_device::btst_dd_dpc_ipm() // 013a f1ff } } -void m68000_device::btst_dd_dpci_ipm() // 013b f1ff +void m68000_mcu_device::btst_dd_dpci_ipm() // 013b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -7346,7 +7346,7 @@ adsw2: } } -void m68000_device::btst_dd_imm_ipm() // 013c f1ff +void m68000_mcu_device::btst_dd_imm_ipm() // 013c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -7449,7 +7449,7 @@ btsr3: } } -void m68000_device::bchg_dd_ds_ipm() // 0140 f1f8 +void m68000_mcu_device::bchg_dd_ds_ipm() // 0140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -7533,7 +7533,7 @@ bcsr3: } } -void m68000_device::movep_l_das_dd_ipm() // 0148 f1f8 +void m68000_mcu_device::movep_l_das_dd_ipm() // 0148 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7684,7 +7684,7 @@ void m68000_device::movep_l_das_dd_ipm() // 0148 f1f8 } } -void m68000_device::bchg_dd_ais_ipm() // 0150 f1f8 +void m68000_mcu_device::bchg_dd_ais_ipm() // 0150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7773,7 +7773,7 @@ void m68000_device::bchg_dd_ais_ipm() // 0150 f1f8 } } -void m68000_device::bchg_dd_aips_ipm() // 0158 f1f8 +void m68000_mcu_device::bchg_dd_aips_ipm() // 0158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7867,7 +7867,7 @@ void m68000_device::bchg_dd_aips_ipm() // 0158 f1f8 } } -void m68000_device::bchg_dd_pais_ipm() // 0160 f1f8 +void m68000_mcu_device::bchg_dd_pais_ipm() // 0160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -7963,7 +7963,7 @@ void m68000_device::bchg_dd_pais_ipm() // 0160 f1f8 } } -void m68000_device::bchg_dd_das_ipm() // 0168 f1f8 +void m68000_mcu_device::bchg_dd_das_ipm() // 0168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8078,7 +8078,7 @@ void m68000_device::bchg_dd_das_ipm() // 0168 f1f8 } } -void m68000_device::bchg_dd_dais_ipm() // 0170 f1f8 +void m68000_mcu_device::bchg_dd_dais_ipm() // 0170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8236,7 +8236,7 @@ adsw2: } } -void m68000_device::bchg_dd_adr16_ipm() // 0178 f1ff +void m68000_mcu_device::bchg_dd_adr16_ipm() // 0178 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -8350,7 +8350,7 @@ void m68000_device::bchg_dd_adr16_ipm() // 0178 f1ff } } -void m68000_device::bchg_dd_adr32_ipm() // 0179 f1ff +void m68000_mcu_device::bchg_dd_adr32_ipm() // 0179 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -8489,7 +8489,7 @@ void m68000_device::bchg_dd_adr32_ipm() // 0179 f1ff } } -void m68000_device::bclr_dd_ds_ipm() // 0180 f1f8 +void m68000_mcu_device::bclr_dd_ds_ipm() // 0180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -8581,7 +8581,7 @@ bclr3: } } -void m68000_device::movep_w_dd_das_ipm() // 0188 f1f8 +void m68000_mcu_device::movep_w_dd_das_ipm() // 0188 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8689,7 +8689,7 @@ void m68000_device::movep_w_dd_das_ipm() // 0188 f1f8 } } -void m68000_device::bclr_dd_ais_ipm() // 0190 f1f8 +void m68000_mcu_device::bclr_dd_ais_ipm() // 0190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8782,7 +8782,7 @@ void m68000_device::bclr_dd_ais_ipm() // 0190 f1f8 } } -void m68000_device::bclr_dd_aips_ipm() // 0198 f1f8 +void m68000_mcu_device::bclr_dd_aips_ipm() // 0198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8880,7 +8880,7 @@ void m68000_device::bclr_dd_aips_ipm() // 0198 f1f8 } } -void m68000_device::bclr_dd_pais_ipm() // 01a0 f1f8 +void m68000_mcu_device::bclr_dd_pais_ipm() // 01a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -8980,7 +8980,7 @@ void m68000_device::bclr_dd_pais_ipm() // 01a0 f1f8 } } -void m68000_device::bclr_dd_das_ipm() // 01a8 f1f8 +void m68000_mcu_device::bclr_dd_das_ipm() // 01a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -9099,7 +9099,7 @@ void m68000_device::bclr_dd_das_ipm() // 01a8 f1f8 } } -void m68000_device::bclr_dd_dais_ipm() // 01b0 f1f8 +void m68000_mcu_device::bclr_dd_dais_ipm() // 01b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -9261,7 +9261,7 @@ adsw2: } } -void m68000_device::bclr_dd_adr16_ipm() // 01b8 f1ff +void m68000_mcu_device::bclr_dd_adr16_ipm() // 01b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -9379,7 +9379,7 @@ void m68000_device::bclr_dd_adr16_ipm() // 01b8 f1ff } } -void m68000_device::bclr_dd_adr32_ipm() // 01b9 f1ff +void m68000_mcu_device::bclr_dd_adr32_ipm() // 01b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -9522,7 +9522,7 @@ void m68000_device::bclr_dd_adr32_ipm() // 01b9 f1ff } } -void m68000_device::bset_dd_ds_ipm() // 01c0 f1f8 +void m68000_mcu_device::bset_dd_ds_ipm() // 01c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -9606,7 +9606,7 @@ bcsr3: } } -void m68000_device::movep_l_dd_das_ipm() // 01c8 f1f8 +void m68000_mcu_device::movep_l_dd_das_ipm() // 01c8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -9750,7 +9750,7 @@ void m68000_device::movep_l_dd_das_ipm() // 01c8 f1f8 } } -void m68000_device::bset_dd_ais_ipm() // 01d0 f1f8 +void m68000_mcu_device::bset_dd_ais_ipm() // 01d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -9839,7 +9839,7 @@ void m68000_device::bset_dd_ais_ipm() // 01d0 f1f8 } } -void m68000_device::bset_dd_aips_ipm() // 01d8 f1f8 +void m68000_mcu_device::bset_dd_aips_ipm() // 01d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -9933,7 +9933,7 @@ void m68000_device::bset_dd_aips_ipm() // 01d8 f1f8 } } -void m68000_device::bset_dd_pais_ipm() // 01e0 f1f8 +void m68000_mcu_device::bset_dd_pais_ipm() // 01e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -10029,7 +10029,7 @@ void m68000_device::bset_dd_pais_ipm() // 01e0 f1f8 } } -void m68000_device::bset_dd_das_ipm() // 01e8 f1f8 +void m68000_mcu_device::bset_dd_das_ipm() // 01e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -10144,7 +10144,7 @@ void m68000_device::bset_dd_das_ipm() // 01e8 f1f8 } } -void m68000_device::bset_dd_dais_ipm() // 01f0 f1f8 +void m68000_mcu_device::bset_dd_dais_ipm() // 01f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -10302,7 +10302,7 @@ adsw2: } } -void m68000_device::bset_dd_adr16_ipm() // 01f8 f1ff +void m68000_mcu_device::bset_dd_adr16_ipm() // 01f8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -10416,7 +10416,7 @@ void m68000_device::bset_dd_adr16_ipm() // 01f8 f1ff } } -void m68000_device::bset_dd_adr32_ipm() // 01f9 f1ff +void m68000_mcu_device::bset_dd_adr32_ipm() // 01f9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -10555,7 +10555,7 @@ void m68000_device::bset_dd_adr32_ipm() // 01f9 f1ff } } -void m68000_device::andi_b_imm8_ds_ipm() // 0200 fff8 +void m68000_mcu_device::andi_b_imm8_ds_ipm() // 0200 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -10630,7 +10630,7 @@ void m68000_device::andi_b_imm8_ds_ipm() // 0200 fff8 } } -void m68000_device::andi_b_imm8_ais_ipm() // 0210 fff8 +void m68000_mcu_device::andi_b_imm8_ais_ipm() // 0210 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -10744,7 +10744,7 @@ void m68000_device::andi_b_imm8_ais_ipm() // 0210 fff8 } } -void m68000_device::andi_b_imm8_aips_ipm() // 0218 fff8 +void m68000_mcu_device::andi_b_imm8_aips_ipm() // 0218 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -10863,7 +10863,7 @@ void m68000_device::andi_b_imm8_aips_ipm() // 0218 fff8 } } -void m68000_device::andi_b_imm8_pais_ipm() // 0220 fff8 +void m68000_mcu_device::andi_b_imm8_pais_ipm() // 0220 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -10984,7 +10984,7 @@ void m68000_device::andi_b_imm8_pais_ipm() // 0220 fff8 } } -void m68000_device::andi_b_imm8_das_ipm() // 0228 fff8 +void m68000_mcu_device::andi_b_imm8_das_ipm() // 0228 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -11124,7 +11124,7 @@ void m68000_device::andi_b_imm8_das_ipm() // 0228 fff8 } } -void m68000_device::andi_b_imm8_dais_ipm() // 0230 fff8 +void m68000_mcu_device::andi_b_imm8_dais_ipm() // 0230 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -11307,7 +11307,7 @@ adsw2: } } -void m68000_device::andi_b_imm8_adr16_ipm() // 0238 ffff +void m68000_mcu_device::andi_b_imm8_adr16_ipm() // 0238 ffff { switch(m_inst_substate) { case 0: @@ -11446,7 +11446,7 @@ void m68000_device::andi_b_imm8_adr16_ipm() // 0238 ffff } } -void m68000_device::andi_b_imm8_adr32_ipm() // 0239 ffff +void m68000_mcu_device::andi_b_imm8_adr32_ipm() // 0239 ffff { switch(m_inst_substate) { case 0: @@ -11610,7 +11610,7 @@ void m68000_device::andi_b_imm8_adr32_ipm() // 0239 ffff } } -void m68000_device::andi_imm8_ccr_ipm() // 023c ffff +void m68000_mcu_device::andi_imm8_ccr_ipm() // 023c ffff { switch(m_inst_substate) { case 0: @@ -11728,7 +11728,7 @@ void m68000_device::andi_imm8_ccr_ipm() // 023c ffff } } -void m68000_device::andi_w_imm16_ds_ipm() // 0240 fff8 +void m68000_mcu_device::andi_w_imm16_ds_ipm() // 0240 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -11803,7 +11803,7 @@ void m68000_device::andi_w_imm16_ds_ipm() // 0240 fff8 } } -void m68000_device::andi_w_imm16_ais_ipm() // 0250 fff8 +void m68000_mcu_device::andi_w_imm16_ais_ipm() // 0250 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -11927,7 +11927,7 @@ void m68000_device::andi_w_imm16_ais_ipm() // 0250 fff8 } } -void m68000_device::andi_w_imm16_aips_ipm() // 0258 fff8 +void m68000_mcu_device::andi_w_imm16_aips_ipm() // 0258 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -12056,7 +12056,7 @@ void m68000_device::andi_w_imm16_aips_ipm() // 0258 fff8 } } -void m68000_device::andi_w_imm16_pais_ipm() // 0260 fff8 +void m68000_mcu_device::andi_w_imm16_pais_ipm() // 0260 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -12187,7 +12187,7 @@ void m68000_device::andi_w_imm16_pais_ipm() // 0260 fff8 } } -void m68000_device::andi_w_imm16_das_ipm() // 0268 fff8 +void m68000_mcu_device::andi_w_imm16_das_ipm() // 0268 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -12337,7 +12337,7 @@ void m68000_device::andi_w_imm16_das_ipm() // 0268 fff8 } } -void m68000_device::andi_w_imm16_dais_ipm() // 0270 fff8 +void m68000_mcu_device::andi_w_imm16_dais_ipm() // 0270 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -12530,7 +12530,7 @@ adsw2: } } -void m68000_device::andi_w_imm16_adr16_ipm() // 0278 ffff +void m68000_mcu_device::andi_w_imm16_adr16_ipm() // 0278 ffff { switch(m_inst_substate) { case 0: @@ -12679,7 +12679,7 @@ void m68000_device::andi_w_imm16_adr16_ipm() // 0278 ffff } } -void m68000_device::andi_w_imm16_adr32_ipm() // 0279 ffff +void m68000_mcu_device::andi_w_imm16_adr32_ipm() // 0279 ffff { switch(m_inst_substate) { case 0: @@ -12853,7 +12853,7 @@ void m68000_device::andi_w_imm16_adr32_ipm() // 0279 ffff } } -void m68000_device::andi_i16u_sr_ipm() // 027c ffff +void m68000_mcu_device::andi_i16u_sr_ipm() // 027c ffff { switch(m_inst_substate) { case 0: @@ -12977,7 +12977,7 @@ void m68000_device::andi_i16u_sr_ipm() // 027c ffff } } -void m68000_device::andi_l_imm32_ds_ipm() // 0280 fff8 +void m68000_mcu_device::andi_l_imm32_ds_ipm() // 0280 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -13086,7 +13086,7 @@ void m68000_device::andi_l_imm32_ds_ipm() // 0280 fff8 } } -void m68000_device::andi_l_imm32_ais_ipm() // 0290 fff8 +void m68000_mcu_device::andi_l_imm32_ais_ipm() // 0290 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -13285,7 +13285,7 @@ void m68000_device::andi_l_imm32_ais_ipm() // 0290 fff8 } } -void m68000_device::andi_l_imm32_aips_ipm() // 0298 fff8 +void m68000_mcu_device::andi_l_imm32_aips_ipm() // 0298 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -13488,7 +13488,7 @@ void m68000_device::andi_l_imm32_aips_ipm() // 0298 fff8 } } -void m68000_device::andi_l_imm32_pais_ipm() // 02a0 fff8 +void m68000_mcu_device::andi_l_imm32_pais_ipm() // 02a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -13692,7 +13692,7 @@ void m68000_device::andi_l_imm32_pais_ipm() // 02a0 fff8 } } -void m68000_device::andi_l_imm32_das_ipm() // 02a8 fff8 +void m68000_mcu_device::andi_l_imm32_das_ipm() // 02a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -13916,7 +13916,7 @@ void m68000_device::andi_l_imm32_das_ipm() // 02a8 fff8 } } -void m68000_device::andi_l_imm32_dais_ipm() // 02b0 fff8 +void m68000_mcu_device::andi_l_imm32_dais_ipm() // 02b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -14183,7 +14183,7 @@ adsl2: } } -void m68000_device::andi_l_imm32_adr16_ipm() // 02b8 ffff +void m68000_mcu_device::andi_l_imm32_adr16_ipm() // 02b8 ffff { switch(m_inst_substate) { case 0: @@ -14410,7 +14410,7 @@ void m68000_device::andi_l_imm32_adr16_ipm() // 02b8 ffff } } -void m68000_device::andi_l_imm32_adr32_ipm() // 02b9 ffff +void m68000_mcu_device::andi_l_imm32_adr32_ipm() // 02b9 ffff { switch(m_inst_substate) { case 0: @@ -14662,7 +14662,7 @@ void m68000_device::andi_l_imm32_adr32_ipm() // 02b9 ffff } } -void m68000_device::subi_b_imm8_ds_ipm() // 0400 fff8 +void m68000_mcu_device::subi_b_imm8_ds_ipm() // 0400 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -14735,7 +14735,7 @@ void m68000_device::subi_b_imm8_ds_ipm() // 0400 fff8 } } -void m68000_device::subi_b_imm8_ais_ipm() // 0410 fff8 +void m68000_mcu_device::subi_b_imm8_ais_ipm() // 0410 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -14846,7 +14846,7 @@ void m68000_device::subi_b_imm8_ais_ipm() // 0410 fff8 } } -void m68000_device::subi_b_imm8_aips_ipm() // 0418 fff8 +void m68000_mcu_device::subi_b_imm8_aips_ipm() // 0418 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -14961,7 +14961,7 @@ void m68000_device::subi_b_imm8_aips_ipm() // 0418 fff8 } } -void m68000_device::subi_b_imm8_pais_ipm() // 0420 fff8 +void m68000_mcu_device::subi_b_imm8_pais_ipm() // 0420 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -15078,7 +15078,7 @@ void m68000_device::subi_b_imm8_pais_ipm() // 0420 fff8 } } -void m68000_device::subi_b_imm8_das_ipm() // 0428 fff8 +void m68000_mcu_device::subi_b_imm8_das_ipm() // 0428 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -15214,7 +15214,7 @@ void m68000_device::subi_b_imm8_das_ipm() // 0428 fff8 } } -void m68000_device::subi_b_imm8_dais_ipm() // 0430 fff8 +void m68000_mcu_device::subi_b_imm8_dais_ipm() // 0430 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -15391,7 +15391,7 @@ adsw2: } } -void m68000_device::subi_b_imm8_adr16_ipm() // 0438 ffff +void m68000_mcu_device::subi_b_imm8_adr16_ipm() // 0438 ffff { switch(m_inst_substate) { case 0: @@ -15526,7 +15526,7 @@ void m68000_device::subi_b_imm8_adr16_ipm() // 0438 ffff } } -void m68000_device::subi_b_imm8_adr32_ipm() // 0439 ffff +void m68000_mcu_device::subi_b_imm8_adr32_ipm() // 0439 ffff { switch(m_inst_substate) { case 0: @@ -15685,7 +15685,7 @@ void m68000_device::subi_b_imm8_adr32_ipm() // 0439 ffff } } -void m68000_device::subi_w_imm16_ds_ipm() // 0440 fff8 +void m68000_mcu_device::subi_w_imm16_ds_ipm() // 0440 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -15758,7 +15758,7 @@ void m68000_device::subi_w_imm16_ds_ipm() // 0440 fff8 } } -void m68000_device::subi_w_imm16_ais_ipm() // 0450 fff8 +void m68000_mcu_device::subi_w_imm16_ais_ipm() // 0450 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -15879,7 +15879,7 @@ void m68000_device::subi_w_imm16_ais_ipm() // 0450 fff8 } } -void m68000_device::subi_w_imm16_aips_ipm() // 0458 fff8 +void m68000_mcu_device::subi_w_imm16_aips_ipm() // 0458 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -16004,7 +16004,7 @@ void m68000_device::subi_w_imm16_aips_ipm() // 0458 fff8 } } -void m68000_device::subi_w_imm16_pais_ipm() // 0460 fff8 +void m68000_mcu_device::subi_w_imm16_pais_ipm() // 0460 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -16131,7 +16131,7 @@ void m68000_device::subi_w_imm16_pais_ipm() // 0460 fff8 } } -void m68000_device::subi_w_imm16_das_ipm() // 0468 fff8 +void m68000_mcu_device::subi_w_imm16_das_ipm() // 0468 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -16277,7 +16277,7 @@ void m68000_device::subi_w_imm16_das_ipm() // 0468 fff8 } } -void m68000_device::subi_w_imm16_dais_ipm() // 0470 fff8 +void m68000_mcu_device::subi_w_imm16_dais_ipm() // 0470 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -16464,7 +16464,7 @@ adsw2: } } -void m68000_device::subi_w_imm16_adr16_ipm() // 0478 ffff +void m68000_mcu_device::subi_w_imm16_adr16_ipm() // 0478 ffff { switch(m_inst_substate) { case 0: @@ -16609,7 +16609,7 @@ void m68000_device::subi_w_imm16_adr16_ipm() // 0478 ffff } } -void m68000_device::subi_w_imm16_adr32_ipm() // 0479 ffff +void m68000_mcu_device::subi_w_imm16_adr32_ipm() // 0479 ffff { switch(m_inst_substate) { case 0: @@ -16778,7 +16778,7 @@ void m68000_device::subi_w_imm16_adr32_ipm() // 0479 ffff } } -void m68000_device::subi_l_imm32_ds_ipm() // 0480 fff8 +void m68000_mcu_device::subi_l_imm32_ds_ipm() // 0480 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -16883,7 +16883,7 @@ void m68000_device::subi_l_imm32_ds_ipm() // 0480 fff8 } } -void m68000_device::subi_l_imm32_ais_ipm() // 0490 fff8 +void m68000_mcu_device::subi_l_imm32_ais_ipm() // 0490 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -17078,7 +17078,7 @@ void m68000_device::subi_l_imm32_ais_ipm() // 0490 fff8 } } -void m68000_device::subi_l_imm32_aips_ipm() // 0498 fff8 +void m68000_mcu_device::subi_l_imm32_aips_ipm() // 0498 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -17276,7 +17276,7 @@ void m68000_device::subi_l_imm32_aips_ipm() // 0498 fff8 } } -void m68000_device::subi_l_imm32_pais_ipm() // 04a0 fff8 +void m68000_mcu_device::subi_l_imm32_pais_ipm() // 04a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -17475,7 +17475,7 @@ void m68000_device::subi_l_imm32_pais_ipm() // 04a0 fff8 } } -void m68000_device::subi_l_imm32_das_ipm() // 04a8 fff8 +void m68000_mcu_device::subi_l_imm32_das_ipm() // 04a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -17694,7 +17694,7 @@ void m68000_device::subi_l_imm32_das_ipm() // 04a8 fff8 } } -void m68000_device::subi_l_imm32_dais_ipm() // 04b0 fff8 +void m68000_mcu_device::subi_l_imm32_dais_ipm() // 04b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -17954,7 +17954,7 @@ adsl2: } } -void m68000_device::subi_l_imm32_adr16_ipm() // 04b8 ffff +void m68000_mcu_device::subi_l_imm32_adr16_ipm() // 04b8 ffff { switch(m_inst_substate) { case 0: @@ -18175,7 +18175,7 @@ void m68000_device::subi_l_imm32_adr16_ipm() // 04b8 ffff } } -void m68000_device::subi_l_imm32_adr32_ipm() // 04b9 ffff +void m68000_mcu_device::subi_l_imm32_adr32_ipm() // 04b9 ffff { switch(m_inst_substate) { case 0: @@ -18420,7 +18420,7 @@ void m68000_device::subi_l_imm32_adr32_ipm() // 04b9 ffff } } -void m68000_device::addi_b_imm8_ds_ipm() // 0600 fff8 +void m68000_mcu_device::addi_b_imm8_ds_ipm() // 0600 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -18493,7 +18493,7 @@ void m68000_device::addi_b_imm8_ds_ipm() // 0600 fff8 } } -void m68000_device::addi_b_imm8_ais_ipm() // 0610 fff8 +void m68000_mcu_device::addi_b_imm8_ais_ipm() // 0610 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -18604,7 +18604,7 @@ void m68000_device::addi_b_imm8_ais_ipm() // 0610 fff8 } } -void m68000_device::addi_b_imm8_aips_ipm() // 0618 fff8 +void m68000_mcu_device::addi_b_imm8_aips_ipm() // 0618 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -18719,7 +18719,7 @@ void m68000_device::addi_b_imm8_aips_ipm() // 0618 fff8 } } -void m68000_device::addi_b_imm8_pais_ipm() // 0620 fff8 +void m68000_mcu_device::addi_b_imm8_pais_ipm() // 0620 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -18836,7 +18836,7 @@ void m68000_device::addi_b_imm8_pais_ipm() // 0620 fff8 } } -void m68000_device::addi_b_imm8_das_ipm() // 0628 fff8 +void m68000_mcu_device::addi_b_imm8_das_ipm() // 0628 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -18972,7 +18972,7 @@ void m68000_device::addi_b_imm8_das_ipm() // 0628 fff8 } } -void m68000_device::addi_b_imm8_dais_ipm() // 0630 fff8 +void m68000_mcu_device::addi_b_imm8_dais_ipm() // 0630 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -19149,7 +19149,7 @@ adsw2: } } -void m68000_device::addi_b_imm8_adr16_ipm() // 0638 ffff +void m68000_mcu_device::addi_b_imm8_adr16_ipm() // 0638 ffff { switch(m_inst_substate) { case 0: @@ -19284,7 +19284,7 @@ void m68000_device::addi_b_imm8_adr16_ipm() // 0638 ffff } } -void m68000_device::addi_b_imm8_adr32_ipm() // 0639 ffff +void m68000_mcu_device::addi_b_imm8_adr32_ipm() // 0639 ffff { switch(m_inst_substate) { case 0: @@ -19443,7 +19443,7 @@ void m68000_device::addi_b_imm8_adr32_ipm() // 0639 ffff } } -void m68000_device::addi_w_imm16_ds_ipm() // 0640 fff8 +void m68000_mcu_device::addi_w_imm16_ds_ipm() // 0640 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -19516,7 +19516,7 @@ void m68000_device::addi_w_imm16_ds_ipm() // 0640 fff8 } } -void m68000_device::addi_w_imm16_ais_ipm() // 0650 fff8 +void m68000_mcu_device::addi_w_imm16_ais_ipm() // 0650 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -19637,7 +19637,7 @@ void m68000_device::addi_w_imm16_ais_ipm() // 0650 fff8 } } -void m68000_device::addi_w_imm16_aips_ipm() // 0658 fff8 +void m68000_mcu_device::addi_w_imm16_aips_ipm() // 0658 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -19762,7 +19762,7 @@ void m68000_device::addi_w_imm16_aips_ipm() // 0658 fff8 } } -void m68000_device::addi_w_imm16_pais_ipm() // 0660 fff8 +void m68000_mcu_device::addi_w_imm16_pais_ipm() // 0660 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -19889,7 +19889,7 @@ void m68000_device::addi_w_imm16_pais_ipm() // 0660 fff8 } } -void m68000_device::addi_w_imm16_das_ipm() // 0668 fff8 +void m68000_mcu_device::addi_w_imm16_das_ipm() // 0668 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -20035,7 +20035,7 @@ void m68000_device::addi_w_imm16_das_ipm() // 0668 fff8 } } -void m68000_device::addi_w_imm16_dais_ipm() // 0670 fff8 +void m68000_mcu_device::addi_w_imm16_dais_ipm() // 0670 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -20222,7 +20222,7 @@ adsw2: } } -void m68000_device::addi_w_imm16_adr16_ipm() // 0678 ffff +void m68000_mcu_device::addi_w_imm16_adr16_ipm() // 0678 ffff { switch(m_inst_substate) { case 0: @@ -20367,7 +20367,7 @@ void m68000_device::addi_w_imm16_adr16_ipm() // 0678 ffff } } -void m68000_device::addi_w_imm16_adr32_ipm() // 0679 ffff +void m68000_mcu_device::addi_w_imm16_adr32_ipm() // 0679 ffff { switch(m_inst_substate) { case 0: @@ -20536,7 +20536,7 @@ void m68000_device::addi_w_imm16_adr32_ipm() // 0679 ffff } } -void m68000_device::addi_l_imm32_ds_ipm() // 0680 fff8 +void m68000_mcu_device::addi_l_imm32_ds_ipm() // 0680 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -20641,7 +20641,7 @@ void m68000_device::addi_l_imm32_ds_ipm() // 0680 fff8 } } -void m68000_device::addi_l_imm32_ais_ipm() // 0690 fff8 +void m68000_mcu_device::addi_l_imm32_ais_ipm() // 0690 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -20836,7 +20836,7 @@ void m68000_device::addi_l_imm32_ais_ipm() // 0690 fff8 } } -void m68000_device::addi_l_imm32_aips_ipm() // 0698 fff8 +void m68000_mcu_device::addi_l_imm32_aips_ipm() // 0698 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -21034,7 +21034,7 @@ void m68000_device::addi_l_imm32_aips_ipm() // 0698 fff8 } } -void m68000_device::addi_l_imm32_pais_ipm() // 06a0 fff8 +void m68000_mcu_device::addi_l_imm32_pais_ipm() // 06a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -21233,7 +21233,7 @@ void m68000_device::addi_l_imm32_pais_ipm() // 06a0 fff8 } } -void m68000_device::addi_l_imm32_das_ipm() // 06a8 fff8 +void m68000_mcu_device::addi_l_imm32_das_ipm() // 06a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -21452,7 +21452,7 @@ void m68000_device::addi_l_imm32_das_ipm() // 06a8 fff8 } } -void m68000_device::addi_l_imm32_dais_ipm() // 06b0 fff8 +void m68000_mcu_device::addi_l_imm32_dais_ipm() // 06b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -21712,7 +21712,7 @@ adsl2: } } -void m68000_device::addi_l_imm32_adr16_ipm() // 06b8 ffff +void m68000_mcu_device::addi_l_imm32_adr16_ipm() // 06b8 ffff { switch(m_inst_substate) { case 0: @@ -21933,7 +21933,7 @@ void m68000_device::addi_l_imm32_adr16_ipm() // 06b8 ffff } } -void m68000_device::addi_l_imm32_adr32_ipm() // 06b9 ffff +void m68000_mcu_device::addi_l_imm32_adr32_ipm() // 06b9 ffff { switch(m_inst_substate) { case 0: @@ -22178,7 +22178,7 @@ void m68000_device::addi_l_imm32_adr32_ipm() // 06b9 ffff } } -void m68000_device::btst_imm8_ds_ipm() // 0800 fff8 +void m68000_mcu_device::btst_imm8_ds_ipm() // 0800 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -22282,7 +22282,7 @@ btsr3: } } -void m68000_device::btst_imm8_ais_ipm() // 0810 fff8 +void m68000_mcu_device::btst_imm8_ais_ipm() // 0810 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -22380,7 +22380,7 @@ void m68000_device::btst_imm8_ais_ipm() // 0810 fff8 } } -void m68000_device::btst_imm8_aips_ipm() // 0818 fff8 +void m68000_mcu_device::btst_imm8_aips_ipm() // 0818 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -22483,7 +22483,7 @@ void m68000_device::btst_imm8_aips_ipm() // 0818 fff8 } } -void m68000_device::btst_imm8_pais_ipm() // 0820 fff8 +void m68000_mcu_device::btst_imm8_pais_ipm() // 0820 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -22588,7 +22588,7 @@ void m68000_device::btst_imm8_pais_ipm() // 0820 fff8 } } -void m68000_device::btst_imm8_das_ipm() // 0828 fff8 +void m68000_mcu_device::btst_imm8_das_ipm() // 0828 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -22712,7 +22712,7 @@ void m68000_device::btst_imm8_das_ipm() // 0828 fff8 } } -void m68000_device::btst_imm8_dais_ipm() // 0830 fff8 +void m68000_mcu_device::btst_imm8_dais_ipm() // 0830 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -22879,7 +22879,7 @@ adsw2: } } -void m68000_device::btst_imm8_adr16_ipm() // 0838 ffff +void m68000_mcu_device::btst_imm8_adr16_ipm() // 0838 ffff { switch(m_inst_substate) { case 0: @@ -23002,7 +23002,7 @@ void m68000_device::btst_imm8_adr16_ipm() // 0838 ffff } } -void m68000_device::btst_imm8_adr32_ipm() // 0839 ffff +void m68000_mcu_device::btst_imm8_adr32_ipm() // 0839 ffff { switch(m_inst_substate) { case 0: @@ -23150,7 +23150,7 @@ void m68000_device::btst_imm8_adr32_ipm() // 0839 ffff } } -void m68000_device::btst_imm8_dpc_ipm() // 083a ffff +void m68000_mcu_device::btst_imm8_dpc_ipm() // 083a ffff { switch(m_inst_substate) { case 0: @@ -23273,7 +23273,7 @@ void m68000_device::btst_imm8_dpc_ipm() // 083a ffff } } -void m68000_device::btst_imm8_dpci_ipm() // 083b ffff +void m68000_mcu_device::btst_imm8_dpci_ipm() // 083b ffff { switch(m_inst_substate) { case 0: @@ -23439,7 +23439,7 @@ adsw2: } } -void m68000_device::bchg_imm8_ds_ipm() // 0840 fff8 +void m68000_mcu_device::bchg_imm8_ds_ipm() // 0840 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -23549,7 +23549,7 @@ bcsr3: } } -void m68000_device::bchg_imm8_ais_ipm() // 0850 fff8 +void m68000_mcu_device::bchg_imm8_ais_ipm() // 0850 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -23664,7 +23664,7 @@ void m68000_device::bchg_imm8_ais_ipm() // 0850 fff8 } } -void m68000_device::bchg_imm8_aips_ipm() // 0858 fff8 +void m68000_mcu_device::bchg_imm8_aips_ipm() // 0858 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -23784,7 +23784,7 @@ void m68000_device::bchg_imm8_aips_ipm() // 0858 fff8 } } -void m68000_device::bchg_imm8_pais_ipm() // 0860 fff8 +void m68000_mcu_device::bchg_imm8_pais_ipm() // 0860 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -23906,7 +23906,7 @@ void m68000_device::bchg_imm8_pais_ipm() // 0860 fff8 } } -void m68000_device::bchg_imm8_das_ipm() // 0868 fff8 +void m68000_mcu_device::bchg_imm8_das_ipm() // 0868 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -24047,7 +24047,7 @@ void m68000_device::bchg_imm8_das_ipm() // 0868 fff8 } } -void m68000_device::bchg_imm8_dais_ipm() // 0870 fff8 +void m68000_mcu_device::bchg_imm8_dais_ipm() // 0870 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -24231,7 +24231,7 @@ adsw2: } } -void m68000_device::bchg_imm8_adr16_ipm() // 0878 ffff +void m68000_mcu_device::bchg_imm8_adr16_ipm() // 0878 ffff { switch(m_inst_substate) { case 0: @@ -24371,7 +24371,7 @@ void m68000_device::bchg_imm8_adr16_ipm() // 0878 ffff } } -void m68000_device::bchg_imm8_adr32_ipm() // 0879 ffff +void m68000_mcu_device::bchg_imm8_adr32_ipm() // 0879 ffff { switch(m_inst_substate) { case 0: @@ -24536,7 +24536,7 @@ void m68000_device::bchg_imm8_adr32_ipm() // 0879 ffff } } -void m68000_device::bclr_imm8_ds_ipm() // 0880 fff8 +void m68000_mcu_device::bclr_imm8_ds_ipm() // 0880 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -24654,7 +24654,7 @@ bclr3: } } -void m68000_device::bclr_imm8_ais_ipm() // 0890 fff8 +void m68000_mcu_device::bclr_imm8_ais_ipm() // 0890 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -24773,7 +24773,7 @@ void m68000_device::bclr_imm8_ais_ipm() // 0890 fff8 } } -void m68000_device::bclr_imm8_aips_ipm() // 0898 fff8 +void m68000_mcu_device::bclr_imm8_aips_ipm() // 0898 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -24897,7 +24897,7 @@ void m68000_device::bclr_imm8_aips_ipm() // 0898 fff8 } } -void m68000_device::bclr_imm8_pais_ipm() // 08a0 fff8 +void m68000_mcu_device::bclr_imm8_pais_ipm() // 08a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -25023,7 +25023,7 @@ void m68000_device::bclr_imm8_pais_ipm() // 08a0 fff8 } } -void m68000_device::bclr_imm8_das_ipm() // 08a8 fff8 +void m68000_mcu_device::bclr_imm8_das_ipm() // 08a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -25168,7 +25168,7 @@ void m68000_device::bclr_imm8_das_ipm() // 08a8 fff8 } } -void m68000_device::bclr_imm8_dais_ipm() // 08b0 fff8 +void m68000_mcu_device::bclr_imm8_dais_ipm() // 08b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -25356,7 +25356,7 @@ adsw2: } } -void m68000_device::bclr_imm8_adr16_ipm() // 08b8 ffff +void m68000_mcu_device::bclr_imm8_adr16_ipm() // 08b8 ffff { switch(m_inst_substate) { case 0: @@ -25500,7 +25500,7 @@ void m68000_device::bclr_imm8_adr16_ipm() // 08b8 ffff } } -void m68000_device::bclr_imm8_adr32_ipm() // 08b9 ffff +void m68000_mcu_device::bclr_imm8_adr32_ipm() // 08b9 ffff { switch(m_inst_substate) { case 0: @@ -25669,7 +25669,7 @@ void m68000_device::bclr_imm8_adr32_ipm() // 08b9 ffff } } -void m68000_device::bset_imm8_ds_ipm() // 08c0 fff8 +void m68000_mcu_device::bset_imm8_ds_ipm() // 08c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -25779,7 +25779,7 @@ bcsr3: } } -void m68000_device::bset_imm8_ais_ipm() // 08d0 fff8 +void m68000_mcu_device::bset_imm8_ais_ipm() // 08d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -25894,7 +25894,7 @@ void m68000_device::bset_imm8_ais_ipm() // 08d0 fff8 } } -void m68000_device::bset_imm8_aips_ipm() // 08d8 fff8 +void m68000_mcu_device::bset_imm8_aips_ipm() // 08d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -26014,7 +26014,7 @@ void m68000_device::bset_imm8_aips_ipm() // 08d8 fff8 } } -void m68000_device::bset_imm8_pais_ipm() // 08e0 fff8 +void m68000_mcu_device::bset_imm8_pais_ipm() // 08e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -26136,7 +26136,7 @@ void m68000_device::bset_imm8_pais_ipm() // 08e0 fff8 } } -void m68000_device::bset_imm8_das_ipm() // 08e8 fff8 +void m68000_mcu_device::bset_imm8_das_ipm() // 08e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -26277,7 +26277,7 @@ void m68000_device::bset_imm8_das_ipm() // 08e8 fff8 } } -void m68000_device::bset_imm8_dais_ipm() // 08f0 fff8 +void m68000_mcu_device::bset_imm8_dais_ipm() // 08f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -26461,7 +26461,7 @@ adsw2: } } -void m68000_device::bset_imm8_adr16_ipm() // 08f8 ffff +void m68000_mcu_device::bset_imm8_adr16_ipm() // 08f8 ffff { switch(m_inst_substate) { case 0: @@ -26601,7 +26601,7 @@ void m68000_device::bset_imm8_adr16_ipm() // 08f8 ffff } } -void m68000_device::bset_imm8_adr32_ipm() // 08f9 ffff +void m68000_mcu_device::bset_imm8_adr32_ipm() // 08f9 ffff { switch(m_inst_substate) { case 0: @@ -26766,7 +26766,7 @@ void m68000_device::bset_imm8_adr32_ipm() // 08f9 ffff } } -void m68000_device::eori_b_imm8_ds_ipm() // 0a00 fff8 +void m68000_mcu_device::eori_b_imm8_ds_ipm() // 0a00 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -26841,7 +26841,7 @@ void m68000_device::eori_b_imm8_ds_ipm() // 0a00 fff8 } } -void m68000_device::eori_b_imm8_ais_ipm() // 0a10 fff8 +void m68000_mcu_device::eori_b_imm8_ais_ipm() // 0a10 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -26955,7 +26955,7 @@ void m68000_device::eori_b_imm8_ais_ipm() // 0a10 fff8 } } -void m68000_device::eori_b_imm8_aips_ipm() // 0a18 fff8 +void m68000_mcu_device::eori_b_imm8_aips_ipm() // 0a18 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -27074,7 +27074,7 @@ void m68000_device::eori_b_imm8_aips_ipm() // 0a18 fff8 } } -void m68000_device::eori_b_imm8_pais_ipm() // 0a20 fff8 +void m68000_mcu_device::eori_b_imm8_pais_ipm() // 0a20 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -27195,7 +27195,7 @@ void m68000_device::eori_b_imm8_pais_ipm() // 0a20 fff8 } } -void m68000_device::eori_b_imm8_das_ipm() // 0a28 fff8 +void m68000_mcu_device::eori_b_imm8_das_ipm() // 0a28 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -27335,7 +27335,7 @@ void m68000_device::eori_b_imm8_das_ipm() // 0a28 fff8 } } -void m68000_device::eori_b_imm8_dais_ipm() // 0a30 fff8 +void m68000_mcu_device::eori_b_imm8_dais_ipm() // 0a30 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -27518,7 +27518,7 @@ adsw2: } } -void m68000_device::eori_b_imm8_adr16_ipm() // 0a38 ffff +void m68000_mcu_device::eori_b_imm8_adr16_ipm() // 0a38 ffff { switch(m_inst_substate) { case 0: @@ -27657,7 +27657,7 @@ void m68000_device::eori_b_imm8_adr16_ipm() // 0a38 ffff } } -void m68000_device::eori_b_imm8_adr32_ipm() // 0a39 ffff +void m68000_mcu_device::eori_b_imm8_adr32_ipm() // 0a39 ffff { switch(m_inst_substate) { case 0: @@ -27821,7 +27821,7 @@ void m68000_device::eori_b_imm8_adr32_ipm() // 0a39 ffff } } -void m68000_device::eori_imm8_ccr_ipm() // 0a3c ffff +void m68000_mcu_device::eori_imm8_ccr_ipm() // 0a3c ffff { switch(m_inst_substate) { case 0: @@ -27939,7 +27939,7 @@ void m68000_device::eori_imm8_ccr_ipm() // 0a3c ffff } } -void m68000_device::eori_w_imm16_ds_ipm() // 0a40 fff8 +void m68000_mcu_device::eori_w_imm16_ds_ipm() // 0a40 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -28014,7 +28014,7 @@ void m68000_device::eori_w_imm16_ds_ipm() // 0a40 fff8 } } -void m68000_device::eori_w_imm16_ais_ipm() // 0a50 fff8 +void m68000_mcu_device::eori_w_imm16_ais_ipm() // 0a50 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -28138,7 +28138,7 @@ void m68000_device::eori_w_imm16_ais_ipm() // 0a50 fff8 } } -void m68000_device::eori_w_imm16_aips_ipm() // 0a58 fff8 +void m68000_mcu_device::eori_w_imm16_aips_ipm() // 0a58 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -28267,7 +28267,7 @@ void m68000_device::eori_w_imm16_aips_ipm() // 0a58 fff8 } } -void m68000_device::eori_w_imm16_pais_ipm() // 0a60 fff8 +void m68000_mcu_device::eori_w_imm16_pais_ipm() // 0a60 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -28398,7 +28398,7 @@ void m68000_device::eori_w_imm16_pais_ipm() // 0a60 fff8 } } -void m68000_device::eori_w_imm16_das_ipm() // 0a68 fff8 +void m68000_mcu_device::eori_w_imm16_das_ipm() // 0a68 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -28548,7 +28548,7 @@ void m68000_device::eori_w_imm16_das_ipm() // 0a68 fff8 } } -void m68000_device::eori_w_imm16_dais_ipm() // 0a70 fff8 +void m68000_mcu_device::eori_w_imm16_dais_ipm() // 0a70 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -28741,7 +28741,7 @@ adsw2: } } -void m68000_device::eori_w_imm16_adr16_ipm() // 0a78 ffff +void m68000_mcu_device::eori_w_imm16_adr16_ipm() // 0a78 ffff { switch(m_inst_substate) { case 0: @@ -28890,7 +28890,7 @@ void m68000_device::eori_w_imm16_adr16_ipm() // 0a78 ffff } } -void m68000_device::eori_w_imm16_adr32_ipm() // 0a79 ffff +void m68000_mcu_device::eori_w_imm16_adr32_ipm() // 0a79 ffff { switch(m_inst_substate) { case 0: @@ -29064,7 +29064,7 @@ void m68000_device::eori_w_imm16_adr32_ipm() // 0a79 ffff } } -void m68000_device::eori_i16u_sr_ipm() // 0a7c ffff +void m68000_mcu_device::eori_i16u_sr_ipm() // 0a7c ffff { switch(m_inst_substate) { case 0: @@ -29188,7 +29188,7 @@ void m68000_device::eori_i16u_sr_ipm() // 0a7c ffff } } -void m68000_device::eori_l_imm32_ds_ipm() // 0a80 fff8 +void m68000_mcu_device::eori_l_imm32_ds_ipm() // 0a80 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -29297,7 +29297,7 @@ void m68000_device::eori_l_imm32_ds_ipm() // 0a80 fff8 } } -void m68000_device::eori_l_imm32_ais_ipm() // 0a90 fff8 +void m68000_mcu_device::eori_l_imm32_ais_ipm() // 0a90 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -29496,7 +29496,7 @@ void m68000_device::eori_l_imm32_ais_ipm() // 0a90 fff8 } } -void m68000_device::eori_l_imm32_aips_ipm() // 0a98 fff8 +void m68000_mcu_device::eori_l_imm32_aips_ipm() // 0a98 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -29699,7 +29699,7 @@ void m68000_device::eori_l_imm32_aips_ipm() // 0a98 fff8 } } -void m68000_device::eori_l_imm32_pais_ipm() // 0aa0 fff8 +void m68000_mcu_device::eori_l_imm32_pais_ipm() // 0aa0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -29903,7 +29903,7 @@ void m68000_device::eori_l_imm32_pais_ipm() // 0aa0 fff8 } } -void m68000_device::eori_l_imm32_das_ipm() // 0aa8 fff8 +void m68000_mcu_device::eori_l_imm32_das_ipm() // 0aa8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -30127,7 +30127,7 @@ void m68000_device::eori_l_imm32_das_ipm() // 0aa8 fff8 } } -void m68000_device::eori_l_imm32_dais_ipm() // 0ab0 fff8 +void m68000_mcu_device::eori_l_imm32_dais_ipm() // 0ab0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -30394,7 +30394,7 @@ adsl2: } } -void m68000_device::eori_l_imm32_adr16_ipm() // 0ab8 ffff +void m68000_mcu_device::eori_l_imm32_adr16_ipm() // 0ab8 ffff { switch(m_inst_substate) { case 0: @@ -30621,7 +30621,7 @@ void m68000_device::eori_l_imm32_adr16_ipm() // 0ab8 ffff } } -void m68000_device::eori_l_imm32_adr32_ipm() // 0ab9 ffff +void m68000_mcu_device::eori_l_imm32_adr32_ipm() // 0ab9 ffff { switch(m_inst_substate) { case 0: @@ -30873,7 +30873,7 @@ void m68000_device::eori_l_imm32_adr32_ipm() // 0ab9 ffff } } -void m68000_device::cmpi_b_imm8_ds_ipm() // 0c00 fff8 +void m68000_mcu_device::cmpi_b_imm8_ds_ipm() // 0c00 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -30945,7 +30945,7 @@ void m68000_device::cmpi_b_imm8_ds_ipm() // 0c00 fff8 } } -void m68000_device::cmpi_b_imm8_ais_ipm() // 0c10 fff8 +void m68000_mcu_device::cmpi_b_imm8_ais_ipm() // 0c10 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -31040,7 +31040,7 @@ void m68000_device::cmpi_b_imm8_ais_ipm() // 0c10 fff8 } } -void m68000_device::cmpi_b_imm8_aips_ipm() // 0c18 fff8 +void m68000_mcu_device::cmpi_b_imm8_aips_ipm() // 0c18 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -31139,7 +31139,7 @@ void m68000_device::cmpi_b_imm8_aips_ipm() // 0c18 fff8 } } -void m68000_device::cmpi_b_imm8_pais_ipm() // 0c20 fff8 +void m68000_mcu_device::cmpi_b_imm8_pais_ipm() // 0c20 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -31240,7 +31240,7 @@ void m68000_device::cmpi_b_imm8_pais_ipm() // 0c20 fff8 } } -void m68000_device::cmpi_b_imm8_das_ipm() // 0c28 fff8 +void m68000_mcu_device::cmpi_b_imm8_das_ipm() // 0c28 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -31360,7 +31360,7 @@ void m68000_device::cmpi_b_imm8_das_ipm() // 0c28 fff8 } } -void m68000_device::cmpi_b_imm8_dais_ipm() // 0c30 fff8 +void m68000_mcu_device::cmpi_b_imm8_dais_ipm() // 0c30 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -31521,7 +31521,7 @@ adsw2: } } -void m68000_device::cmpi_b_imm8_adr16_ipm() // 0c38 ffff +void m68000_mcu_device::cmpi_b_imm8_adr16_ipm() // 0c38 ffff { switch(m_inst_substate) { case 0: @@ -31640,7 +31640,7 @@ void m68000_device::cmpi_b_imm8_adr16_ipm() // 0c38 ffff } } -void m68000_device::cmpi_b_imm8_adr32_ipm() // 0c39 ffff +void m68000_mcu_device::cmpi_b_imm8_adr32_ipm() // 0c39 ffff { switch(m_inst_substate) { case 0: @@ -31783,7 +31783,7 @@ void m68000_device::cmpi_b_imm8_adr32_ipm() // 0c39 ffff } } -void m68000_device::cmpi_w_imm16_ds_ipm() // 0c40 fff8 +void m68000_mcu_device::cmpi_w_imm16_ds_ipm() // 0c40 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -31855,7 +31855,7 @@ void m68000_device::cmpi_w_imm16_ds_ipm() // 0c40 fff8 } } -void m68000_device::cmpi_w_imm16_ais_ipm() // 0c50 fff8 +void m68000_mcu_device::cmpi_w_imm16_ais_ipm() // 0c50 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -31954,7 +31954,7 @@ void m68000_device::cmpi_w_imm16_ais_ipm() // 0c50 fff8 } } -void m68000_device::cmpi_w_imm16_aips_ipm() // 0c58 fff8 +void m68000_mcu_device::cmpi_w_imm16_aips_ipm() // 0c58 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -32057,7 +32057,7 @@ void m68000_device::cmpi_w_imm16_aips_ipm() // 0c58 fff8 } } -void m68000_device::cmpi_w_imm16_pais_ipm() // 0c60 fff8 +void m68000_mcu_device::cmpi_w_imm16_pais_ipm() // 0c60 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -32162,7 +32162,7 @@ void m68000_device::cmpi_w_imm16_pais_ipm() // 0c60 fff8 } } -void m68000_device::cmpi_w_imm16_das_ipm() // 0c68 fff8 +void m68000_mcu_device::cmpi_w_imm16_das_ipm() // 0c68 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -32286,7 +32286,7 @@ void m68000_device::cmpi_w_imm16_das_ipm() // 0c68 fff8 } } -void m68000_device::cmpi_w_imm16_dais_ipm() // 0c70 fff8 +void m68000_mcu_device::cmpi_w_imm16_dais_ipm() // 0c70 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -32451,7 +32451,7 @@ adsw2: } } -void m68000_device::cmpi_w_imm16_adr16_ipm() // 0c78 ffff +void m68000_mcu_device::cmpi_w_imm16_adr16_ipm() // 0c78 ffff { switch(m_inst_substate) { case 0: @@ -32574,7 +32574,7 @@ void m68000_device::cmpi_w_imm16_adr16_ipm() // 0c78 ffff } } -void m68000_device::cmpi_w_imm16_adr32_ipm() // 0c79 ffff +void m68000_mcu_device::cmpi_w_imm16_adr32_ipm() // 0c79 ffff { switch(m_inst_substate) { case 0: @@ -32721,7 +32721,7 @@ void m68000_device::cmpi_w_imm16_adr32_ipm() // 0c79 ffff } } -void m68000_device::cmpi_l_imm32_ds_ipm() // 0c80 fff8 +void m68000_mcu_device::cmpi_l_imm32_ds_ipm() // 0c80 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -32823,7 +32823,7 @@ void m68000_device::cmpi_l_imm32_ds_ipm() // 0c80 fff8 } } -void m68000_device::cmpi_l_imm32_ais_ipm() // 0c90 fff8 +void m68000_mcu_device::cmpi_l_imm32_ais_ipm() // 0c90 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -32973,7 +32973,7 @@ void m68000_device::cmpi_l_imm32_ais_ipm() // 0c90 fff8 } } -void m68000_device::cmpi_l_imm32_aips_ipm() // 0c98 fff8 +void m68000_mcu_device::cmpi_l_imm32_aips_ipm() // 0c98 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -33126,7 +33126,7 @@ void m68000_device::cmpi_l_imm32_aips_ipm() // 0c98 fff8 } } -void m68000_device::cmpi_l_imm32_pais_ipm() // 0ca0 fff8 +void m68000_mcu_device::cmpi_l_imm32_pais_ipm() // 0ca0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -33280,7 +33280,7 @@ void m68000_device::cmpi_l_imm32_pais_ipm() // 0ca0 fff8 } } -void m68000_device::cmpi_l_imm32_das_ipm() // 0ca8 fff8 +void m68000_mcu_device::cmpi_l_imm32_das_ipm() // 0ca8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -33454,7 +33454,7 @@ void m68000_device::cmpi_l_imm32_das_ipm() // 0ca8 fff8 } } -void m68000_device::cmpi_l_imm32_dais_ipm() // 0cb0 fff8 +void m68000_mcu_device::cmpi_l_imm32_dais_ipm() // 0cb0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -33669,7 +33669,7 @@ adsl2: } } -void m68000_device::cmpi_l_imm32_adr16_ipm() // 0cb8 ffff +void m68000_mcu_device::cmpi_l_imm32_adr16_ipm() // 0cb8 ffff { switch(m_inst_substate) { case 0: @@ -33845,7 +33845,7 @@ void m68000_device::cmpi_l_imm32_adr16_ipm() // 0cb8 ffff } } -void m68000_device::cmpi_l_imm32_adr32_ipm() // 0cb9 ffff +void m68000_mcu_device::cmpi_l_imm32_adr32_ipm() // 0cb9 ffff { switch(m_inst_substate) { case 0: @@ -34045,7 +34045,7 @@ void m68000_device::cmpi_l_imm32_adr32_ipm() // 0cb9 ffff } } -void m68000_device::move_b_ds_dd_ipm() // 1000 f1f8 +void m68000_mcu_device::move_b_ds_dd_ipm() // 1000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -34095,7 +34095,7 @@ void m68000_device::move_b_ds_dd_ipm() // 1000 f1f8 } } -void m68000_device::move_b_ais_dd_ipm() // 1010 f1f8 +void m68000_mcu_device::move_b_ais_dd_ipm() // 1010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -34166,7 +34166,7 @@ void m68000_device::move_b_ais_dd_ipm() // 1010 f1f8 } } -void m68000_device::move_b_aips_dd_ipm() // 1018 f1f8 +void m68000_mcu_device::move_b_aips_dd_ipm() // 1018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -34241,7 +34241,7 @@ void m68000_device::move_b_aips_dd_ipm() // 1018 f1f8 } } -void m68000_device::move_b_pais_dd_ipm() // 1020 f1f8 +void m68000_mcu_device::move_b_pais_dd_ipm() // 1020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -34318,7 +34318,7 @@ void m68000_device::move_b_pais_dd_ipm() // 1020 f1f8 } } -void m68000_device::move_b_das_dd_ipm() // 1028 f1f8 +void m68000_mcu_device::move_b_das_dd_ipm() // 1028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -34414,7 +34414,7 @@ void m68000_device::move_b_das_dd_ipm() // 1028 f1f8 } } -void m68000_device::move_b_dais_dd_ipm() // 1030 f1f8 +void m68000_mcu_device::move_b_dais_dd_ipm() // 1030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -34551,7 +34551,7 @@ adsw2: } } -void m68000_device::move_b_adr16_dd_ipm() // 1038 f1ff +void m68000_mcu_device::move_b_adr16_dd_ipm() // 1038 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -34646,7 +34646,7 @@ void m68000_device::move_b_adr16_dd_ipm() // 1038 f1ff } } -void m68000_device::move_b_adr32_dd_ipm() // 1039 f1ff +void m68000_mcu_device::move_b_adr32_dd_ipm() // 1039 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -34765,7 +34765,7 @@ void m68000_device::move_b_adr32_dd_ipm() // 1039 f1ff } } -void m68000_device::move_b_dpc_dd_ipm() // 103a f1ff +void m68000_mcu_device::move_b_dpc_dd_ipm() // 103a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -34860,7 +34860,7 @@ void m68000_device::move_b_dpc_dd_ipm() // 103a f1ff } } -void m68000_device::move_b_dpci_dd_ipm() // 103b f1ff +void m68000_mcu_device::move_b_dpci_dd_ipm() // 103b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -34996,7 +34996,7 @@ adsw2: } } -void m68000_device::move_b_imm8_dd_ipm() // 103c f1ff +void m68000_mcu_device::move_b_imm8_dd_ipm() // 103c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -35072,7 +35072,7 @@ void m68000_device::move_b_imm8_dd_ipm() // 103c f1ff } } -void m68000_device::move_b_ds_aid_ipm() // 1080 f1f8 +void m68000_mcu_device::move_b_ds_aid_ipm() // 1080 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -35137,7 +35137,7 @@ void m68000_device::move_b_ds_aid_ipm() // 1080 f1f8 } } -void m68000_device::move_b_ais_aid_ipm() // 1090 f1f8 +void m68000_mcu_device::move_b_ais_aid_ipm() // 1090 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -35224,7 +35224,7 @@ void m68000_device::move_b_ais_aid_ipm() // 1090 f1f8 } } -void m68000_device::move_b_aips_aid_ipm() // 1098 f1f8 +void m68000_mcu_device::move_b_aips_aid_ipm() // 1098 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -35315,7 +35315,7 @@ void m68000_device::move_b_aips_aid_ipm() // 1098 f1f8 } } -void m68000_device::move_b_pais_aid_ipm() // 10a0 f1f8 +void m68000_mcu_device::move_b_pais_aid_ipm() // 10a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -35408,7 +35408,7 @@ void m68000_device::move_b_pais_aid_ipm() // 10a0 f1f8 } } -void m68000_device::move_b_das_aid_ipm() // 10a8 f1f8 +void m68000_mcu_device::move_b_das_aid_ipm() // 10a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -35520,7 +35520,7 @@ void m68000_device::move_b_das_aid_ipm() // 10a8 f1f8 } } -void m68000_device::move_b_dais_aid_ipm() // 10b0 f1f8 +void m68000_mcu_device::move_b_dais_aid_ipm() // 10b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -35673,7 +35673,7 @@ adsw2: } } -void m68000_device::move_b_adr16_aid_ipm() // 10b8 f1ff +void m68000_mcu_device::move_b_adr16_aid_ipm() // 10b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -35784,7 +35784,7 @@ void m68000_device::move_b_adr16_aid_ipm() // 10b8 f1ff } } -void m68000_device::move_b_adr32_aid_ipm() // 10b9 f1ff +void m68000_mcu_device::move_b_adr32_aid_ipm() // 10b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -35919,7 +35919,7 @@ void m68000_device::move_b_adr32_aid_ipm() // 10b9 f1ff } } -void m68000_device::move_b_dpc_aid_ipm() // 10ba f1ff +void m68000_mcu_device::move_b_dpc_aid_ipm() // 10ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -36030,7 +36030,7 @@ void m68000_device::move_b_dpc_aid_ipm() // 10ba f1ff } } -void m68000_device::move_b_dpci_aid_ipm() // 10bb f1ff +void m68000_mcu_device::move_b_dpci_aid_ipm() // 10bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -36182,7 +36182,7 @@ adsw2: } } -void m68000_device::move_b_imm8_aid_ipm() // 10bc f1ff +void m68000_mcu_device::move_b_imm8_aid_ipm() // 10bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -36273,7 +36273,7 @@ void m68000_device::move_b_imm8_aid_ipm() // 10bc f1ff } } -void m68000_device::move_b_ds_aipd_ipm() // 10c0 f1f8 +void m68000_mcu_device::move_b_ds_aipd_ipm() // 10c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -36337,7 +36337,7 @@ void m68000_device::move_b_ds_aipd_ipm() // 10c0 f1f8 } } -void m68000_device::move_b_ais_aipd_ipm() // 10d0 f1f8 +void m68000_mcu_device::move_b_ais_aipd_ipm() // 10d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -36424,7 +36424,7 @@ void m68000_device::move_b_ais_aipd_ipm() // 10d0 f1f8 } } -void m68000_device::move_b_aips_aipd_ipm() // 10d8 f1f8 +void m68000_mcu_device::move_b_aips_aipd_ipm() // 10d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -36515,7 +36515,7 @@ void m68000_device::move_b_aips_aipd_ipm() // 10d8 f1f8 } } -void m68000_device::move_b_pais_aipd_ipm() // 10e0 f1f8 +void m68000_mcu_device::move_b_pais_aipd_ipm() // 10e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -36608,7 +36608,7 @@ void m68000_device::move_b_pais_aipd_ipm() // 10e0 f1f8 } } -void m68000_device::move_b_das_aipd_ipm() // 10e8 f1f8 +void m68000_mcu_device::move_b_das_aipd_ipm() // 10e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -36720,7 +36720,7 @@ void m68000_device::move_b_das_aipd_ipm() // 10e8 f1f8 } } -void m68000_device::move_b_dais_aipd_ipm() // 10f0 f1f8 +void m68000_mcu_device::move_b_dais_aipd_ipm() // 10f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -36873,7 +36873,7 @@ adsw2: } } -void m68000_device::move_b_adr16_aipd_ipm() // 10f8 f1ff +void m68000_mcu_device::move_b_adr16_aipd_ipm() // 10f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -36984,7 +36984,7 @@ void m68000_device::move_b_adr16_aipd_ipm() // 10f8 f1ff } } -void m68000_device::move_b_adr32_aipd_ipm() // 10f9 f1ff +void m68000_mcu_device::move_b_adr32_aipd_ipm() // 10f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -37119,7 +37119,7 @@ void m68000_device::move_b_adr32_aipd_ipm() // 10f9 f1ff } } -void m68000_device::move_b_dpc_aipd_ipm() // 10fa f1ff +void m68000_mcu_device::move_b_dpc_aipd_ipm() // 10fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -37230,7 +37230,7 @@ void m68000_device::move_b_dpc_aipd_ipm() // 10fa f1ff } } -void m68000_device::move_b_dpci_aipd_ipm() // 10fb f1ff +void m68000_mcu_device::move_b_dpci_aipd_ipm() // 10fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -37382,7 +37382,7 @@ adsw2: } } -void m68000_device::move_b_imm8_aipd_ipm() // 10fc f1ff +void m68000_mcu_device::move_b_imm8_aipd_ipm() // 10fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -37472,7 +37472,7 @@ void m68000_device::move_b_imm8_aipd_ipm() // 10fc f1ff } } -void m68000_device::move_b_ds_paid_ipm() // 1100 f1f8 +void m68000_mcu_device::move_b_ds_paid_ipm() // 1100 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -37536,7 +37536,7 @@ void m68000_device::move_b_ds_paid_ipm() // 1100 f1f8 } } -void m68000_device::move_b_ais_paid_ipm() // 1110 f1f8 +void m68000_mcu_device::move_b_ais_paid_ipm() // 1110 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -37623,7 +37623,7 @@ void m68000_device::move_b_ais_paid_ipm() // 1110 f1f8 } } -void m68000_device::move_b_aips_paid_ipm() // 1118 f1f8 +void m68000_mcu_device::move_b_aips_paid_ipm() // 1118 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -37714,7 +37714,7 @@ void m68000_device::move_b_aips_paid_ipm() // 1118 f1f8 } } -void m68000_device::move_b_pais_paid_ipm() // 1120 f1f8 +void m68000_mcu_device::move_b_pais_paid_ipm() // 1120 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -37807,7 +37807,7 @@ void m68000_device::move_b_pais_paid_ipm() // 1120 f1f8 } } -void m68000_device::move_b_das_paid_ipm() // 1128 f1f8 +void m68000_mcu_device::move_b_das_paid_ipm() // 1128 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -37919,7 +37919,7 @@ void m68000_device::move_b_das_paid_ipm() // 1128 f1f8 } } -void m68000_device::move_b_dais_paid_ipm() // 1130 f1f8 +void m68000_mcu_device::move_b_dais_paid_ipm() // 1130 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -38072,7 +38072,7 @@ adsw2: } } -void m68000_device::move_b_adr16_paid_ipm() // 1138 f1ff +void m68000_mcu_device::move_b_adr16_paid_ipm() // 1138 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -38183,7 +38183,7 @@ void m68000_device::move_b_adr16_paid_ipm() // 1138 f1ff } } -void m68000_device::move_b_adr32_paid_ipm() // 1139 f1ff +void m68000_mcu_device::move_b_adr32_paid_ipm() // 1139 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -38318,7 +38318,7 @@ void m68000_device::move_b_adr32_paid_ipm() // 1139 f1ff } } -void m68000_device::move_b_dpc_paid_ipm() // 113a f1ff +void m68000_mcu_device::move_b_dpc_paid_ipm() // 113a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -38429,7 +38429,7 @@ void m68000_device::move_b_dpc_paid_ipm() // 113a f1ff } } -void m68000_device::move_b_dpci_paid_ipm() // 113b f1ff +void m68000_mcu_device::move_b_dpci_paid_ipm() // 113b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -38581,7 +38581,7 @@ adsw2: } } -void m68000_device::move_b_imm8_paid_ipm() // 113c f1ff +void m68000_mcu_device::move_b_imm8_paid_ipm() // 113c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -38671,7 +38671,7 @@ void m68000_device::move_b_imm8_paid_ipm() // 113c f1ff } } -void m68000_device::move_b_ds_dad_ipm() // 1140 f1f8 +void m68000_mcu_device::move_b_ds_dad_ipm() // 1140 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -38760,7 +38760,7 @@ void m68000_device::move_b_ds_dad_ipm() // 1140 f1f8 } } -void m68000_device::move_b_ais_dad_ipm() // 1150 f1f8 +void m68000_mcu_device::move_b_ais_dad_ipm() // 1150 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -38876,7 +38876,7 @@ void m68000_device::move_b_ais_dad_ipm() // 1150 f1f8 } } -void m68000_device::move_b_aips_dad_ipm() // 1158 f1f8 +void m68000_mcu_device::move_b_aips_dad_ipm() // 1158 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -38996,7 +38996,7 @@ void m68000_device::move_b_aips_dad_ipm() // 1158 f1f8 } } -void m68000_device::move_b_pais_dad_ipm() // 1160 f1f8 +void m68000_mcu_device::move_b_pais_dad_ipm() // 1160 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -39118,7 +39118,7 @@ void m68000_device::move_b_pais_dad_ipm() // 1160 f1f8 } } -void m68000_device::move_b_das_dad_ipm() // 1168 f1f8 +void m68000_mcu_device::move_b_das_dad_ipm() // 1168 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -39259,7 +39259,7 @@ void m68000_device::move_b_das_dad_ipm() // 1168 f1f8 } } -void m68000_device::move_b_dais_dad_ipm() // 1170 f1f8 +void m68000_mcu_device::move_b_dais_dad_ipm() // 1170 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -39441,7 +39441,7 @@ adsw2: } } -void m68000_device::move_b_adr16_dad_ipm() // 1178 f1ff +void m68000_mcu_device::move_b_adr16_dad_ipm() // 1178 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -39581,7 +39581,7 @@ void m68000_device::move_b_adr16_dad_ipm() // 1178 f1ff } } -void m68000_device::move_b_adr32_dad_ipm() // 1179 f1ff +void m68000_mcu_device::move_b_adr32_dad_ipm() // 1179 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -39745,7 +39745,7 @@ void m68000_device::move_b_adr32_dad_ipm() // 1179 f1ff } } -void m68000_device::move_b_dpc_dad_ipm() // 117a f1ff +void m68000_mcu_device::move_b_dpc_dad_ipm() // 117a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -39885,7 +39885,7 @@ void m68000_device::move_b_dpc_dad_ipm() // 117a f1ff } } -void m68000_device::move_b_dpci_dad_ipm() // 117b f1ff +void m68000_mcu_device::move_b_dpci_dad_ipm() // 117b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -40066,7 +40066,7 @@ adsw2: } } -void m68000_device::move_b_imm8_dad_ipm() // 117c f1ff +void m68000_mcu_device::move_b_imm8_dad_ipm() // 117c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -40181,7 +40181,7 @@ void m68000_device::move_b_imm8_dad_ipm() // 117c f1ff } } -void m68000_device::move_b_ds_daid_ipm() // 1180 f1f8 +void m68000_mcu_device::move_b_ds_daid_ipm() // 1180 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -40312,7 +40312,7 @@ rmdw2: } } -void m68000_device::move_b_ais_daid_ipm() // 1190 f1f8 +void m68000_mcu_device::move_b_ais_daid_ipm() // 1190 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -40469,7 +40469,7 @@ maww2: } } -void m68000_device::move_b_aips_daid_ipm() // 1198 f1f8 +void m68000_mcu_device::move_b_aips_daid_ipm() // 1198 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -40630,7 +40630,7 @@ maww2: } } -void m68000_device::move_b_pais_daid_ipm() // 11a0 f1f8 +void m68000_mcu_device::move_b_pais_daid_ipm() // 11a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -40793,7 +40793,7 @@ maww2: } } -void m68000_device::move_b_das_daid_ipm() // 11a8 f1f8 +void m68000_mcu_device::move_b_das_daid_ipm() // 11a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -40975,7 +40975,7 @@ maww2: } } -void m68000_device::move_b_dais_daid_ipm() // 11b0 f1f8 +void m68000_mcu_device::move_b_dais_daid_ipm() // 11b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -41198,7 +41198,7 @@ maww2: } } -void m68000_device::move_b_adr16_daid_ipm() // 11b8 f1ff +void m68000_mcu_device::move_b_adr16_daid_ipm() // 11b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -41379,7 +41379,7 @@ maww2: } } -void m68000_device::move_b_adr32_daid_ipm() // 11b9 f1ff +void m68000_mcu_device::move_b_adr32_daid_ipm() // 11b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -41584,7 +41584,7 @@ maww2: } } -void m68000_device::move_b_dpc_daid_ipm() // 11ba f1ff +void m68000_mcu_device::move_b_dpc_daid_ipm() // 11ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -41765,7 +41765,7 @@ maww2: } } -void m68000_device::move_b_dpci_daid_ipm() // 11bb f1ff +void m68000_mcu_device::move_b_dpci_daid_ipm() // 11bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -41987,7 +41987,7 @@ maww2: } } -void m68000_device::move_b_imm8_daid_ipm() // 11bc f1ff +void m68000_mcu_device::move_b_imm8_daid_ipm() // 11bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -42144,7 +42144,7 @@ rmdw2: } } -void m68000_device::move_b_ds_adr16_ipm() // 11c0 fff8 +void m68000_mcu_device::move_b_ds_adr16_ipm() // 11c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -42237,7 +42237,7 @@ void m68000_device::move_b_ds_adr16_ipm() // 11c0 fff8 } } -void m68000_device::move_b_ais_adr16_ipm() // 11d0 fff8 +void m68000_mcu_device::move_b_ais_adr16_ipm() // 11d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -42352,7 +42352,7 @@ void m68000_device::move_b_ais_adr16_ipm() // 11d0 fff8 } } -void m68000_device::move_b_aips_adr16_ipm() // 11d8 fff8 +void m68000_mcu_device::move_b_aips_adr16_ipm() // 11d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -42471,7 +42471,7 @@ void m68000_device::move_b_aips_adr16_ipm() // 11d8 fff8 } } -void m68000_device::move_b_pais_adr16_ipm() // 11e0 fff8 +void m68000_mcu_device::move_b_pais_adr16_ipm() // 11e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -42592,7 +42592,7 @@ void m68000_device::move_b_pais_adr16_ipm() // 11e0 fff8 } } -void m68000_device::move_b_das_adr16_ipm() // 11e8 fff8 +void m68000_mcu_device::move_b_das_adr16_ipm() // 11e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -42732,7 +42732,7 @@ void m68000_device::move_b_das_adr16_ipm() // 11e8 fff8 } } -void m68000_device::move_b_dais_adr16_ipm() // 11f0 fff8 +void m68000_mcu_device::move_b_dais_adr16_ipm() // 11f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -42913,7 +42913,7 @@ adsw2: } } -void m68000_device::move_b_adr16_adr16_ipm() // 11f8 ffff +void m68000_mcu_device::move_b_adr16_adr16_ipm() // 11f8 ffff { switch(m_inst_substate) { case 0: @@ -43052,7 +43052,7 @@ void m68000_device::move_b_adr16_adr16_ipm() // 11f8 ffff } } -void m68000_device::move_b_adr32_adr16_ipm() // 11f9 ffff +void m68000_mcu_device::move_b_adr32_adr16_ipm() // 11f9 ffff { switch(m_inst_substate) { case 0: @@ -43215,7 +43215,7 @@ void m68000_device::move_b_adr32_adr16_ipm() // 11f9 ffff } } -void m68000_device::move_b_dpc_adr16_ipm() // 11fa ffff +void m68000_mcu_device::move_b_dpc_adr16_ipm() // 11fa ffff { switch(m_inst_substate) { case 0: @@ -43354,7 +43354,7 @@ void m68000_device::move_b_dpc_adr16_ipm() // 11fa ffff } } -void m68000_device::move_b_dpci_adr16_ipm() // 11fb ffff +void m68000_mcu_device::move_b_dpci_adr16_ipm() // 11fb ffff { switch(m_inst_substate) { case 0: @@ -43534,7 +43534,7 @@ adsw2: } } -void m68000_device::move_b_imm8_adr16_ipm() // 11fc ffff +void m68000_mcu_device::move_b_imm8_adr16_ipm() // 11fc ffff { switch(m_inst_substate) { case 0: @@ -43653,7 +43653,7 @@ void m68000_device::move_b_imm8_adr16_ipm() // 11fc ffff } } -void m68000_device::move_b_ds_adr32_ipm() // 13c0 fff8 +void m68000_mcu_device::move_b_ds_adr32_ipm() // 13c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -43770,7 +43770,7 @@ void m68000_device::move_b_ds_adr32_ipm() // 13c0 fff8 } } -void m68000_device::move_b_ais_adr32_ipm() // 13d0 fff8 +void m68000_mcu_device::move_b_ais_adr32_ipm() // 13d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -43908,7 +43908,7 @@ void m68000_device::move_b_ais_adr32_ipm() // 13d0 fff8 } } -void m68000_device::move_b_aips_adr32_ipm() // 13d8 fff8 +void m68000_mcu_device::move_b_aips_adr32_ipm() // 13d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -44050,7 +44050,7 @@ void m68000_device::move_b_aips_adr32_ipm() // 13d8 fff8 } } -void m68000_device::move_b_pais_adr32_ipm() // 13e0 fff8 +void m68000_mcu_device::move_b_pais_adr32_ipm() // 13e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -44194,7 +44194,7 @@ void m68000_device::move_b_pais_adr32_ipm() // 13e0 fff8 } } -void m68000_device::move_b_das_adr32_ipm() // 13e8 fff8 +void m68000_mcu_device::move_b_das_adr32_ipm() // 13e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -44357,7 +44357,7 @@ void m68000_device::move_b_das_adr32_ipm() // 13e8 fff8 } } -void m68000_device::move_b_dais_adr32_ipm() // 13f0 fff8 +void m68000_mcu_device::move_b_dais_adr32_ipm() // 13f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -44561,7 +44561,7 @@ adsw2: } } -void m68000_device::move_b_adr16_adr32_ipm() // 13f8 ffff +void m68000_mcu_device::move_b_adr16_adr32_ipm() // 13f8 ffff { switch(m_inst_substate) { case 0: @@ -44723,7 +44723,7 @@ void m68000_device::move_b_adr16_adr32_ipm() // 13f8 ffff } } -void m68000_device::move_b_adr32_adr32_ipm() // 13f9 ffff +void m68000_mcu_device::move_b_adr32_adr32_ipm() // 13f9 ffff { switch(m_inst_substate) { case 0: @@ -44909,7 +44909,7 @@ void m68000_device::move_b_adr32_adr32_ipm() // 13f9 ffff } } -void m68000_device::move_b_dpc_adr32_ipm() // 13fa ffff +void m68000_mcu_device::move_b_dpc_adr32_ipm() // 13fa ffff { switch(m_inst_substate) { case 0: @@ -45071,7 +45071,7 @@ void m68000_device::move_b_dpc_adr32_ipm() // 13fa ffff } } -void m68000_device::move_b_dpci_adr32_ipm() // 13fb ffff +void m68000_mcu_device::move_b_dpci_adr32_ipm() // 13fb ffff { switch(m_inst_substate) { case 0: @@ -45274,7 +45274,7 @@ adsw2: } } -void m68000_device::move_b_imm8_adr32_ipm() // 13fc ffff +void m68000_mcu_device::move_b_imm8_adr32_ipm() // 13fc ffff { switch(m_inst_substate) { case 0: @@ -45417,7 +45417,7 @@ void m68000_device::move_b_imm8_adr32_ipm() // 13fc ffff } } -void m68000_device::move_l_ds_dd_ipm() // 2000 f1f8 +void m68000_mcu_device::move_l_ds_dd_ipm() // 2000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -45469,7 +45469,7 @@ void m68000_device::move_l_ds_dd_ipm() // 2000 f1f8 } } -void m68000_device::move_l_as_dd_ipm() // 2008 f1f8 +void m68000_mcu_device::move_l_as_dd_ipm() // 2008 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -45521,7 +45521,7 @@ void m68000_device::move_l_as_dd_ipm() // 2008 f1f8 } } -void m68000_device::move_l_ais_dd_ipm() // 2010 f1f8 +void m68000_mcu_device::move_l_ais_dd_ipm() // 2010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -45624,7 +45624,7 @@ void m68000_device::move_l_ais_dd_ipm() // 2010 f1f8 } } -void m68000_device::move_l_aips_dd_ipm() // 2018 f1f8 +void m68000_mcu_device::move_l_aips_dd_ipm() // 2018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -45730,7 +45730,7 @@ void m68000_device::move_l_aips_dd_ipm() // 2018 f1f8 } } -void m68000_device::move_l_pais_dd_ipm() // 2020 f1f8 +void m68000_mcu_device::move_l_pais_dd_ipm() // 2020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -45837,7 +45837,7 @@ void m68000_device::move_l_pais_dd_ipm() // 2020 f1f8 } } -void m68000_device::move_l_das_dd_ipm() // 2028 f1f8 +void m68000_mcu_device::move_l_das_dd_ipm() // 2028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -45964,7 +45964,7 @@ void m68000_device::move_l_das_dd_ipm() // 2028 f1f8 } } -void m68000_device::move_l_dais_dd_ipm() // 2030 f1f8 +void m68000_mcu_device::move_l_dais_dd_ipm() // 2030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -46132,7 +46132,7 @@ adsl2: } } -void m68000_device::move_l_adr16_dd_ipm() // 2038 f1ff +void m68000_mcu_device::move_l_adr16_dd_ipm() // 2038 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -46261,7 +46261,7 @@ void m68000_device::move_l_adr16_dd_ipm() // 2038 f1ff } } -void m68000_device::move_l_adr32_dd_ipm() // 2039 f1ff +void m68000_mcu_device::move_l_adr32_dd_ipm() // 2039 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -46414,7 +46414,7 @@ void m68000_device::move_l_adr32_dd_ipm() // 2039 f1ff } } -void m68000_device::move_l_dpc_dd_ipm() // 203a f1ff +void m68000_mcu_device::move_l_dpc_dd_ipm() // 203a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -46540,7 +46540,7 @@ void m68000_device::move_l_dpc_dd_ipm() // 203a f1ff } } -void m68000_device::move_l_dpci_dd_ipm() // 203b f1ff +void m68000_mcu_device::move_l_dpci_dd_ipm() // 203b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -46707,7 +46707,7 @@ adsl2: } } -void m68000_device::move_l_imm32_dd_ipm() // 203c f1ff +void m68000_mcu_device::move_l_imm32_dd_ipm() // 203c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -46809,7 +46809,7 @@ void m68000_device::move_l_imm32_dd_ipm() // 203c f1ff } } -void m68000_device::movea_l_ds_ad_ipm() // 2040 f1f8 +void m68000_mcu_device::movea_l_ds_ad_ipm() // 2040 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -46859,7 +46859,7 @@ void m68000_device::movea_l_ds_ad_ipm() // 2040 f1f8 } } -void m68000_device::movea_l_as_ad_ipm() // 2048 f1f8 +void m68000_mcu_device::movea_l_as_ad_ipm() // 2048 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -46909,7 +46909,7 @@ void m68000_device::movea_l_as_ad_ipm() // 2048 f1f8 } } -void m68000_device::movea_l_ais_ad_ipm() // 2050 f1f8 +void m68000_mcu_device::movea_l_ais_ad_ipm() // 2050 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -47010,7 +47010,7 @@ void m68000_device::movea_l_ais_ad_ipm() // 2050 f1f8 } } -void m68000_device::movea_l_aips_ad_ipm() // 2058 f1f8 +void m68000_mcu_device::movea_l_aips_ad_ipm() // 2058 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -47114,7 +47114,7 @@ void m68000_device::movea_l_aips_ad_ipm() // 2058 f1f8 } } -void m68000_device::movea_l_pais_ad_ipm() // 2060 f1f8 +void m68000_mcu_device::movea_l_pais_ad_ipm() // 2060 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -47219,7 +47219,7 @@ void m68000_device::movea_l_pais_ad_ipm() // 2060 f1f8 } } -void m68000_device::movea_l_das_ad_ipm() // 2068 f1f8 +void m68000_mcu_device::movea_l_das_ad_ipm() // 2068 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -47344,7 +47344,7 @@ void m68000_device::movea_l_das_ad_ipm() // 2068 f1f8 } } -void m68000_device::movea_l_dais_ad_ipm() // 2070 f1f8 +void m68000_mcu_device::movea_l_dais_ad_ipm() // 2070 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -47510,7 +47510,7 @@ adsl2: } } -void m68000_device::movea_l_adr16_ad_ipm() // 2078 f1ff +void m68000_mcu_device::movea_l_adr16_ad_ipm() // 2078 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -47637,7 +47637,7 @@ void m68000_device::movea_l_adr16_ad_ipm() // 2078 f1ff } } -void m68000_device::movea_l_adr32_ad_ipm() // 2079 f1ff +void m68000_mcu_device::movea_l_adr32_ad_ipm() // 2079 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -47788,7 +47788,7 @@ void m68000_device::movea_l_adr32_ad_ipm() // 2079 f1ff } } -void m68000_device::movea_l_dpc_ad_ipm() // 207a f1ff +void m68000_mcu_device::movea_l_dpc_ad_ipm() // 207a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -47912,7 +47912,7 @@ void m68000_device::movea_l_dpc_ad_ipm() // 207a f1ff } } -void m68000_device::movea_l_dpci_ad_ipm() // 207b f1ff +void m68000_mcu_device::movea_l_dpci_ad_ipm() // 207b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -48077,7 +48077,7 @@ adsl2: } } -void m68000_device::movea_l_imm32_ad_ipm() // 207c f1ff +void m68000_mcu_device::movea_l_imm32_ad_ipm() // 207c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -48177,7 +48177,7 @@ void m68000_device::movea_l_imm32_ad_ipm() // 207c f1ff } } -void m68000_device::move_l_ds_aid_ipm() // 2080 f1f8 +void m68000_mcu_device::move_l_ds_aid_ipm() // 2080 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -48274,7 +48274,7 @@ void m68000_device::move_l_ds_aid_ipm() // 2080 f1f8 } } -void m68000_device::move_l_as_aid_ipm() // 2088 f1f8 +void m68000_mcu_device::move_l_as_aid_ipm() // 2088 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -48371,7 +48371,7 @@ void m68000_device::move_l_as_aid_ipm() // 2088 f1f8 } } -void m68000_device::move_l_ais_aid_ipm() // 2090 f1f8 +void m68000_mcu_device::move_l_ais_aid_ipm() // 2090 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -48519,7 +48519,7 @@ void m68000_device::move_l_ais_aid_ipm() // 2090 f1f8 } } -void m68000_device::move_l_aips_aid_ipm() // 2098 f1f8 +void m68000_mcu_device::move_l_aips_aid_ipm() // 2098 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -48670,7 +48670,7 @@ void m68000_device::move_l_aips_aid_ipm() // 2098 f1f8 } } -void m68000_device::move_l_pais_aid_ipm() // 20a0 f1f8 +void m68000_mcu_device::move_l_pais_aid_ipm() // 20a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -48822,7 +48822,7 @@ void m68000_device::move_l_pais_aid_ipm() // 20a0 f1f8 } } -void m68000_device::move_l_das_aid_ipm() // 20a8 f1f8 +void m68000_mcu_device::move_l_das_aid_ipm() // 20a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -48994,7 +48994,7 @@ void m68000_device::move_l_das_aid_ipm() // 20a8 f1f8 } } -void m68000_device::move_l_dais_aid_ipm() // 20b0 f1f8 +void m68000_mcu_device::move_l_dais_aid_ipm() // 20b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -49207,7 +49207,7 @@ adsl2: } } -void m68000_device::move_l_adr16_aid_ipm() // 20b8 f1ff +void m68000_mcu_device::move_l_adr16_aid_ipm() // 20b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -49381,7 +49381,7 @@ void m68000_device::move_l_adr16_aid_ipm() // 20b8 f1ff } } -void m68000_device::move_l_adr32_aid_ipm() // 20b9 f1ff +void m68000_mcu_device::move_l_adr32_aid_ipm() // 20b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -49579,7 +49579,7 @@ void m68000_device::move_l_adr32_aid_ipm() // 20b9 f1ff } } -void m68000_device::move_l_dpc_aid_ipm() // 20ba f1ff +void m68000_mcu_device::move_l_dpc_aid_ipm() // 20ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -49750,7 +49750,7 @@ void m68000_device::move_l_dpc_aid_ipm() // 20ba f1ff } } -void m68000_device::move_l_dpci_aid_ipm() // 20bb f1ff +void m68000_mcu_device::move_l_dpci_aid_ipm() // 20bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -49962,7 +49962,7 @@ adsl2: } } -void m68000_device::move_l_imm32_aid_ipm() // 20bc f1ff +void m68000_mcu_device::move_l_imm32_aid_ipm() // 20bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -50109,7 +50109,7 @@ void m68000_device::move_l_imm32_aid_ipm() // 20bc f1ff } } -void m68000_device::move_l_ds_aipd_ipm() // 20c0 f1f8 +void m68000_mcu_device::move_l_ds_aipd_ipm() // 20c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -50206,7 +50206,7 @@ void m68000_device::move_l_ds_aipd_ipm() // 20c0 f1f8 } } -void m68000_device::move_l_as_aipd_ipm() // 20c8 f1f8 +void m68000_mcu_device::move_l_as_aipd_ipm() // 20c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50303,7 +50303,7 @@ void m68000_device::move_l_as_aipd_ipm() // 20c8 f1f8 } } -void m68000_device::move_l_ais_aipd_ipm() // 20d0 f1f8 +void m68000_mcu_device::move_l_ais_aipd_ipm() // 20d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50450,7 +50450,7 @@ void m68000_device::move_l_ais_aipd_ipm() // 20d0 f1f8 } } -void m68000_device::move_l_aips_aipd_ipm() // 20d8 f1f8 +void m68000_mcu_device::move_l_aips_aipd_ipm() // 20d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50600,7 +50600,7 @@ void m68000_device::move_l_aips_aipd_ipm() // 20d8 f1f8 } } -void m68000_device::move_l_pais_aipd_ipm() // 20e0 f1f8 +void m68000_mcu_device::move_l_pais_aipd_ipm() // 20e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50751,7 +50751,7 @@ void m68000_device::move_l_pais_aipd_ipm() // 20e0 f1f8 } } -void m68000_device::move_l_das_aipd_ipm() // 20e8 f1f8 +void m68000_mcu_device::move_l_das_aipd_ipm() // 20e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -50922,7 +50922,7 @@ void m68000_device::move_l_das_aipd_ipm() // 20e8 f1f8 } } -void m68000_device::move_l_dais_aipd_ipm() // 20f0 f1f8 +void m68000_mcu_device::move_l_dais_aipd_ipm() // 20f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -51134,7 +51134,7 @@ adsl2: } } -void m68000_device::move_l_adr16_aipd_ipm() // 20f8 f1ff +void m68000_mcu_device::move_l_adr16_aipd_ipm() // 20f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -51307,7 +51307,7 @@ void m68000_device::move_l_adr16_aipd_ipm() // 20f8 f1ff } } -void m68000_device::move_l_adr32_aipd_ipm() // 20f9 f1ff +void m68000_mcu_device::move_l_adr32_aipd_ipm() // 20f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -51504,7 +51504,7 @@ void m68000_device::move_l_adr32_aipd_ipm() // 20f9 f1ff } } -void m68000_device::move_l_dpc_aipd_ipm() // 20fa f1ff +void m68000_mcu_device::move_l_dpc_aipd_ipm() // 20fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -51674,7 +51674,7 @@ void m68000_device::move_l_dpc_aipd_ipm() // 20fa f1ff } } -void m68000_device::move_l_dpci_aipd_ipm() // 20fb f1ff +void m68000_mcu_device::move_l_dpci_aipd_ipm() // 20fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -51885,7 +51885,7 @@ adsl2: } } -void m68000_device::move_l_imm32_aipd_ipm() // 20fc f1ff +void m68000_mcu_device::move_l_imm32_aipd_ipm() // 20fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -52032,7 +52032,7 @@ void m68000_device::move_l_imm32_aipd_ipm() // 20fc f1ff } } -void m68000_device::move_l_ds_paid_ipm() // 2100 f1f8 +void m68000_mcu_device::move_l_ds_paid_ipm() // 2100 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -52128,7 +52128,7 @@ void m68000_device::move_l_ds_paid_ipm() // 2100 f1f8 } } -void m68000_device::move_l_as_paid_ipm() // 2108 f1f8 +void m68000_mcu_device::move_l_as_paid_ipm() // 2108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -52224,7 +52224,7 @@ void m68000_device::move_l_as_paid_ipm() // 2108 f1f8 } } -void m68000_device::move_l_ais_paid_ipm() // 2110 f1f8 +void m68000_mcu_device::move_l_ais_paid_ipm() // 2110 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -52371,7 +52371,7 @@ void m68000_device::move_l_ais_paid_ipm() // 2110 f1f8 } } -void m68000_device::move_l_aips_paid_ipm() // 2118 f1f8 +void m68000_mcu_device::move_l_aips_paid_ipm() // 2118 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -52521,7 +52521,7 @@ void m68000_device::move_l_aips_paid_ipm() // 2118 f1f8 } } -void m68000_device::move_l_pais_paid_ipm() // 2120 f1f8 +void m68000_mcu_device::move_l_pais_paid_ipm() // 2120 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -52672,7 +52672,7 @@ void m68000_device::move_l_pais_paid_ipm() // 2120 f1f8 } } -void m68000_device::move_l_das_paid_ipm() // 2128 f1f8 +void m68000_mcu_device::move_l_das_paid_ipm() // 2128 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -52843,7 +52843,7 @@ void m68000_device::move_l_das_paid_ipm() // 2128 f1f8 } } -void m68000_device::move_l_dais_paid_ipm() // 2130 f1f8 +void m68000_mcu_device::move_l_dais_paid_ipm() // 2130 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -53055,7 +53055,7 @@ adsl2: } } -void m68000_device::move_l_adr16_paid_ipm() // 2138 f1ff +void m68000_mcu_device::move_l_adr16_paid_ipm() // 2138 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -53228,7 +53228,7 @@ void m68000_device::move_l_adr16_paid_ipm() // 2138 f1ff } } -void m68000_device::move_l_adr32_paid_ipm() // 2139 f1ff +void m68000_mcu_device::move_l_adr32_paid_ipm() // 2139 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -53425,7 +53425,7 @@ void m68000_device::move_l_adr32_paid_ipm() // 2139 f1ff } } -void m68000_device::move_l_dpc_paid_ipm() // 213a f1ff +void m68000_mcu_device::move_l_dpc_paid_ipm() // 213a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -53595,7 +53595,7 @@ void m68000_device::move_l_dpc_paid_ipm() // 213a f1ff } } -void m68000_device::move_l_dpci_paid_ipm() // 213b f1ff +void m68000_mcu_device::move_l_dpci_paid_ipm() // 213b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -53806,7 +53806,7 @@ adsl2: } } -void m68000_device::move_l_imm32_paid_ipm() // 213c f1ff +void m68000_mcu_device::move_l_imm32_paid_ipm() // 213c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -53952,7 +53952,7 @@ void m68000_device::move_l_imm32_paid_ipm() // 213c f1ff } } -void m68000_device::move_l_ds_dad_ipm() // 2140 f1f8 +void m68000_mcu_device::move_l_ds_dad_ipm() // 2140 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -54075,7 +54075,7 @@ void m68000_device::move_l_ds_dad_ipm() // 2140 f1f8 } } -void m68000_device::move_l_as_dad_ipm() // 2148 f1f8 +void m68000_mcu_device::move_l_as_dad_ipm() // 2148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -54198,7 +54198,7 @@ void m68000_device::move_l_as_dad_ipm() // 2148 f1f8 } } -void m68000_device::move_l_ais_dad_ipm() // 2150 f1f8 +void m68000_mcu_device::move_l_ais_dad_ipm() // 2150 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -54375,7 +54375,7 @@ void m68000_device::move_l_ais_dad_ipm() // 2150 f1f8 } } -void m68000_device::move_l_aips_dad_ipm() // 2158 f1f8 +void m68000_mcu_device::move_l_aips_dad_ipm() // 2158 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -54555,7 +54555,7 @@ void m68000_device::move_l_aips_dad_ipm() // 2158 f1f8 } } -void m68000_device::move_l_pais_dad_ipm() // 2160 f1f8 +void m68000_mcu_device::move_l_pais_dad_ipm() // 2160 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -54736,7 +54736,7 @@ void m68000_device::move_l_pais_dad_ipm() // 2160 f1f8 } } -void m68000_device::move_l_das_dad_ipm() // 2168 f1f8 +void m68000_mcu_device::move_l_das_dad_ipm() // 2168 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -54937,7 +54937,7 @@ void m68000_device::move_l_das_dad_ipm() // 2168 f1f8 } } -void m68000_device::move_l_dais_dad_ipm() // 2170 f1f8 +void m68000_mcu_device::move_l_dais_dad_ipm() // 2170 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -55179,7 +55179,7 @@ adsl2: } } -void m68000_device::move_l_adr16_dad_ipm() // 2178 f1ff +void m68000_mcu_device::move_l_adr16_dad_ipm() // 2178 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -55382,7 +55382,7 @@ void m68000_device::move_l_adr16_dad_ipm() // 2178 f1ff } } -void m68000_device::move_l_adr32_dad_ipm() // 2179 f1ff +void m68000_mcu_device::move_l_adr32_dad_ipm() // 2179 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -55609,7 +55609,7 @@ void m68000_device::move_l_adr32_dad_ipm() // 2179 f1ff } } -void m68000_device::move_l_dpc_dad_ipm() // 217a f1ff +void m68000_mcu_device::move_l_dpc_dad_ipm() // 217a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -55809,7 +55809,7 @@ void m68000_device::move_l_dpc_dad_ipm() // 217a f1ff } } -void m68000_device::move_l_dpci_dad_ipm() // 217b f1ff +void m68000_mcu_device::move_l_dpci_dad_ipm() // 217b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -56050,7 +56050,7 @@ adsl2: } } -void m68000_device::move_l_imm32_dad_ipm() // 217c f1ff +void m68000_mcu_device::move_l_imm32_dad_ipm() // 217c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -56223,7 +56223,7 @@ void m68000_device::move_l_imm32_dad_ipm() // 217c f1ff } } -void m68000_device::move_l_ds_daid_ipm() // 2180 f1f8 +void m68000_mcu_device::move_l_ds_daid_ipm() // 2180 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -56388,7 +56388,7 @@ rmdl2: } } -void m68000_device::move_l_as_daid_ipm() // 2188 f1f8 +void m68000_mcu_device::move_l_as_daid_ipm() // 2188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -56553,7 +56553,7 @@ rmdl2: } } -void m68000_device::move_l_ais_daid_ipm() // 2190 f1f8 +void m68000_mcu_device::move_l_ais_daid_ipm() // 2190 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -56771,7 +56771,7 @@ mawl2: } } -void m68000_device::move_l_aips_daid_ipm() // 2198 f1f8 +void m68000_mcu_device::move_l_aips_daid_ipm() // 2198 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -56992,7 +56992,7 @@ mawl2: } } -void m68000_device::move_l_pais_daid_ipm() // 21a0 f1f8 +void m68000_mcu_device::move_l_pais_daid_ipm() // 21a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57214,7 +57214,7 @@ mawl2: } } -void m68000_device::move_l_das_daid_ipm() // 21a8 f1f8 +void m68000_mcu_device::move_l_das_daid_ipm() // 21a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57456,7 +57456,7 @@ mawl2: } } -void m68000_device::move_l_dais_daid_ipm() // 21b0 f1f8 +void m68000_mcu_device::move_l_dais_daid_ipm() // 21b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -57739,7 +57739,7 @@ mawl2: } } -void m68000_device::move_l_adr16_daid_ipm() // 21b8 f1ff +void m68000_mcu_device::move_l_adr16_daid_ipm() // 21b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -57983,7 +57983,7 @@ mawl2: } } -void m68000_device::move_l_adr32_daid_ipm() // 21b9 f1ff +void m68000_mcu_device::move_l_adr32_daid_ipm() // 21b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -58251,7 +58251,7 @@ mawl2: } } -void m68000_device::move_l_dpc_daid_ipm() // 21ba f1ff +void m68000_mcu_device::move_l_dpc_daid_ipm() // 21ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -58492,7 +58492,7 @@ mawl2: } } -void m68000_device::move_l_dpci_daid_ipm() // 21bb f1ff +void m68000_mcu_device::move_l_dpci_daid_ipm() // 21bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -58774,7 +58774,7 @@ mawl2: } } -void m68000_device::move_l_imm32_daid_ipm() // 21bc f1ff +void m68000_mcu_device::move_l_imm32_daid_ipm() // 21bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -58989,7 +58989,7 @@ rmdl2: } } -void m68000_device::move_l_ds_adr16_ipm() // 21c0 fff8 +void m68000_mcu_device::move_l_ds_adr16_ipm() // 21c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -59115,7 +59115,7 @@ void m68000_device::move_l_ds_adr16_ipm() // 21c0 fff8 } } -void m68000_device::move_l_as_adr16_ipm() // 21c8 fff8 +void m68000_mcu_device::move_l_as_adr16_ipm() // 21c8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -59241,7 +59241,7 @@ void m68000_device::move_l_as_adr16_ipm() // 21c8 fff8 } } -void m68000_device::move_l_ais_adr16_ipm() // 21d0 fff8 +void m68000_mcu_device::move_l_ais_adr16_ipm() // 21d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -59417,7 +59417,7 @@ void m68000_device::move_l_ais_adr16_ipm() // 21d0 fff8 } } -void m68000_device::move_l_aips_adr16_ipm() // 21d8 fff8 +void m68000_mcu_device::move_l_aips_adr16_ipm() // 21d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -59596,7 +59596,7 @@ void m68000_device::move_l_aips_adr16_ipm() // 21d8 fff8 } } -void m68000_device::move_l_pais_adr16_ipm() // 21e0 fff8 +void m68000_mcu_device::move_l_pais_adr16_ipm() // 21e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -59776,7 +59776,7 @@ void m68000_device::move_l_pais_adr16_ipm() // 21e0 fff8 } } -void m68000_device::move_l_das_adr16_ipm() // 21e8 fff8 +void m68000_mcu_device::move_l_das_adr16_ipm() // 21e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -59976,7 +59976,7 @@ void m68000_device::move_l_das_adr16_ipm() // 21e8 fff8 } } -void m68000_device::move_l_dais_adr16_ipm() // 21f0 fff8 +void m68000_mcu_device::move_l_dais_adr16_ipm() // 21f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -60217,7 +60217,7 @@ adsl2: } } -void m68000_device::move_l_adr16_adr16_ipm() // 21f8 ffff +void m68000_mcu_device::move_l_adr16_adr16_ipm() // 21f8 ffff { switch(m_inst_substate) { case 0: @@ -60419,7 +60419,7 @@ void m68000_device::move_l_adr16_adr16_ipm() // 21f8 ffff } } -void m68000_device::move_l_adr32_adr16_ipm() // 21f9 ffff +void m68000_mcu_device::move_l_adr32_adr16_ipm() // 21f9 ffff { switch(m_inst_substate) { case 0: @@ -60645,7 +60645,7 @@ void m68000_device::move_l_adr32_adr16_ipm() // 21f9 ffff } } -void m68000_device::move_l_dpc_adr16_ipm() // 21fa ffff +void m68000_mcu_device::move_l_dpc_adr16_ipm() // 21fa ffff { switch(m_inst_substate) { case 0: @@ -60844,7 +60844,7 @@ void m68000_device::move_l_dpc_adr16_ipm() // 21fa ffff } } -void m68000_device::move_l_dpci_adr16_ipm() // 21fb ffff +void m68000_mcu_device::move_l_dpci_adr16_ipm() // 21fb ffff { switch(m_inst_substate) { case 0: @@ -61084,7 +61084,7 @@ adsl2: } } -void m68000_device::move_l_imm32_adr16_ipm() // 21fc ffff +void m68000_mcu_device::move_l_imm32_adr16_ipm() // 21fc ffff { switch(m_inst_substate) { case 0: @@ -61260,7 +61260,7 @@ void m68000_device::move_l_imm32_adr16_ipm() // 21fc ffff } } -void m68000_device::move_l_ds_adr32_ipm() // 23c0 fff8 +void m68000_mcu_device::move_l_ds_adr32_ipm() // 23c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -61410,7 +61410,7 @@ void m68000_device::move_l_ds_adr32_ipm() // 23c0 fff8 } } -void m68000_device::move_l_as_adr32_ipm() // 23c8 fff8 +void m68000_mcu_device::move_l_as_adr32_ipm() // 23c8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -61560,7 +61560,7 @@ void m68000_device::move_l_as_adr32_ipm() // 23c8 fff8 } } -void m68000_device::move_l_ais_adr32_ipm() // 23d0 fff8 +void m68000_mcu_device::move_l_ais_adr32_ipm() // 23d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -61761,7 +61761,7 @@ void m68000_device::move_l_ais_adr32_ipm() // 23d0 fff8 } } -void m68000_device::move_l_aips_adr32_ipm() // 23d8 fff8 +void m68000_mcu_device::move_l_aips_adr32_ipm() // 23d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -61965,7 +61965,7 @@ void m68000_device::move_l_aips_adr32_ipm() // 23d8 fff8 } } -void m68000_device::move_l_pais_adr32_ipm() // 23e0 fff8 +void m68000_mcu_device::move_l_pais_adr32_ipm() // 23e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -62170,7 +62170,7 @@ void m68000_device::move_l_pais_adr32_ipm() // 23e0 fff8 } } -void m68000_device::move_l_das_adr32_ipm() // 23e8 fff8 +void m68000_mcu_device::move_l_das_adr32_ipm() // 23e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -62395,7 +62395,7 @@ void m68000_device::move_l_das_adr32_ipm() // 23e8 fff8 } } -void m68000_device::move_l_dais_adr32_ipm() // 23f0 fff8 +void m68000_mcu_device::move_l_dais_adr32_ipm() // 23f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -62661,7 +62661,7 @@ adsl2: } } -void m68000_device::move_l_adr16_adr32_ipm() // 23f8 ffff +void m68000_mcu_device::move_l_adr16_adr32_ipm() // 23f8 ffff { switch(m_inst_substate) { case 0: @@ -62888,7 +62888,7 @@ void m68000_device::move_l_adr16_adr32_ipm() // 23f8 ffff } } -void m68000_device::move_l_adr32_adr32_ipm() // 23f9 ffff +void m68000_mcu_device::move_l_adr32_adr32_ipm() // 23f9 ffff { switch(m_inst_substate) { case 0: @@ -63139,7 +63139,7 @@ void m68000_device::move_l_adr32_adr32_ipm() // 23f9 ffff } } -void m68000_device::move_l_dpc_adr32_ipm() // 23fa ffff +void m68000_mcu_device::move_l_dpc_adr32_ipm() // 23fa ffff { switch(m_inst_substate) { case 0: @@ -63363,7 +63363,7 @@ void m68000_device::move_l_dpc_adr32_ipm() // 23fa ffff } } -void m68000_device::move_l_dpci_adr32_ipm() // 23fb ffff +void m68000_mcu_device::move_l_dpci_adr32_ipm() // 23fb ffff { switch(m_inst_substate) { case 0: @@ -63628,7 +63628,7 @@ adsl2: } } -void m68000_device::move_l_imm32_adr32_ipm() // 23fc ffff +void m68000_mcu_device::move_l_imm32_adr32_ipm() // 23fc ffff { switch(m_inst_substate) { case 0: @@ -63828,7 +63828,7 @@ void m68000_device::move_l_imm32_adr32_ipm() // 23fc ffff } } -void m68000_device::move_w_ds_dd_ipm() // 3000 f1f8 +void m68000_mcu_device::move_w_ds_dd_ipm() // 3000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -63878,7 +63878,7 @@ void m68000_device::move_w_ds_dd_ipm() // 3000 f1f8 } } -void m68000_device::move_w_as_dd_ipm() // 3008 f1f8 +void m68000_mcu_device::move_w_as_dd_ipm() // 3008 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -63928,7 +63928,7 @@ void m68000_device::move_w_as_dd_ipm() // 3008 f1f8 } } -void m68000_device::move_w_ais_dd_ipm() // 3010 f1f8 +void m68000_mcu_device::move_w_ais_dd_ipm() // 3010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -64003,7 +64003,7 @@ void m68000_device::move_w_ais_dd_ipm() // 3010 f1f8 } } -void m68000_device::move_w_aips_dd_ipm() // 3018 f1f8 +void m68000_mcu_device::move_w_aips_dd_ipm() // 3018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -64082,7 +64082,7 @@ void m68000_device::move_w_aips_dd_ipm() // 3018 f1f8 } } -void m68000_device::move_w_pais_dd_ipm() // 3020 f1f8 +void m68000_mcu_device::move_w_pais_dd_ipm() // 3020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -64163,7 +64163,7 @@ void m68000_device::move_w_pais_dd_ipm() // 3020 f1f8 } } -void m68000_device::move_w_das_dd_ipm() // 3028 f1f8 +void m68000_mcu_device::move_w_das_dd_ipm() // 3028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -64263,7 +64263,7 @@ void m68000_device::move_w_das_dd_ipm() // 3028 f1f8 } } -void m68000_device::move_w_dais_dd_ipm() // 3030 f1f8 +void m68000_mcu_device::move_w_dais_dd_ipm() // 3030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -64404,7 +64404,7 @@ adsw2: } } -void m68000_device::move_w_adr16_dd_ipm() // 3038 f1ff +void m68000_mcu_device::move_w_adr16_dd_ipm() // 3038 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -64503,7 +64503,7 @@ void m68000_device::move_w_adr16_dd_ipm() // 3038 f1ff } } -void m68000_device::move_w_adr32_dd_ipm() // 3039 f1ff +void m68000_mcu_device::move_w_adr32_dd_ipm() // 3039 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -64626,7 +64626,7 @@ void m68000_device::move_w_adr32_dd_ipm() // 3039 f1ff } } -void m68000_device::move_w_dpc_dd_ipm() // 303a f1ff +void m68000_mcu_device::move_w_dpc_dd_ipm() // 303a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -64725,7 +64725,7 @@ void m68000_device::move_w_dpc_dd_ipm() // 303a f1ff } } -void m68000_device::move_w_dpci_dd_ipm() // 303b f1ff +void m68000_mcu_device::move_w_dpci_dd_ipm() // 303b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -64865,7 +64865,7 @@ adsw2: } } -void m68000_device::move_w_imm16_dd_ipm() // 303c f1ff +void m68000_mcu_device::move_w_imm16_dd_ipm() // 303c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -64941,7 +64941,7 @@ void m68000_device::move_w_imm16_dd_ipm() // 303c f1ff } } -void m68000_device::movea_w_ds_ad_ipm() // 3040 f1f8 +void m68000_mcu_device::movea_w_ds_ad_ipm() // 3040 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -64989,7 +64989,7 @@ void m68000_device::movea_w_ds_ad_ipm() // 3040 f1f8 } } -void m68000_device::movea_w_as_ad_ipm() // 3048 f1f8 +void m68000_mcu_device::movea_w_as_ad_ipm() // 3048 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -65037,7 +65037,7 @@ void m68000_device::movea_w_as_ad_ipm() // 3048 f1f8 } } -void m68000_device::movea_w_ais_ad_ipm() // 3050 f1f8 +void m68000_mcu_device::movea_w_ais_ad_ipm() // 3050 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -65109,7 +65109,7 @@ void m68000_device::movea_w_ais_ad_ipm() // 3050 f1f8 } } -void m68000_device::movea_w_aips_ad_ipm() // 3058 f1f8 +void m68000_mcu_device::movea_w_aips_ad_ipm() // 3058 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -65185,7 +65185,7 @@ void m68000_device::movea_w_aips_ad_ipm() // 3058 f1f8 } } -void m68000_device::movea_w_pais_ad_ipm() // 3060 f1f8 +void m68000_mcu_device::movea_w_pais_ad_ipm() // 3060 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -65263,7 +65263,7 @@ void m68000_device::movea_w_pais_ad_ipm() // 3060 f1f8 } } -void m68000_device::movea_w_das_ad_ipm() // 3068 f1f8 +void m68000_mcu_device::movea_w_das_ad_ipm() // 3068 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -65360,7 +65360,7 @@ void m68000_device::movea_w_das_ad_ipm() // 3068 f1f8 } } -void m68000_device::movea_w_dais_ad_ipm() // 3070 f1f8 +void m68000_mcu_device::movea_w_dais_ad_ipm() // 3070 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -65498,7 +65498,7 @@ adsw2: } } -void m68000_device::movea_w_adr16_ad_ipm() // 3078 f1ff +void m68000_mcu_device::movea_w_adr16_ad_ipm() // 3078 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -65594,7 +65594,7 @@ void m68000_device::movea_w_adr16_ad_ipm() // 3078 f1ff } } -void m68000_device::movea_w_adr32_ad_ipm() // 3079 f1ff +void m68000_mcu_device::movea_w_adr32_ad_ipm() // 3079 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -65714,7 +65714,7 @@ void m68000_device::movea_w_adr32_ad_ipm() // 3079 f1ff } } -void m68000_device::movea_w_dpc_ad_ipm() // 307a f1ff +void m68000_mcu_device::movea_w_dpc_ad_ipm() // 307a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -65810,7 +65810,7 @@ void m68000_device::movea_w_dpc_ad_ipm() // 307a f1ff } } -void m68000_device::movea_w_dpci_ad_ipm() // 307b f1ff +void m68000_mcu_device::movea_w_dpci_ad_ipm() // 307b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -65947,7 +65947,7 @@ adsw2: } } -void m68000_device::movea_w_imm16_ad_ipm() // 307c f1ff +void m68000_mcu_device::movea_w_imm16_ad_ipm() // 307c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -66021,7 +66021,7 @@ void m68000_device::movea_w_imm16_ad_ipm() // 307c f1ff } } -void m68000_device::move_w_ds_aid_ipm() // 3080 f1f8 +void m68000_mcu_device::move_w_ds_aid_ipm() // 3080 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -66092,7 +66092,7 @@ void m68000_device::move_w_ds_aid_ipm() // 3080 f1f8 } } -void m68000_device::move_w_as_aid_ipm() // 3088 f1f8 +void m68000_mcu_device::move_w_as_aid_ipm() // 3088 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -66163,7 +66163,7 @@ void m68000_device::move_w_as_aid_ipm() // 3088 f1f8 } } -void m68000_device::move_w_ais_aid_ipm() // 3090 f1f8 +void m68000_mcu_device::move_w_ais_aid_ipm() // 3090 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -66260,7 +66260,7 @@ void m68000_device::move_w_ais_aid_ipm() // 3090 f1f8 } } -void m68000_device::move_w_aips_aid_ipm() // 3098 f1f8 +void m68000_mcu_device::move_w_aips_aid_ipm() // 3098 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -66361,7 +66361,7 @@ void m68000_device::move_w_aips_aid_ipm() // 3098 f1f8 } } -void m68000_device::move_w_pais_aid_ipm() // 30a0 f1f8 +void m68000_mcu_device::move_w_pais_aid_ipm() // 30a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -66464,7 +66464,7 @@ void m68000_device::move_w_pais_aid_ipm() // 30a0 f1f8 } } -void m68000_device::move_w_das_aid_ipm() // 30a8 f1f8 +void m68000_mcu_device::move_w_das_aid_ipm() // 30a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -66586,7 +66586,7 @@ void m68000_device::move_w_das_aid_ipm() // 30a8 f1f8 } } -void m68000_device::move_w_dais_aid_ipm() // 30b0 f1f8 +void m68000_mcu_device::move_w_dais_aid_ipm() // 30b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -66749,7 +66749,7 @@ adsw2: } } -void m68000_device::move_w_adr16_aid_ipm() // 30b8 f1ff +void m68000_mcu_device::move_w_adr16_aid_ipm() // 30b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -66870,7 +66870,7 @@ void m68000_device::move_w_adr16_aid_ipm() // 30b8 f1ff } } -void m68000_device::move_w_adr32_aid_ipm() // 30b9 f1ff +void m68000_mcu_device::move_w_adr32_aid_ipm() // 30b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -67015,7 +67015,7 @@ void m68000_device::move_w_adr32_aid_ipm() // 30b9 f1ff } } -void m68000_device::move_w_dpc_aid_ipm() // 30ba f1ff +void m68000_mcu_device::move_w_dpc_aid_ipm() // 30ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -67136,7 +67136,7 @@ void m68000_device::move_w_dpc_aid_ipm() // 30ba f1ff } } -void m68000_device::move_w_dpci_aid_ipm() // 30bb f1ff +void m68000_mcu_device::move_w_dpci_aid_ipm() // 30bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -67298,7 +67298,7 @@ adsw2: } } -void m68000_device::move_w_imm16_aid_ipm() // 30bc f1ff +void m68000_mcu_device::move_w_imm16_aid_ipm() // 30bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -67395,7 +67395,7 @@ void m68000_device::move_w_imm16_aid_ipm() // 30bc f1ff } } -void m68000_device::move_w_ds_aipd_ipm() // 30c0 f1f8 +void m68000_mcu_device::move_w_ds_aipd_ipm() // 30c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -67465,7 +67465,7 @@ void m68000_device::move_w_ds_aipd_ipm() // 30c0 f1f8 } } -void m68000_device::move_w_as_aipd_ipm() // 30c8 f1f8 +void m68000_mcu_device::move_w_as_aipd_ipm() // 30c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -67535,7 +67535,7 @@ void m68000_device::move_w_as_aipd_ipm() // 30c8 f1f8 } } -void m68000_device::move_w_ais_aipd_ipm() // 30d0 f1f8 +void m68000_mcu_device::move_w_ais_aipd_ipm() // 30d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -67632,7 +67632,7 @@ void m68000_device::move_w_ais_aipd_ipm() // 30d0 f1f8 } } -void m68000_device::move_w_aips_aipd_ipm() // 30d8 f1f8 +void m68000_mcu_device::move_w_aips_aipd_ipm() // 30d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -67733,7 +67733,7 @@ void m68000_device::move_w_aips_aipd_ipm() // 30d8 f1f8 } } -void m68000_device::move_w_pais_aipd_ipm() // 30e0 f1f8 +void m68000_mcu_device::move_w_pais_aipd_ipm() // 30e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -67836,7 +67836,7 @@ void m68000_device::move_w_pais_aipd_ipm() // 30e0 f1f8 } } -void m68000_device::move_w_das_aipd_ipm() // 30e8 f1f8 +void m68000_mcu_device::move_w_das_aipd_ipm() // 30e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -67958,7 +67958,7 @@ void m68000_device::move_w_das_aipd_ipm() // 30e8 f1f8 } } -void m68000_device::move_w_dais_aipd_ipm() // 30f0 f1f8 +void m68000_mcu_device::move_w_dais_aipd_ipm() // 30f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -68121,7 +68121,7 @@ adsw2: } } -void m68000_device::move_w_adr16_aipd_ipm() // 30f8 f1ff +void m68000_mcu_device::move_w_adr16_aipd_ipm() // 30f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -68242,7 +68242,7 @@ void m68000_device::move_w_adr16_aipd_ipm() // 30f8 f1ff } } -void m68000_device::move_w_adr32_aipd_ipm() // 30f9 f1ff +void m68000_mcu_device::move_w_adr32_aipd_ipm() // 30f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -68387,7 +68387,7 @@ void m68000_device::move_w_adr32_aipd_ipm() // 30f9 f1ff } } -void m68000_device::move_w_dpc_aipd_ipm() // 30fa f1ff +void m68000_mcu_device::move_w_dpc_aipd_ipm() // 30fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -68508,7 +68508,7 @@ void m68000_device::move_w_dpc_aipd_ipm() // 30fa f1ff } } -void m68000_device::move_w_dpci_aipd_ipm() // 30fb f1ff +void m68000_mcu_device::move_w_dpci_aipd_ipm() // 30fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -68670,7 +68670,7 @@ adsw2: } } -void m68000_device::move_w_imm16_aipd_ipm() // 30fc f1ff +void m68000_mcu_device::move_w_imm16_aipd_ipm() // 30fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -68766,7 +68766,7 @@ void m68000_device::move_w_imm16_aipd_ipm() // 30fc f1ff } } -void m68000_device::move_w_ds_paid_ipm() // 3100 f1f8 +void m68000_mcu_device::move_w_ds_paid_ipm() // 3100 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -68836,7 +68836,7 @@ void m68000_device::move_w_ds_paid_ipm() // 3100 f1f8 } } -void m68000_device::move_w_as_paid_ipm() // 3108 f1f8 +void m68000_mcu_device::move_w_as_paid_ipm() // 3108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -68906,7 +68906,7 @@ void m68000_device::move_w_as_paid_ipm() // 3108 f1f8 } } -void m68000_device::move_w_ais_paid_ipm() // 3110 f1f8 +void m68000_mcu_device::move_w_ais_paid_ipm() // 3110 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -69003,7 +69003,7 @@ void m68000_device::move_w_ais_paid_ipm() // 3110 f1f8 } } -void m68000_device::move_w_aips_paid_ipm() // 3118 f1f8 +void m68000_mcu_device::move_w_aips_paid_ipm() // 3118 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -69104,7 +69104,7 @@ void m68000_device::move_w_aips_paid_ipm() // 3118 f1f8 } } -void m68000_device::move_w_pais_paid_ipm() // 3120 f1f8 +void m68000_mcu_device::move_w_pais_paid_ipm() // 3120 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -69207,7 +69207,7 @@ void m68000_device::move_w_pais_paid_ipm() // 3120 f1f8 } } -void m68000_device::move_w_das_paid_ipm() // 3128 f1f8 +void m68000_mcu_device::move_w_das_paid_ipm() // 3128 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -69329,7 +69329,7 @@ void m68000_device::move_w_das_paid_ipm() // 3128 f1f8 } } -void m68000_device::move_w_dais_paid_ipm() // 3130 f1f8 +void m68000_mcu_device::move_w_dais_paid_ipm() // 3130 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -69492,7 +69492,7 @@ adsw2: } } -void m68000_device::move_w_adr16_paid_ipm() // 3138 f1ff +void m68000_mcu_device::move_w_adr16_paid_ipm() // 3138 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -69613,7 +69613,7 @@ void m68000_device::move_w_adr16_paid_ipm() // 3138 f1ff } } -void m68000_device::move_w_adr32_paid_ipm() // 3139 f1ff +void m68000_mcu_device::move_w_adr32_paid_ipm() // 3139 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -69758,7 +69758,7 @@ void m68000_device::move_w_adr32_paid_ipm() // 3139 f1ff } } -void m68000_device::move_w_dpc_paid_ipm() // 313a f1ff +void m68000_mcu_device::move_w_dpc_paid_ipm() // 313a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -69879,7 +69879,7 @@ void m68000_device::move_w_dpc_paid_ipm() // 313a f1ff } } -void m68000_device::move_w_dpci_paid_ipm() // 313b f1ff +void m68000_mcu_device::move_w_dpci_paid_ipm() // 313b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -70041,7 +70041,7 @@ adsw2: } } -void m68000_device::move_w_imm16_paid_ipm() // 313c f1ff +void m68000_mcu_device::move_w_imm16_paid_ipm() // 313c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -70137,7 +70137,7 @@ void m68000_device::move_w_imm16_paid_ipm() // 313c f1ff } } -void m68000_device::move_w_ds_dad_ipm() // 3140 f1f8 +void m68000_mcu_device::move_w_ds_dad_ipm() // 3140 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -70232,7 +70232,7 @@ void m68000_device::move_w_ds_dad_ipm() // 3140 f1f8 } } -void m68000_device::move_w_as_dad_ipm() // 3148 f1f8 +void m68000_mcu_device::move_w_as_dad_ipm() // 3148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -70327,7 +70327,7 @@ void m68000_device::move_w_as_dad_ipm() // 3148 f1f8 } } -void m68000_device::move_w_ais_dad_ipm() // 3150 f1f8 +void m68000_mcu_device::move_w_ais_dad_ipm() // 3150 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -70453,7 +70453,7 @@ void m68000_device::move_w_ais_dad_ipm() // 3150 f1f8 } } -void m68000_device::move_w_aips_dad_ipm() // 3158 f1f8 +void m68000_mcu_device::move_w_aips_dad_ipm() // 3158 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -70583,7 +70583,7 @@ void m68000_device::move_w_aips_dad_ipm() // 3158 f1f8 } } -void m68000_device::move_w_pais_dad_ipm() // 3160 f1f8 +void m68000_mcu_device::move_w_pais_dad_ipm() // 3160 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -70715,7 +70715,7 @@ void m68000_device::move_w_pais_dad_ipm() // 3160 f1f8 } } -void m68000_device::move_w_das_dad_ipm() // 3168 f1f8 +void m68000_mcu_device::move_w_das_dad_ipm() // 3168 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -70866,7 +70866,7 @@ void m68000_device::move_w_das_dad_ipm() // 3168 f1f8 } } -void m68000_device::move_w_dais_dad_ipm() // 3170 f1f8 +void m68000_mcu_device::move_w_dais_dad_ipm() // 3170 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -71058,7 +71058,7 @@ adsw2: } } -void m68000_device::move_w_adr16_dad_ipm() // 3178 f1ff +void m68000_mcu_device::move_w_adr16_dad_ipm() // 3178 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -71208,7 +71208,7 @@ void m68000_device::move_w_adr16_dad_ipm() // 3178 f1ff } } -void m68000_device::move_w_adr32_dad_ipm() // 3179 f1ff +void m68000_mcu_device::move_w_adr32_dad_ipm() // 3179 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -71382,7 +71382,7 @@ void m68000_device::move_w_adr32_dad_ipm() // 3179 f1ff } } -void m68000_device::move_w_dpc_dad_ipm() // 317a f1ff +void m68000_mcu_device::move_w_dpc_dad_ipm() // 317a f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -71532,7 +71532,7 @@ void m68000_device::move_w_dpc_dad_ipm() // 317a f1ff } } -void m68000_device::move_w_dpci_dad_ipm() // 317b f1ff +void m68000_mcu_device::move_w_dpci_dad_ipm() // 317b f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -71723,7 +71723,7 @@ adsw2: } } -void m68000_device::move_w_imm16_dad_ipm() // 317c f1ff +void m68000_mcu_device::move_w_imm16_dad_ipm() // 317c f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -71844,7 +71844,7 @@ void m68000_device::move_w_imm16_dad_ipm() // 317c f1ff } } -void m68000_device::move_w_ds_daid_ipm() // 3180 f1f8 +void m68000_mcu_device::move_w_ds_daid_ipm() // 3180 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -71981,7 +71981,7 @@ rmdw2: } } -void m68000_device::move_w_as_daid_ipm() // 3188 f1f8 +void m68000_mcu_device::move_w_as_daid_ipm() // 3188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -72118,7 +72118,7 @@ rmdw2: } } -void m68000_device::move_w_ais_daid_ipm() // 3190 f1f8 +void m68000_mcu_device::move_w_ais_daid_ipm() // 3190 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -72285,7 +72285,7 @@ maww2: } } -void m68000_device::move_w_aips_daid_ipm() // 3198 f1f8 +void m68000_mcu_device::move_w_aips_daid_ipm() // 3198 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -72456,7 +72456,7 @@ maww2: } } -void m68000_device::move_w_pais_daid_ipm() // 31a0 f1f8 +void m68000_mcu_device::move_w_pais_daid_ipm() // 31a0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -72629,7 +72629,7 @@ maww2: } } -void m68000_device::move_w_das_daid_ipm() // 31a8 f1f8 +void m68000_mcu_device::move_w_das_daid_ipm() // 31a8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -72821,7 +72821,7 @@ maww2: } } -void m68000_device::move_w_dais_daid_ipm() // 31b0 f1f8 +void m68000_mcu_device::move_w_dais_daid_ipm() // 31b0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -73054,7 +73054,7 @@ maww2: } } -void m68000_device::move_w_adr16_daid_ipm() // 31b8 f1ff +void m68000_mcu_device::move_w_adr16_daid_ipm() // 31b8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -73245,7 +73245,7 @@ maww2: } } -void m68000_device::move_w_adr32_daid_ipm() // 31b9 f1ff +void m68000_mcu_device::move_w_adr32_daid_ipm() // 31b9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -73460,7 +73460,7 @@ maww2: } } -void m68000_device::move_w_dpc_daid_ipm() // 31ba f1ff +void m68000_mcu_device::move_w_dpc_daid_ipm() // 31ba f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -73651,7 +73651,7 @@ maww2: } } -void m68000_device::move_w_dpci_daid_ipm() // 31bb f1ff +void m68000_mcu_device::move_w_dpci_daid_ipm() // 31bb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -73883,7 +73883,7 @@ maww2: } } -void m68000_device::move_w_imm16_daid_ipm() // 31bc f1ff +void m68000_mcu_device::move_w_imm16_daid_ipm() // 31bc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -74046,7 +74046,7 @@ rmdw2: } } -void m68000_device::move_w_ds_adr16_ipm() // 31c0 fff8 +void m68000_mcu_device::move_w_ds_adr16_ipm() // 31c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -74145,7 +74145,7 @@ void m68000_device::move_w_ds_adr16_ipm() // 31c0 fff8 } } -void m68000_device::move_w_as_adr16_ipm() // 31c8 fff8 +void m68000_mcu_device::move_w_as_adr16_ipm() // 31c8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -74244,7 +74244,7 @@ void m68000_device::move_w_as_adr16_ipm() // 31c8 fff8 } } -void m68000_device::move_w_ais_adr16_ipm() // 31d0 fff8 +void m68000_mcu_device::move_w_ais_adr16_ipm() // 31d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -74369,7 +74369,7 @@ void m68000_device::move_w_ais_adr16_ipm() // 31d0 fff8 } } -void m68000_device::move_w_aips_adr16_ipm() // 31d8 fff8 +void m68000_mcu_device::move_w_aips_adr16_ipm() // 31d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -74498,7 +74498,7 @@ void m68000_device::move_w_aips_adr16_ipm() // 31d8 fff8 } } -void m68000_device::move_w_pais_adr16_ipm() // 31e0 fff8 +void m68000_mcu_device::move_w_pais_adr16_ipm() // 31e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -74629,7 +74629,7 @@ void m68000_device::move_w_pais_adr16_ipm() // 31e0 fff8 } } -void m68000_device::move_w_das_adr16_ipm() // 31e8 fff8 +void m68000_mcu_device::move_w_das_adr16_ipm() // 31e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -74779,7 +74779,7 @@ void m68000_device::move_w_das_adr16_ipm() // 31e8 fff8 } } -void m68000_device::move_w_dais_adr16_ipm() // 31f0 fff8 +void m68000_mcu_device::move_w_dais_adr16_ipm() // 31f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -74970,7 +74970,7 @@ adsw2: } } -void m68000_device::move_w_adr16_adr16_ipm() // 31f8 ffff +void m68000_mcu_device::move_w_adr16_adr16_ipm() // 31f8 ffff { switch(m_inst_substate) { case 0: @@ -75119,7 +75119,7 @@ void m68000_device::move_w_adr16_adr16_ipm() // 31f8 ffff } } -void m68000_device::move_w_adr32_adr16_ipm() // 31f9 ffff +void m68000_mcu_device::move_w_adr32_adr16_ipm() // 31f9 ffff { switch(m_inst_substate) { case 0: @@ -75292,7 +75292,7 @@ void m68000_device::move_w_adr32_adr16_ipm() // 31f9 ffff } } -void m68000_device::move_w_dpc_adr16_ipm() // 31fa ffff +void m68000_mcu_device::move_w_dpc_adr16_ipm() // 31fa ffff { switch(m_inst_substate) { case 0: @@ -75441,7 +75441,7 @@ void m68000_device::move_w_dpc_adr16_ipm() // 31fa ffff } } -void m68000_device::move_w_dpci_adr16_ipm() // 31fb ffff +void m68000_mcu_device::move_w_dpci_adr16_ipm() // 31fb ffff { switch(m_inst_substate) { case 0: @@ -75631,7 +75631,7 @@ adsw2: } } -void m68000_device::move_w_imm16_adr16_ipm() // 31fc ffff +void m68000_mcu_device::move_w_imm16_adr16_ipm() // 31fc ffff { switch(m_inst_substate) { case 0: @@ -75756,7 +75756,7 @@ void m68000_device::move_w_imm16_adr16_ipm() // 31fc ffff } } -void m68000_device::move_w_ds_adr32_ipm() // 33c0 fff8 +void m68000_mcu_device::move_w_ds_adr32_ipm() // 33c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -75879,7 +75879,7 @@ void m68000_device::move_w_ds_adr32_ipm() // 33c0 fff8 } } -void m68000_device::move_w_as_adr32_ipm() // 33c8 fff8 +void m68000_mcu_device::move_w_as_adr32_ipm() // 33c8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -76002,7 +76002,7 @@ void m68000_device::move_w_as_adr32_ipm() // 33c8 fff8 } } -void m68000_device::move_w_ais_adr32_ipm() // 33d0 fff8 +void m68000_mcu_device::move_w_ais_adr32_ipm() // 33d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -76150,7 +76150,7 @@ void m68000_device::move_w_ais_adr32_ipm() // 33d0 fff8 } } -void m68000_device::move_w_aips_adr32_ipm() // 33d8 fff8 +void m68000_mcu_device::move_w_aips_adr32_ipm() // 33d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -76302,7 +76302,7 @@ void m68000_device::move_w_aips_adr32_ipm() // 33d8 fff8 } } -void m68000_device::move_w_pais_adr32_ipm() // 33e0 fff8 +void m68000_mcu_device::move_w_pais_adr32_ipm() // 33e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -76456,7 +76456,7 @@ void m68000_device::move_w_pais_adr32_ipm() // 33e0 fff8 } } -void m68000_device::move_w_das_adr32_ipm() // 33e8 fff8 +void m68000_mcu_device::move_w_das_adr32_ipm() // 33e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -76629,7 +76629,7 @@ void m68000_device::move_w_das_adr32_ipm() // 33e8 fff8 } } -void m68000_device::move_w_dais_adr32_ipm() // 33f0 fff8 +void m68000_mcu_device::move_w_dais_adr32_ipm() // 33f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -76843,7 +76843,7 @@ adsw2: } } -void m68000_device::move_w_adr16_adr32_ipm() // 33f8 ffff +void m68000_mcu_device::move_w_adr16_adr32_ipm() // 33f8 ffff { switch(m_inst_substate) { case 0: @@ -77015,7 +77015,7 @@ void m68000_device::move_w_adr16_adr32_ipm() // 33f8 ffff } } -void m68000_device::move_w_adr32_adr32_ipm() // 33f9 ffff +void m68000_mcu_device::move_w_adr32_adr32_ipm() // 33f9 ffff { switch(m_inst_substate) { case 0: @@ -77211,7 +77211,7 @@ void m68000_device::move_w_adr32_adr32_ipm() // 33f9 ffff } } -void m68000_device::move_w_dpc_adr32_ipm() // 33fa ffff +void m68000_mcu_device::move_w_dpc_adr32_ipm() // 33fa ffff { switch(m_inst_substate) { case 0: @@ -77383,7 +77383,7 @@ void m68000_device::move_w_dpc_adr32_ipm() // 33fa ffff } } -void m68000_device::move_w_dpci_adr32_ipm() // 33fb ffff +void m68000_mcu_device::move_w_dpci_adr32_ipm() // 33fb ffff { switch(m_inst_substate) { case 0: @@ -77596,7 +77596,7 @@ adsw2: } } -void m68000_device::move_w_imm16_adr32_ipm() // 33fc ffff +void m68000_mcu_device::move_w_imm16_adr32_ipm() // 33fc ffff { switch(m_inst_substate) { case 0: @@ -77745,7 +77745,7 @@ void m68000_device::move_w_imm16_adr32_ipm() // 33fc ffff } } -void m68000_device::negx_b_ds_ipm() // 4000 fff8 +void m68000_mcu_device::negx_b_ds_ipm() // 4000 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -77793,7 +77793,7 @@ void m68000_device::negx_b_ds_ipm() // 4000 fff8 } } -void m68000_device::negx_b_ais_ipm() // 4010 fff8 +void m68000_mcu_device::negx_b_ais_ipm() // 4010 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -77878,7 +77878,7 @@ void m68000_device::negx_b_ais_ipm() // 4010 fff8 } } -void m68000_device::negx_b_aips_ipm() // 4018 fff8 +void m68000_mcu_device::negx_b_aips_ipm() // 4018 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -77967,7 +77967,7 @@ void m68000_device::negx_b_aips_ipm() // 4018 fff8 } } -void m68000_device::negx_b_pais_ipm() // 4020 fff8 +void m68000_mcu_device::negx_b_pais_ipm() // 4020 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -78058,7 +78058,7 @@ void m68000_device::negx_b_pais_ipm() // 4020 fff8 } } -void m68000_device::negx_b_das_ipm() // 4028 fff8 +void m68000_mcu_device::negx_b_das_ipm() // 4028 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -78168,7 +78168,7 @@ void m68000_device::negx_b_das_ipm() // 4028 fff8 } } -void m68000_device::negx_b_dais_ipm() // 4030 fff8 +void m68000_mcu_device::negx_b_dais_ipm() // 4030 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -78319,7 +78319,7 @@ adsw2: } } -void m68000_device::negx_b_adr16_ipm() // 4038 ffff +void m68000_mcu_device::negx_b_adr16_ipm() // 4038 ffff { switch(m_inst_substate) { case 0: @@ -78428,7 +78428,7 @@ void m68000_device::negx_b_adr16_ipm() // 4038 ffff } } -void m68000_device::negx_b_adr32_ipm() // 4039 ffff +void m68000_mcu_device::negx_b_adr32_ipm() // 4039 ffff { switch(m_inst_substate) { case 0: @@ -78561,7 +78561,7 @@ void m68000_device::negx_b_adr32_ipm() // 4039 ffff } } -void m68000_device::negx_w_ds_ipm() // 4040 fff8 +void m68000_mcu_device::negx_w_ds_ipm() // 4040 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -78609,7 +78609,7 @@ void m68000_device::negx_w_ds_ipm() // 4040 fff8 } } -void m68000_device::negx_w_ais_ipm() // 4050 fff8 +void m68000_mcu_device::negx_w_ais_ipm() // 4050 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -78704,7 +78704,7 @@ void m68000_device::negx_w_ais_ipm() // 4050 fff8 } } -void m68000_device::negx_w_aips_ipm() // 4058 fff8 +void m68000_mcu_device::negx_w_aips_ipm() // 4058 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -78803,7 +78803,7 @@ void m68000_device::negx_w_aips_ipm() // 4058 fff8 } } -void m68000_device::negx_w_pais_ipm() // 4060 fff8 +void m68000_mcu_device::negx_w_pais_ipm() // 4060 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -78904,7 +78904,7 @@ void m68000_device::negx_w_pais_ipm() // 4060 fff8 } } -void m68000_device::negx_w_das_ipm() // 4068 fff8 +void m68000_mcu_device::negx_w_das_ipm() // 4068 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -79024,7 +79024,7 @@ void m68000_device::negx_w_das_ipm() // 4068 fff8 } } -void m68000_device::negx_w_dais_ipm() // 4070 fff8 +void m68000_mcu_device::negx_w_dais_ipm() // 4070 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -79185,7 +79185,7 @@ adsw2: } } -void m68000_device::negx_w_adr16_ipm() // 4078 ffff +void m68000_mcu_device::negx_w_adr16_ipm() // 4078 ffff { switch(m_inst_substate) { case 0: @@ -79304,7 +79304,7 @@ void m68000_device::negx_w_adr16_ipm() // 4078 ffff } } -void m68000_device::negx_w_adr32_ipm() // 4079 ffff +void m68000_mcu_device::negx_w_adr32_ipm() // 4079 ffff { switch(m_inst_substate) { case 0: @@ -79447,7 +79447,7 @@ void m68000_device::negx_w_adr32_ipm() // 4079 ffff } } -void m68000_device::negx_l_ds_ipm() // 4080 fff8 +void m68000_mcu_device::negx_l_ds_ipm() // 4080 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -79501,7 +79501,7 @@ void m68000_device::negx_l_ds_ipm() // 4080 fff8 } } -void m68000_device::negx_l_ais_ipm() // 4090 fff8 +void m68000_mcu_device::negx_l_ais_ipm() // 4090 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -79646,7 +79646,7 @@ void m68000_device::negx_l_ais_ipm() // 4090 fff8 } } -void m68000_device::negx_l_aips_ipm() // 4098 fff8 +void m68000_mcu_device::negx_l_aips_ipm() // 4098 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -79794,7 +79794,7 @@ void m68000_device::negx_l_aips_ipm() // 4098 fff8 } } -void m68000_device::negx_l_pais_ipm() // 40a0 fff8 +void m68000_mcu_device::negx_l_pais_ipm() // 40a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -79943,7 +79943,7 @@ void m68000_device::negx_l_pais_ipm() // 40a0 fff8 } } -void m68000_device::negx_l_das_ipm() // 40a8 fff8 +void m68000_mcu_device::negx_l_das_ipm() // 40a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -80112,7 +80112,7 @@ void m68000_device::negx_l_das_ipm() // 40a8 fff8 } } -void m68000_device::negx_l_dais_ipm() // 40b0 fff8 +void m68000_mcu_device::negx_l_dais_ipm() // 40b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -80322,7 +80322,7 @@ adsl2: } } -void m68000_device::negx_l_adr16_ipm() // 40b8 ffff +void m68000_mcu_device::negx_l_adr16_ipm() // 40b8 ffff { switch(m_inst_substate) { case 0: @@ -80493,7 +80493,7 @@ void m68000_device::negx_l_adr16_ipm() // 40b8 ffff } } -void m68000_device::negx_l_adr32_ipm() // 40b9 ffff +void m68000_mcu_device::negx_l_adr32_ipm() // 40b9 ffff { switch(m_inst_substate) { case 0: @@ -80688,7 +80688,7 @@ void m68000_device::negx_l_adr32_ipm() // 40b9 ffff } } -void m68000_device::move_sr_ds_ipm() // 40c0 fff8 +void m68000_mcu_device::move_sr_ds_ipm() // 40c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -80735,7 +80735,7 @@ void m68000_device::move_sr_ds_ipm() // 40c0 fff8 } } -void m68000_device::move_sr_ais_ipm() // 40d0 fff8 +void m68000_mcu_device::move_sr_ais_ipm() // 40d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -80831,7 +80831,7 @@ void m68000_device::move_sr_ais_ipm() // 40d0 fff8 } } -void m68000_device::move_sr_aips_ipm() // 40d8 fff8 +void m68000_mcu_device::move_sr_aips_ipm() // 40d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -80931,7 +80931,7 @@ void m68000_device::move_sr_aips_ipm() // 40d8 fff8 } } -void m68000_device::move_sr_pais_ipm() // 40e0 fff8 +void m68000_mcu_device::move_sr_pais_ipm() // 40e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -81033,7 +81033,7 @@ void m68000_device::move_sr_pais_ipm() // 40e0 fff8 } } -void m68000_device::move_sr_das_ipm() // 40e8 fff8 +void m68000_mcu_device::move_sr_das_ipm() // 40e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -81154,7 +81154,7 @@ void m68000_device::move_sr_das_ipm() // 40e8 fff8 } } -void m68000_device::move_sr_dais_ipm() // 40f0 fff8 +void m68000_mcu_device::move_sr_dais_ipm() // 40f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -81316,7 +81316,7 @@ adsw2: } } -void m68000_device::move_sr_adr16_ipm() // 40f8 ffff +void m68000_mcu_device::move_sr_adr16_ipm() // 40f8 ffff { switch(m_inst_substate) { case 0: @@ -81436,7 +81436,7 @@ void m68000_device::move_sr_adr16_ipm() // 40f8 ffff } } -void m68000_device::move_sr_adr32_ipm() // 40f9 ffff +void m68000_mcu_device::move_sr_adr32_ipm() // 40f9 ffff { switch(m_inst_substate) { case 0: @@ -81580,7 +81580,7 @@ void m68000_device::move_sr_adr32_ipm() // 40f9 ffff } } -void m68000_device::chk_w_ds_dd_ipm() // 4180 f1f8 +void m68000_mcu_device::chk_w_ds_dd_ipm() // 4180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -81825,7 +81825,7 @@ chkr4: } } -void m68000_device::chk_w_ais_dd_ipm() // 4190 f1f8 +void m68000_mcu_device::chk_w_ais_dd_ipm() // 4190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -82097,7 +82097,7 @@ chkr4: } } -void m68000_device::chk_w_aips_dd_ipm() // 4198 f1f8 +void m68000_mcu_device::chk_w_aips_dd_ipm() // 4198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -82373,7 +82373,7 @@ chkr4: } } -void m68000_device::chk_w_pais_dd_ipm() // 41a0 f1f8 +void m68000_mcu_device::chk_w_pais_dd_ipm() // 41a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -82651,7 +82651,7 @@ chkr4: } } -void m68000_device::chk_w_das_dd_ipm() // 41a8 f1f8 +void m68000_mcu_device::chk_w_das_dd_ipm() // 41a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -82948,7 +82948,7 @@ chkr4: } } -void m68000_device::chk_w_dais_dd_ipm() // 41b0 f1f8 +void m68000_mcu_device::chk_w_dais_dd_ipm() // 41b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -83286,7 +83286,7 @@ chkr4: } } -void m68000_device::chk_w_adr16_dd_ipm() // 41b8 f1ff +void m68000_mcu_device::chk_w_adr16_dd_ipm() // 41b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -83582,7 +83582,7 @@ chkr4: } } -void m68000_device::chk_w_adr32_dd_ipm() // 41b9 f1ff +void m68000_mcu_device::chk_w_adr32_dd_ipm() // 41b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -83902,7 +83902,7 @@ chkr4: } } -void m68000_device::chk_w_dpc_dd_ipm() // 41ba f1ff +void m68000_mcu_device::chk_w_dpc_dd_ipm() // 41ba f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -84198,7 +84198,7 @@ chkr4: } } -void m68000_device::chk_w_dpci_dd_ipm() // 41bb f1ff +void m68000_mcu_device::chk_w_dpci_dd_ipm() // 41bb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -84535,7 +84535,7 @@ chkr4: } } -void m68000_device::chk_w_imm16_dd_ipm() // 41bc f1ff +void m68000_mcu_device::chk_w_imm16_dd_ipm() // 41bc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -84806,7 +84806,7 @@ chkr4: } } -void m68000_device::lea_ais_ad_ipm() // 41d0 f1f8 +void m68000_mcu_device::lea_ais_ad_ipm() // 41d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -84854,7 +84854,7 @@ void m68000_device::lea_ais_ad_ipm() // 41d0 f1f8 } } -void m68000_device::lea_das_ad_ipm() // 41e8 f1f8 +void m68000_mcu_device::lea_das_ad_ipm() // 41e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -84924,7 +84924,7 @@ void m68000_device::lea_das_ad_ipm() // 41e8 f1f8 } } -void m68000_device::lea_dais_ad_ipm() // 41f0 f1f8 +void m68000_mcu_device::lea_dais_ad_ipm() // 41f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -85037,7 +85037,7 @@ leax4: } } -void m68000_device::lea_adr16_ad_ipm() // 41f8 f1ff +void m68000_mcu_device::lea_adr16_ad_ipm() // 41f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -85104,7 +85104,7 @@ void m68000_device::lea_adr16_ad_ipm() // 41f8 f1ff } } -void m68000_device::lea_adr32_ad_ipm() // 41f9 f1ff +void m68000_mcu_device::lea_adr32_ad_ipm() // 41f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -85197,7 +85197,7 @@ void m68000_device::lea_adr32_ad_ipm() // 41f9 f1ff } } -void m68000_device::lea_dpc_ad_ipm() // 41fa f1ff +void m68000_mcu_device::lea_dpc_ad_ipm() // 41fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -85266,7 +85266,7 @@ void m68000_device::lea_dpc_ad_ipm() // 41fa f1ff } } -void m68000_device::lea_dpci_ad_ipm() // 41fb f1ff +void m68000_mcu_device::lea_dpci_ad_ipm() // 41fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -85378,7 +85378,7 @@ leax4: } } -void m68000_device::clr_b_ds_ipm() // 4200 fff8 +void m68000_mcu_device::clr_b_ds_ipm() // 4200 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -85427,7 +85427,7 @@ void m68000_device::clr_b_ds_ipm() // 4200 fff8 } } -void m68000_device::clr_b_ais_ipm() // 4210 fff8 +void m68000_mcu_device::clr_b_ais_ipm() // 4210 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -85514,7 +85514,7 @@ void m68000_device::clr_b_ais_ipm() // 4210 fff8 } } -void m68000_device::clr_b_aips_ipm() // 4218 fff8 +void m68000_mcu_device::clr_b_aips_ipm() // 4218 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -85606,7 +85606,7 @@ void m68000_device::clr_b_aips_ipm() // 4218 fff8 } } -void m68000_device::clr_b_pais_ipm() // 4220 fff8 +void m68000_mcu_device::clr_b_pais_ipm() // 4220 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -85700,7 +85700,7 @@ void m68000_device::clr_b_pais_ipm() // 4220 fff8 } } -void m68000_device::clr_b_das_ipm() // 4228 fff8 +void m68000_mcu_device::clr_b_das_ipm() // 4228 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -85813,7 +85813,7 @@ void m68000_device::clr_b_das_ipm() // 4228 fff8 } } -void m68000_device::clr_b_dais_ipm() // 4230 fff8 +void m68000_mcu_device::clr_b_dais_ipm() // 4230 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -85969,7 +85969,7 @@ adsw2: } } -void m68000_device::clr_b_adr16_ipm() // 4238 ffff +void m68000_mcu_device::clr_b_adr16_ipm() // 4238 ffff { switch(m_inst_substate) { case 0: @@ -86081,7 +86081,7 @@ void m68000_device::clr_b_adr16_ipm() // 4238 ffff } } -void m68000_device::clr_b_adr32_ipm() // 4239 ffff +void m68000_mcu_device::clr_b_adr32_ipm() // 4239 ffff { switch(m_inst_substate) { case 0: @@ -86218,7 +86218,7 @@ void m68000_device::clr_b_adr32_ipm() // 4239 ffff } } -void m68000_device::clr_w_ds_ipm() // 4240 fff8 +void m68000_mcu_device::clr_w_ds_ipm() // 4240 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -86267,7 +86267,7 @@ void m68000_device::clr_w_ds_ipm() // 4240 fff8 } } -void m68000_device::clr_w_ais_ipm() // 4250 fff8 +void m68000_mcu_device::clr_w_ais_ipm() // 4250 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -86364,7 +86364,7 @@ void m68000_device::clr_w_ais_ipm() // 4250 fff8 } } -void m68000_device::clr_w_aips_ipm() // 4258 fff8 +void m68000_mcu_device::clr_w_aips_ipm() // 4258 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -86466,7 +86466,7 @@ void m68000_device::clr_w_aips_ipm() // 4258 fff8 } } -void m68000_device::clr_w_pais_ipm() // 4260 fff8 +void m68000_mcu_device::clr_w_pais_ipm() // 4260 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -86570,7 +86570,7 @@ void m68000_device::clr_w_pais_ipm() // 4260 fff8 } } -void m68000_device::clr_w_das_ipm() // 4268 fff8 +void m68000_mcu_device::clr_w_das_ipm() // 4268 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -86693,7 +86693,7 @@ void m68000_device::clr_w_das_ipm() // 4268 fff8 } } -void m68000_device::clr_w_dais_ipm() // 4270 fff8 +void m68000_mcu_device::clr_w_dais_ipm() // 4270 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -86859,7 +86859,7 @@ adsw2: } } -void m68000_device::clr_w_adr16_ipm() // 4278 ffff +void m68000_mcu_device::clr_w_adr16_ipm() // 4278 ffff { switch(m_inst_substate) { case 0: @@ -86981,7 +86981,7 @@ void m68000_device::clr_w_adr16_ipm() // 4278 ffff } } -void m68000_device::clr_w_adr32_ipm() // 4279 ffff +void m68000_mcu_device::clr_w_adr32_ipm() // 4279 ffff { switch(m_inst_substate) { case 0: @@ -87128,7 +87128,7 @@ void m68000_device::clr_w_adr32_ipm() // 4279 ffff } } -void m68000_device::clr_l_ds_ipm() // 4280 fff8 +void m68000_mcu_device::clr_l_ds_ipm() // 4280 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -87183,7 +87183,7 @@ void m68000_device::clr_l_ds_ipm() // 4280 fff8 } } -void m68000_device::clr_l_ais_ipm() // 4290 fff8 +void m68000_mcu_device::clr_l_ais_ipm() // 4290 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -87330,7 +87330,7 @@ void m68000_device::clr_l_ais_ipm() // 4290 fff8 } } -void m68000_device::clr_l_aips_ipm() // 4298 fff8 +void m68000_mcu_device::clr_l_aips_ipm() // 4298 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -87481,7 +87481,7 @@ void m68000_device::clr_l_aips_ipm() // 4298 fff8 } } -void m68000_device::clr_l_pais_ipm() // 42a0 fff8 +void m68000_mcu_device::clr_l_pais_ipm() // 42a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -87633,7 +87633,7 @@ void m68000_device::clr_l_pais_ipm() // 42a0 fff8 } } -void m68000_device::clr_l_das_ipm() // 42a8 fff8 +void m68000_mcu_device::clr_l_das_ipm() // 42a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -87805,7 +87805,7 @@ void m68000_device::clr_l_das_ipm() // 42a8 fff8 } } -void m68000_device::clr_l_dais_ipm() // 42b0 fff8 +void m68000_mcu_device::clr_l_dais_ipm() // 42b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -88020,7 +88020,7 @@ adsl2: } } -void m68000_device::clr_l_adr16_ipm() // 42b8 ffff +void m68000_mcu_device::clr_l_adr16_ipm() // 42b8 ffff { switch(m_inst_substate) { case 0: @@ -88195,7 +88195,7 @@ void m68000_device::clr_l_adr16_ipm() // 42b8 ffff } } -void m68000_device::clr_l_adr32_ipm() // 42b9 ffff +void m68000_mcu_device::clr_l_adr32_ipm() // 42b9 ffff { switch(m_inst_substate) { case 0: @@ -88395,7 +88395,7 @@ void m68000_device::clr_l_adr32_ipm() // 42b9 ffff } } -void m68000_device::neg_b_ds_ipm() // 4400 fff8 +void m68000_mcu_device::neg_b_ds_ipm() // 4400 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -88443,7 +88443,7 @@ void m68000_device::neg_b_ds_ipm() // 4400 fff8 } } -void m68000_device::neg_b_ais_ipm() // 4410 fff8 +void m68000_mcu_device::neg_b_ais_ipm() // 4410 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -88528,7 +88528,7 @@ void m68000_device::neg_b_ais_ipm() // 4410 fff8 } } -void m68000_device::neg_b_aips_ipm() // 4418 fff8 +void m68000_mcu_device::neg_b_aips_ipm() // 4418 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -88617,7 +88617,7 @@ void m68000_device::neg_b_aips_ipm() // 4418 fff8 } } -void m68000_device::neg_b_pais_ipm() // 4420 fff8 +void m68000_mcu_device::neg_b_pais_ipm() // 4420 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -88708,7 +88708,7 @@ void m68000_device::neg_b_pais_ipm() // 4420 fff8 } } -void m68000_device::neg_b_das_ipm() // 4428 fff8 +void m68000_mcu_device::neg_b_das_ipm() // 4428 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -88818,7 +88818,7 @@ void m68000_device::neg_b_das_ipm() // 4428 fff8 } } -void m68000_device::neg_b_dais_ipm() // 4430 fff8 +void m68000_mcu_device::neg_b_dais_ipm() // 4430 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -88969,7 +88969,7 @@ adsw2: } } -void m68000_device::neg_b_adr16_ipm() // 4438 ffff +void m68000_mcu_device::neg_b_adr16_ipm() // 4438 ffff { switch(m_inst_substate) { case 0: @@ -89078,7 +89078,7 @@ void m68000_device::neg_b_adr16_ipm() // 4438 ffff } } -void m68000_device::neg_b_adr32_ipm() // 4439 ffff +void m68000_mcu_device::neg_b_adr32_ipm() // 4439 ffff { switch(m_inst_substate) { case 0: @@ -89211,7 +89211,7 @@ void m68000_device::neg_b_adr32_ipm() // 4439 ffff } } -void m68000_device::neg_w_ds_ipm() // 4440 fff8 +void m68000_mcu_device::neg_w_ds_ipm() // 4440 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -89259,7 +89259,7 @@ void m68000_device::neg_w_ds_ipm() // 4440 fff8 } } -void m68000_device::neg_w_ais_ipm() // 4450 fff8 +void m68000_mcu_device::neg_w_ais_ipm() // 4450 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -89354,7 +89354,7 @@ void m68000_device::neg_w_ais_ipm() // 4450 fff8 } } -void m68000_device::neg_w_aips_ipm() // 4458 fff8 +void m68000_mcu_device::neg_w_aips_ipm() // 4458 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -89453,7 +89453,7 @@ void m68000_device::neg_w_aips_ipm() // 4458 fff8 } } -void m68000_device::neg_w_pais_ipm() // 4460 fff8 +void m68000_mcu_device::neg_w_pais_ipm() // 4460 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -89554,7 +89554,7 @@ void m68000_device::neg_w_pais_ipm() // 4460 fff8 } } -void m68000_device::neg_w_das_ipm() // 4468 fff8 +void m68000_mcu_device::neg_w_das_ipm() // 4468 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -89674,7 +89674,7 @@ void m68000_device::neg_w_das_ipm() // 4468 fff8 } } -void m68000_device::neg_w_dais_ipm() // 4470 fff8 +void m68000_mcu_device::neg_w_dais_ipm() // 4470 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -89835,7 +89835,7 @@ adsw2: } } -void m68000_device::neg_w_adr16_ipm() // 4478 ffff +void m68000_mcu_device::neg_w_adr16_ipm() // 4478 ffff { switch(m_inst_substate) { case 0: @@ -89954,7 +89954,7 @@ void m68000_device::neg_w_adr16_ipm() // 4478 ffff } } -void m68000_device::neg_w_adr32_ipm() // 4479 ffff +void m68000_mcu_device::neg_w_adr32_ipm() // 4479 ffff { switch(m_inst_substate) { case 0: @@ -90097,7 +90097,7 @@ void m68000_device::neg_w_adr32_ipm() // 4479 ffff } } -void m68000_device::neg_l_ds_ipm() // 4480 fff8 +void m68000_mcu_device::neg_l_ds_ipm() // 4480 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -90151,7 +90151,7 @@ void m68000_device::neg_l_ds_ipm() // 4480 fff8 } } -void m68000_device::neg_l_ais_ipm() // 4490 fff8 +void m68000_mcu_device::neg_l_ais_ipm() // 4490 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -90296,7 +90296,7 @@ void m68000_device::neg_l_ais_ipm() // 4490 fff8 } } -void m68000_device::neg_l_aips_ipm() // 4498 fff8 +void m68000_mcu_device::neg_l_aips_ipm() // 4498 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -90444,7 +90444,7 @@ void m68000_device::neg_l_aips_ipm() // 4498 fff8 } } -void m68000_device::neg_l_pais_ipm() // 44a0 fff8 +void m68000_mcu_device::neg_l_pais_ipm() // 44a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -90593,7 +90593,7 @@ void m68000_device::neg_l_pais_ipm() // 44a0 fff8 } } -void m68000_device::neg_l_das_ipm() // 44a8 fff8 +void m68000_mcu_device::neg_l_das_ipm() // 44a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -90762,7 +90762,7 @@ void m68000_device::neg_l_das_ipm() // 44a8 fff8 } } -void m68000_device::neg_l_dais_ipm() // 44b0 fff8 +void m68000_mcu_device::neg_l_dais_ipm() // 44b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -90972,7 +90972,7 @@ adsl2: } } -void m68000_device::neg_l_adr16_ipm() // 44b8 ffff +void m68000_mcu_device::neg_l_adr16_ipm() // 44b8 ffff { switch(m_inst_substate) { case 0: @@ -91143,7 +91143,7 @@ void m68000_device::neg_l_adr16_ipm() // 44b8 ffff } } -void m68000_device::neg_l_adr32_ipm() // 44b9 ffff +void m68000_mcu_device::neg_l_adr32_ipm() // 44b9 ffff { switch(m_inst_substate) { case 0: @@ -91338,7 +91338,7 @@ void m68000_device::neg_l_adr32_ipm() // 44b9 ffff } } -void m68000_device::move_ds_ccr_ipm() // 44c0 fff8 +void m68000_mcu_device::move_ds_ccr_ipm() // 44c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -91416,7 +91416,7 @@ void m68000_device::move_ds_ccr_ipm() // 44c0 fff8 } } -void m68000_device::move_ais_ccr_ipm() // 44d0 fff8 +void m68000_mcu_device::move_ais_ccr_ipm() // 44d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -91521,7 +91521,7 @@ void m68000_device::move_ais_ccr_ipm() // 44d0 fff8 } } -void m68000_device::move_aips_ccr_ipm() // 44d8 fff8 +void m68000_mcu_device::move_aips_ccr_ipm() // 44d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -91630,7 +91630,7 @@ void m68000_device::move_aips_ccr_ipm() // 44d8 fff8 } } -void m68000_device::move_pais_ccr_ipm() // 44e0 fff8 +void m68000_mcu_device::move_pais_ccr_ipm() // 44e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -91741,7 +91741,7 @@ void m68000_device::move_pais_ccr_ipm() // 44e0 fff8 } } -void m68000_device::move_das_ccr_ipm() // 44e8 fff8 +void m68000_mcu_device::move_das_ccr_ipm() // 44e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -91871,7 +91871,7 @@ void m68000_device::move_das_ccr_ipm() // 44e8 fff8 } } -void m68000_device::move_dais_ccr_ipm() // 44f0 fff8 +void m68000_mcu_device::move_dais_ccr_ipm() // 44f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -92042,7 +92042,7 @@ adsw2: } } -void m68000_device::move_adr16_ccr_ipm() // 44f8 ffff +void m68000_mcu_device::move_adr16_ccr_ipm() // 44f8 ffff { switch(m_inst_substate) { case 0: @@ -92171,7 +92171,7 @@ void m68000_device::move_adr16_ccr_ipm() // 44f8 ffff } } -void m68000_device::move_adr32_ccr_ipm() // 44f9 ffff +void m68000_mcu_device::move_adr32_ccr_ipm() // 44f9 ffff { switch(m_inst_substate) { case 0: @@ -92324,7 +92324,7 @@ void m68000_device::move_adr32_ccr_ipm() // 44f9 ffff } } -void m68000_device::move_dpc_ccr_ipm() // 44fa ffff +void m68000_mcu_device::move_dpc_ccr_ipm() // 44fa ffff { switch(m_inst_substate) { case 0: @@ -92453,7 +92453,7 @@ void m68000_device::move_dpc_ccr_ipm() // 44fa ffff } } -void m68000_device::move_dpci_ccr_ipm() // 44fb ffff +void m68000_mcu_device::move_dpci_ccr_ipm() // 44fb ffff { switch(m_inst_substate) { case 0: @@ -92623,7 +92623,7 @@ adsw2: } } -void m68000_device::move_imm8_ccr_ipm() // 44fc ffff +void m68000_mcu_device::move_imm8_ccr_ipm() // 44fc ffff { switch(m_inst_substate) { case 0: @@ -92727,7 +92727,7 @@ void m68000_device::move_imm8_ccr_ipm() // 44fc ffff } } -void m68000_device::not_b_ds_ipm() // 4600 fff8 +void m68000_mcu_device::not_b_ds_ipm() // 4600 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -92775,7 +92775,7 @@ void m68000_device::not_b_ds_ipm() // 4600 fff8 } } -void m68000_device::not_b_ais_ipm() // 4610 fff8 +void m68000_mcu_device::not_b_ais_ipm() // 4610 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -92860,7 +92860,7 @@ void m68000_device::not_b_ais_ipm() // 4610 fff8 } } -void m68000_device::not_b_aips_ipm() // 4618 fff8 +void m68000_mcu_device::not_b_aips_ipm() // 4618 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -92949,7 +92949,7 @@ void m68000_device::not_b_aips_ipm() // 4618 fff8 } } -void m68000_device::not_b_pais_ipm() // 4620 fff8 +void m68000_mcu_device::not_b_pais_ipm() // 4620 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -93040,7 +93040,7 @@ void m68000_device::not_b_pais_ipm() // 4620 fff8 } } -void m68000_device::not_b_das_ipm() // 4628 fff8 +void m68000_mcu_device::not_b_das_ipm() // 4628 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -93150,7 +93150,7 @@ void m68000_device::not_b_das_ipm() // 4628 fff8 } } -void m68000_device::not_b_dais_ipm() // 4630 fff8 +void m68000_mcu_device::not_b_dais_ipm() // 4630 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -93301,7 +93301,7 @@ adsw2: } } -void m68000_device::not_b_adr16_ipm() // 4638 ffff +void m68000_mcu_device::not_b_adr16_ipm() // 4638 ffff { switch(m_inst_substate) { case 0: @@ -93410,7 +93410,7 @@ void m68000_device::not_b_adr16_ipm() // 4638 ffff } } -void m68000_device::not_b_adr32_ipm() // 4639 ffff +void m68000_mcu_device::not_b_adr32_ipm() // 4639 ffff { switch(m_inst_substate) { case 0: @@ -93543,7 +93543,7 @@ void m68000_device::not_b_adr32_ipm() // 4639 ffff } } -void m68000_device::not_w_ds_ipm() // 4640 fff8 +void m68000_mcu_device::not_w_ds_ipm() // 4640 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -93591,7 +93591,7 @@ void m68000_device::not_w_ds_ipm() // 4640 fff8 } } -void m68000_device::not_w_ais_ipm() // 4650 fff8 +void m68000_mcu_device::not_w_ais_ipm() // 4650 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -93686,7 +93686,7 @@ void m68000_device::not_w_ais_ipm() // 4650 fff8 } } -void m68000_device::not_w_aips_ipm() // 4658 fff8 +void m68000_mcu_device::not_w_aips_ipm() // 4658 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -93785,7 +93785,7 @@ void m68000_device::not_w_aips_ipm() // 4658 fff8 } } -void m68000_device::not_w_pais_ipm() // 4660 fff8 +void m68000_mcu_device::not_w_pais_ipm() // 4660 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -93886,7 +93886,7 @@ void m68000_device::not_w_pais_ipm() // 4660 fff8 } } -void m68000_device::not_w_das_ipm() // 4668 fff8 +void m68000_mcu_device::not_w_das_ipm() // 4668 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -94006,7 +94006,7 @@ void m68000_device::not_w_das_ipm() // 4668 fff8 } } -void m68000_device::not_w_dais_ipm() // 4670 fff8 +void m68000_mcu_device::not_w_dais_ipm() // 4670 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -94167,7 +94167,7 @@ adsw2: } } -void m68000_device::not_w_adr16_ipm() // 4678 ffff +void m68000_mcu_device::not_w_adr16_ipm() // 4678 ffff { switch(m_inst_substate) { case 0: @@ -94286,7 +94286,7 @@ void m68000_device::not_w_adr16_ipm() // 4678 ffff } } -void m68000_device::not_w_adr32_ipm() // 4679 ffff +void m68000_mcu_device::not_w_adr32_ipm() // 4679 ffff { switch(m_inst_substate) { case 0: @@ -94429,7 +94429,7 @@ void m68000_device::not_w_adr32_ipm() // 4679 ffff } } -void m68000_device::not_l_ds_ipm() // 4680 fff8 +void m68000_mcu_device::not_l_ds_ipm() // 4680 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -94483,7 +94483,7 @@ void m68000_device::not_l_ds_ipm() // 4680 fff8 } } -void m68000_device::not_l_ais_ipm() // 4690 fff8 +void m68000_mcu_device::not_l_ais_ipm() // 4690 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -94628,7 +94628,7 @@ void m68000_device::not_l_ais_ipm() // 4690 fff8 } } -void m68000_device::not_l_aips_ipm() // 4698 fff8 +void m68000_mcu_device::not_l_aips_ipm() // 4698 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -94776,7 +94776,7 @@ void m68000_device::not_l_aips_ipm() // 4698 fff8 } } -void m68000_device::not_l_pais_ipm() // 46a0 fff8 +void m68000_mcu_device::not_l_pais_ipm() // 46a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -94925,7 +94925,7 @@ void m68000_device::not_l_pais_ipm() // 46a0 fff8 } } -void m68000_device::not_l_das_ipm() // 46a8 fff8 +void m68000_mcu_device::not_l_das_ipm() // 46a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -95094,7 +95094,7 @@ void m68000_device::not_l_das_ipm() // 46a8 fff8 } } -void m68000_device::not_l_dais_ipm() // 46b0 fff8 +void m68000_mcu_device::not_l_dais_ipm() // 46b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -95304,7 +95304,7 @@ adsl2: } } -void m68000_device::not_l_adr16_ipm() // 46b8 ffff +void m68000_mcu_device::not_l_adr16_ipm() // 46b8 ffff { switch(m_inst_substate) { case 0: @@ -95475,7 +95475,7 @@ void m68000_device::not_l_adr16_ipm() // 46b8 ffff } } -void m68000_device::not_l_adr32_ipm() // 46b9 ffff +void m68000_mcu_device::not_l_adr32_ipm() // 46b9 ffff { switch(m_inst_substate) { case 0: @@ -95670,7 +95670,7 @@ void m68000_device::not_l_adr32_ipm() // 46b9 ffff } } -void m68000_device::move_ds_sr_ipm() // 46c0 fff8 +void m68000_mcu_device::move_ds_sr_ipm() // 46c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -95754,7 +95754,7 @@ void m68000_device::move_ds_sr_ipm() // 46c0 fff8 } } -void m68000_device::move_ais_sr_ipm() // 46d0 fff8 +void m68000_mcu_device::move_ais_sr_ipm() // 46d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -95865,7 +95865,7 @@ void m68000_device::move_ais_sr_ipm() // 46d0 fff8 } } -void m68000_device::move_aips_sr_ipm() // 46d8 fff8 +void m68000_mcu_device::move_aips_sr_ipm() // 46d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -95980,7 +95980,7 @@ void m68000_device::move_aips_sr_ipm() // 46d8 fff8 } } -void m68000_device::move_pais_sr_ipm() // 46e0 fff8 +void m68000_mcu_device::move_pais_sr_ipm() // 46e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -96097,7 +96097,7 @@ void m68000_device::move_pais_sr_ipm() // 46e0 fff8 } } -void m68000_device::move_das_sr_ipm() // 46e8 fff8 +void m68000_mcu_device::move_das_sr_ipm() // 46e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -96233,7 +96233,7 @@ void m68000_device::move_das_sr_ipm() // 46e8 fff8 } } -void m68000_device::move_dais_sr_ipm() // 46f0 fff8 +void m68000_mcu_device::move_dais_sr_ipm() // 46f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -96410,7 +96410,7 @@ adsw2: } } -void m68000_device::move_adr16_sr_ipm() // 46f8 ffff +void m68000_mcu_device::move_adr16_sr_ipm() // 46f8 ffff { switch(m_inst_substate) { case 0: @@ -96545,7 +96545,7 @@ void m68000_device::move_adr16_sr_ipm() // 46f8 ffff } } -void m68000_device::move_adr32_sr_ipm() // 46f9 ffff +void m68000_mcu_device::move_adr32_sr_ipm() // 46f9 ffff { switch(m_inst_substate) { case 0: @@ -96704,7 +96704,7 @@ void m68000_device::move_adr32_sr_ipm() // 46f9 ffff } } -void m68000_device::move_dpc_sr_ipm() // 46fa ffff +void m68000_mcu_device::move_dpc_sr_ipm() // 46fa ffff { switch(m_inst_substate) { case 0: @@ -96839,7 +96839,7 @@ void m68000_device::move_dpc_sr_ipm() // 46fa ffff } } -void m68000_device::move_dpci_sr_ipm() // 46fb ffff +void m68000_mcu_device::move_dpci_sr_ipm() // 46fb ffff { switch(m_inst_substate) { case 0: @@ -97015,7 +97015,7 @@ adsw2: } } -void m68000_device::move_i16u_sr_ipm() // 46fc ffff +void m68000_mcu_device::move_i16u_sr_ipm() // 46fc ffff { switch(m_inst_substate) { case 0: @@ -97125,7 +97125,7 @@ void m68000_device::move_i16u_sr_ipm() // 46fc ffff } } -void m68000_device::nbcd_b_ds_ipm() // 4800 fff8 +void m68000_mcu_device::nbcd_b_ds_ipm() // 4800 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -97177,7 +97177,7 @@ void m68000_device::nbcd_b_ds_ipm() // 4800 fff8 } } -void m68000_device::nbcd_b_ais_ipm() // 4810 fff8 +void m68000_mcu_device::nbcd_b_ais_ipm() // 4810 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -97264,7 +97264,7 @@ void m68000_device::nbcd_b_ais_ipm() // 4810 fff8 } } -void m68000_device::nbcd_b_aips_ipm() // 4818 fff8 +void m68000_mcu_device::nbcd_b_aips_ipm() // 4818 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -97355,7 +97355,7 @@ void m68000_device::nbcd_b_aips_ipm() // 4818 fff8 } } -void m68000_device::nbcd_b_pais_ipm() // 4820 fff8 +void m68000_mcu_device::nbcd_b_pais_ipm() // 4820 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -97448,7 +97448,7 @@ void m68000_device::nbcd_b_pais_ipm() // 4820 fff8 } } -void m68000_device::nbcd_b_das_ipm() // 4828 fff8 +void m68000_mcu_device::nbcd_b_das_ipm() // 4828 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -97560,7 +97560,7 @@ void m68000_device::nbcd_b_das_ipm() // 4828 fff8 } } -void m68000_device::nbcd_b_dais_ipm() // 4830 fff8 +void m68000_mcu_device::nbcd_b_dais_ipm() // 4830 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -97713,7 +97713,7 @@ adsw2: } } -void m68000_device::nbcd_b_adr16_ipm() // 4838 ffff +void m68000_mcu_device::nbcd_b_adr16_ipm() // 4838 ffff { switch(m_inst_substate) { case 0: @@ -97824,7 +97824,7 @@ void m68000_device::nbcd_b_adr16_ipm() // 4838 ffff } } -void m68000_device::nbcd_b_adr32_ipm() // 4839 ffff +void m68000_mcu_device::nbcd_b_adr32_ipm() // 4839 ffff { switch(m_inst_substate) { case 0: @@ -97959,7 +97959,7 @@ void m68000_device::nbcd_b_adr32_ipm() // 4839 ffff } } -void m68000_device::swap_ds_ipm() // 4840 fff8 +void m68000_mcu_device::swap_ds_ipm() // 4840 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -98011,7 +98011,7 @@ void m68000_device::swap_ds_ipm() // 4840 fff8 } } -void m68000_device::pea_ais_ipm() // 4850 fff8 +void m68000_mcu_device::pea_ais_ipm() // 4850 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -98103,7 +98103,7 @@ void m68000_device::pea_ais_ipm() // 4850 fff8 } } -void m68000_device::pea_das_ipm() // 4868 fff8 +void m68000_mcu_device::pea_das_ipm() // 4868 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -98224,7 +98224,7 @@ void m68000_device::pea_das_ipm() // 4868 fff8 } } -void m68000_device::pea_dais_ipm() // 4870 fff8 +void m68000_mcu_device::pea_dais_ipm() // 4870 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -98384,7 +98384,7 @@ peax4: } } -void m68000_device::pea_adr16_ipm() // 4878 ffff +void m68000_mcu_device::pea_adr16_ipm() // 4878 ffff { switch(m_inst_substate) { case 0: @@ -98503,7 +98503,7 @@ void m68000_device::pea_adr16_ipm() // 4878 ffff } } -void m68000_device::pea_adr32_ipm() // 4879 ffff +void m68000_mcu_device::pea_adr32_ipm() // 4879 ffff { switch(m_inst_substate) { case 0: @@ -98646,7 +98646,7 @@ void m68000_device::pea_adr32_ipm() // 4879 ffff } } -void m68000_device::pea_dpc_ipm() // 487a ffff +void m68000_mcu_device::pea_dpc_ipm() // 487a ffff { switch(m_inst_substate) { case 0: @@ -98766,7 +98766,7 @@ void m68000_device::pea_dpc_ipm() // 487a ffff } } -void m68000_device::pea_dpci_ipm() // 487b ffff +void m68000_mcu_device::pea_dpci_ipm() // 487b ffff { switch(m_inst_substate) { case 0: @@ -98925,7 +98925,7 @@ peax4: } } -void m68000_device::ext_w_ds_ipm() // 4880 fff8 +void m68000_mcu_device::ext_w_ds_ipm() // 4880 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -98973,7 +98973,7 @@ void m68000_device::ext_w_ds_ipm() // 4880 fff8 } } -void m68000_device::movem_w_list_ais_ipm() // 4890 fff8 +void m68000_mcu_device::movem_w_list_ais_ipm() // 4890 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -99080,7 +99080,7 @@ mmrw2: } } -void m68000_device::movem_w_listp_pais_ipm() // 48a0 fff8 +void m68000_mcu_device::movem_w_listp_pais_ipm() // 48a0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -99190,7 +99190,7 @@ push3: } } -void m68000_device::movem_w_list_das_ipm() // 48a8 fff8 +void m68000_mcu_device::movem_w_list_das_ipm() // 48a8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -99323,7 +99323,7 @@ mmrw2: } } -void m68000_device::movem_w_list_dais_ipm() // 48b0 fff8 +void m68000_mcu_device::movem_w_list_dais_ipm() // 48b0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -99497,7 +99497,7 @@ mmrw2: } } -void m68000_device::movem_w_list_adr16_ipm() // 48b8 ffff +void m68000_mcu_device::movem_w_list_adr16_ipm() // 48b8 ffff { switch(m_inst_substate) { case 0: @@ -99630,7 +99630,7 @@ mmrw2: } } -void m68000_device::movem_w_list_adr32_ipm() // 48b9 ffff +void m68000_mcu_device::movem_w_list_adr32_ipm() // 48b9 ffff { switch(m_inst_substate) { case 0: @@ -99787,7 +99787,7 @@ mmrw2: } } -void m68000_device::ext_l_ds_ipm() // 48c0 fff8 +void m68000_mcu_device::ext_l_ds_ipm() // 48c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -99835,7 +99835,7 @@ void m68000_device::ext_l_ds_ipm() // 48c0 fff8 } } -void m68000_device::movem_l_list_ais_ipm() // 48d0 fff8 +void m68000_mcu_device::movem_l_list_ais_ipm() // 48d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -99965,7 +99965,7 @@ mmrw2: } } -void m68000_device::movem_l_listp_pais_ipm() // 48e0 fff8 +void m68000_mcu_device::movem_l_listp_pais_ipm() // 48e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -100099,7 +100099,7 @@ push3: } } -void m68000_device::movem_l_list_das_ipm() // 48e8 fff8 +void m68000_mcu_device::movem_l_list_das_ipm() // 48e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -100255,7 +100255,7 @@ mmrw2: } } -void m68000_device::movem_l_list_dais_ipm() // 48f0 fff8 +void m68000_mcu_device::movem_l_list_dais_ipm() // 48f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -100452,7 +100452,7 @@ mmrw2: } } -void m68000_device::movem_l_list_adr16_ipm() // 48f8 ffff +void m68000_mcu_device::movem_l_list_adr16_ipm() // 48f8 ffff { switch(m_inst_substate) { case 0: @@ -100608,7 +100608,7 @@ mmrw2: } } -void m68000_device::movem_l_list_adr32_ipm() // 48f9 ffff +void m68000_mcu_device::movem_l_list_adr32_ipm() // 48f9 ffff { switch(m_inst_substate) { case 0: @@ -100788,7 +100788,7 @@ mmrw2: } } -void m68000_device::tst_b_ds_ipm() // 4a00 fff8 +void m68000_mcu_device::tst_b_ds_ipm() // 4a00 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -100836,7 +100836,7 @@ void m68000_device::tst_b_ds_ipm() // 4a00 fff8 } } -void m68000_device::tst_b_ais_ipm() // 4a10 fff8 +void m68000_mcu_device::tst_b_ais_ipm() // 4a10 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -100907,7 +100907,7 @@ void m68000_device::tst_b_ais_ipm() // 4a10 fff8 } } -void m68000_device::tst_b_aips_ipm() // 4a18 fff8 +void m68000_mcu_device::tst_b_aips_ipm() // 4a18 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -100983,7 +100983,7 @@ void m68000_device::tst_b_aips_ipm() // 4a18 fff8 } } -void m68000_device::tst_b_pais_ipm() // 4a20 fff8 +void m68000_mcu_device::tst_b_pais_ipm() // 4a20 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -101061,7 +101061,7 @@ void m68000_device::tst_b_pais_ipm() // 4a20 fff8 } } -void m68000_device::tst_b_das_ipm() // 4a28 fff8 +void m68000_mcu_device::tst_b_das_ipm() // 4a28 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -101158,7 +101158,7 @@ void m68000_device::tst_b_das_ipm() // 4a28 fff8 } } -void m68000_device::tst_b_dais_ipm() // 4a30 fff8 +void m68000_mcu_device::tst_b_dais_ipm() // 4a30 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -101298,7 +101298,7 @@ adsw2: } } -void m68000_device::tst_b_adr16_ipm() // 4a38 ffff +void m68000_mcu_device::tst_b_adr16_ipm() // 4a38 ffff { switch(m_inst_substate) { case 0: @@ -101394,7 +101394,7 @@ void m68000_device::tst_b_adr16_ipm() // 4a38 ffff } } -void m68000_device::tst_b_adr32_ipm() // 4a39 ffff +void m68000_mcu_device::tst_b_adr32_ipm() // 4a39 ffff { switch(m_inst_substate) { case 0: @@ -101515,7 +101515,7 @@ void m68000_device::tst_b_adr32_ipm() // 4a39 ffff } } -void m68000_device::tst_w_ds_ipm() // 4a40 fff8 +void m68000_mcu_device::tst_w_ds_ipm() // 4a40 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -101563,7 +101563,7 @@ void m68000_device::tst_w_ds_ipm() // 4a40 fff8 } } -void m68000_device::tst_w_ais_ipm() // 4a50 fff8 +void m68000_mcu_device::tst_w_ais_ipm() // 4a50 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -101638,7 +101638,7 @@ void m68000_device::tst_w_ais_ipm() // 4a50 fff8 } } -void m68000_device::tst_w_aips_ipm() // 4a58 fff8 +void m68000_mcu_device::tst_w_aips_ipm() // 4a58 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -101718,7 +101718,7 @@ void m68000_device::tst_w_aips_ipm() // 4a58 fff8 } } -void m68000_device::tst_w_pais_ipm() // 4a60 fff8 +void m68000_mcu_device::tst_w_pais_ipm() // 4a60 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -101800,7 +101800,7 @@ void m68000_device::tst_w_pais_ipm() // 4a60 fff8 } } -void m68000_device::tst_w_das_ipm() // 4a68 fff8 +void m68000_mcu_device::tst_w_das_ipm() // 4a68 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -101901,7 +101901,7 @@ void m68000_device::tst_w_das_ipm() // 4a68 fff8 } } -void m68000_device::tst_w_dais_ipm() // 4a70 fff8 +void m68000_mcu_device::tst_w_dais_ipm() // 4a70 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -102045,7 +102045,7 @@ adsw2: } } -void m68000_device::tst_w_adr16_ipm() // 4a78 ffff +void m68000_mcu_device::tst_w_adr16_ipm() // 4a78 ffff { switch(m_inst_substate) { case 0: @@ -102145,7 +102145,7 @@ void m68000_device::tst_w_adr16_ipm() // 4a78 ffff } } -void m68000_device::tst_w_adr32_ipm() // 4a79 ffff +void m68000_mcu_device::tst_w_adr32_ipm() // 4a79 ffff { switch(m_inst_substate) { case 0: @@ -102270,7 +102270,7 @@ void m68000_device::tst_w_adr32_ipm() // 4a79 ffff } } -void m68000_device::tst_l_ds_ipm() // 4a80 fff8 +void m68000_mcu_device::tst_l_ds_ipm() // 4a80 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -102320,7 +102320,7 @@ void m68000_device::tst_l_ds_ipm() // 4a80 fff8 } } -void m68000_device::tst_l_ais_ipm() // 4a90 fff8 +void m68000_mcu_device::tst_l_ais_ipm() // 4a90 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -102421,7 +102421,7 @@ void m68000_device::tst_l_ais_ipm() // 4a90 fff8 } } -void m68000_device::tst_l_aips_ipm() // 4a98 fff8 +void m68000_mcu_device::tst_l_aips_ipm() // 4a98 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -102526,7 +102526,7 @@ void m68000_device::tst_l_aips_ipm() // 4a98 fff8 } } -void m68000_device::tst_l_pais_ipm() // 4aa0 fff8 +void m68000_mcu_device::tst_l_pais_ipm() // 4aa0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -102632,7 +102632,7 @@ void m68000_device::tst_l_pais_ipm() // 4aa0 fff8 } } -void m68000_device::tst_l_das_ipm() // 4aa8 fff8 +void m68000_mcu_device::tst_l_das_ipm() // 4aa8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -102758,7 +102758,7 @@ void m68000_device::tst_l_das_ipm() // 4aa8 fff8 } } -void m68000_device::tst_l_dais_ipm() // 4ab0 fff8 +void m68000_mcu_device::tst_l_dais_ipm() // 4ab0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -102927,7 +102927,7 @@ adsl2: } } -void m68000_device::tst_l_adr16_ipm() // 4ab8 ffff +void m68000_mcu_device::tst_l_adr16_ipm() // 4ab8 ffff { switch(m_inst_substate) { case 0: @@ -103056,7 +103056,7 @@ void m68000_device::tst_l_adr16_ipm() // 4ab8 ffff } } -void m68000_device::tst_l_adr32_ipm() // 4ab9 ffff +void m68000_mcu_device::tst_l_adr32_ipm() // 4ab9 ffff { switch(m_inst_substate) { case 0: @@ -103210,7 +103210,7 @@ void m68000_device::tst_l_adr32_ipm() // 4ab9 ffff } } -void m68000_device::tas_ds_ipm() // 4ac0 fff8 +void m68000_mcu_device::tas_ds_ipm() // 4ac0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -103260,7 +103260,7 @@ void m68000_device::tas_ds_ipm() // 4ac0 fff8 } } -void m68000_device::tas_ais_ipm() // 4ad0 fff8 +void m68000_mcu_device::tas_ais_ipm() // 4ad0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -103355,7 +103355,7 @@ void m68000_device::tas_ais_ipm() // 4ad0 fff8 } } -void m68000_device::tas_aips_ipm() // 4ad8 fff8 +void m68000_mcu_device::tas_aips_ipm() // 4ad8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -103455,7 +103455,7 @@ void m68000_device::tas_aips_ipm() // 4ad8 fff8 } } -void m68000_device::tas_pais_ipm() // 4ae0 fff8 +void m68000_mcu_device::tas_pais_ipm() // 4ae0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -103557,7 +103557,7 @@ void m68000_device::tas_pais_ipm() // 4ae0 fff8 } } -void m68000_device::tas_das_ipm() // 4ae8 fff8 +void m68000_mcu_device::tas_das_ipm() // 4ae8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -103678,7 +103678,7 @@ void m68000_device::tas_das_ipm() // 4ae8 fff8 } } -void m68000_device::tas_dais_ipm() // 4af0 fff8 +void m68000_mcu_device::tas_dais_ipm() // 4af0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -103842,7 +103842,7 @@ adsw2: } } -void m68000_device::tas_adr16_ipm() // 4af8 ffff +void m68000_mcu_device::tas_adr16_ipm() // 4af8 ffff { switch(m_inst_substate) { case 0: @@ -103962,7 +103962,7 @@ void m68000_device::tas_adr16_ipm() // 4af8 ffff } } -void m68000_device::tas_adr32_ipm() // 4af9 ffff +void m68000_mcu_device::tas_adr32_ipm() // 4af9 ffff { switch(m_inst_substate) { case 0: @@ -104107,7 +104107,7 @@ void m68000_device::tas_adr32_ipm() // 4af9 ffff } } -void m68000_device::movem_w_ais_list_ipm() // 4c90 fff8 +void m68000_mcu_device::movem_w_ais_list_ipm() // 4c90 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -104239,7 +104239,7 @@ mmaw2: } } -void m68000_device::movem_w_aips_list_ipm() // 4c98 fff8 +void m68000_mcu_device::movem_w_aips_list_ipm() // 4c98 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -104372,7 +104372,7 @@ popm6: } } -void m68000_device::movem_w_das_list_ipm() // 4ca8 fff8 +void m68000_mcu_device::movem_w_das_list_ipm() // 4ca8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -104530,7 +104530,7 @@ mmaw2: } } -void m68000_device::movem_w_dais_list_ipm() // 4cb0 fff8 +void m68000_mcu_device::movem_w_dais_list_ipm() // 4cb0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -104728,7 +104728,7 @@ mmaw2: } } -void m68000_device::movem_w_adr16_list_ipm() // 4cb8 ffff +void m68000_mcu_device::movem_w_adr16_list_ipm() // 4cb8 ffff { switch(m_inst_substate) { case 0: @@ -104884,7 +104884,7 @@ mmaw2: } } -void m68000_device::movem_w_adr32_list_ipm() // 4cb9 ffff +void m68000_mcu_device::movem_w_adr32_list_ipm() // 4cb9 ffff { switch(m_inst_substate) { case 0: @@ -105067,7 +105067,7 @@ mmaw2: } } -void m68000_device::movem_w_dpc_list_ipm() // 4cba ffff +void m68000_mcu_device::movem_w_dpc_list_ipm() // 4cba ffff { switch(m_inst_substate) { case 0: @@ -105224,7 +105224,7 @@ mmaw2: } } -void m68000_device::movem_w_dpci_list_ipm() // 4cbb ffff +void m68000_mcu_device::movem_w_dpci_list_ipm() // 4cbb ffff { switch(m_inst_substate) { case 0: @@ -105421,7 +105421,7 @@ mmaw2: } } -void m68000_device::movem_l_ais_list_ipm() // 4cd0 fff8 +void m68000_mcu_device::movem_l_ais_list_ipm() // 4cd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -105577,7 +105577,7 @@ mmaw2: } } -void m68000_device::movem_l_aips_list_ipm() // 4cd8 fff8 +void m68000_mcu_device::movem_l_aips_list_ipm() // 4cd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -105734,7 +105734,7 @@ popm6: } } -void m68000_device::movem_l_das_list_ipm() // 4ce8 fff8 +void m68000_mcu_device::movem_l_das_list_ipm() // 4ce8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -105916,7 +105916,7 @@ mmaw2: } } -void m68000_device::movem_l_dais_list_ipm() // 4cf0 fff8 +void m68000_mcu_device::movem_l_dais_list_ipm() // 4cf0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -106138,7 +106138,7 @@ mmaw2: } } -void m68000_device::movem_l_adr16_list_ipm() // 4cf8 ffff +void m68000_mcu_device::movem_l_adr16_list_ipm() // 4cf8 ffff { switch(m_inst_substate) { case 0: @@ -106318,7 +106318,7 @@ mmaw2: } } -void m68000_device::movem_l_adr32_list_ipm() // 4cf9 ffff +void m68000_mcu_device::movem_l_adr32_list_ipm() // 4cf9 ffff { switch(m_inst_substate) { case 0: @@ -106525,7 +106525,7 @@ mmaw2: } } -void m68000_device::movem_l_dpc_list_ipm() // 4cfa ffff +void m68000_mcu_device::movem_l_dpc_list_ipm() // 4cfa ffff { switch(m_inst_substate) { case 0: @@ -106706,7 +106706,7 @@ mmaw2: } } -void m68000_device::movem_l_dpci_list_ipm() // 4cfb ffff +void m68000_mcu_device::movem_l_dpci_list_ipm() // 4cfb ffff { switch(m_inst_substate) { case 0: @@ -106927,7 +106927,7 @@ mmaw2: } } -void m68000_device::trap_imm4_ipm() // 4e40 fff0 +void m68000_mcu_device::trap_imm4_ipm() // 4e40 fff0 { switch(m_inst_substate) { case 0: @@ -107133,7 +107133,7 @@ void m68000_device::trap_imm4_ipm() // 4e40 fff0 } } -void m68000_device::link_as_imm16_ipm() // 4e50 fff8 +void m68000_mcu_device::link_as_imm16_ipm() // 4e50 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -107251,7 +107251,7 @@ void m68000_device::link_as_imm16_ipm() // 4e50 fff8 } } -void m68000_device::unlk_as_ipm() // 4e58 fff8 +void m68000_mcu_device::unlk_as_ipm() // 4e58 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -107345,7 +107345,7 @@ void m68000_device::unlk_as_ipm() // 4e58 fff8 } } -void m68000_device::move_as_usp_ipm() // 4e60 fff8 +void m68000_mcu_device::move_as_usp_ipm() // 4e60 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -107396,7 +107396,7 @@ void m68000_device::move_as_usp_ipm() // 4e60 fff8 } } -void m68000_device::move_usp_as_ipm() // 4e68 fff8 +void m68000_mcu_device::move_usp_as_ipm() // 4e68 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -107447,7 +107447,7 @@ void m68000_device::move_usp_as_ipm() // 4e68 fff8 } } -void m68000_device::reset_ipm() // 4e70 ffff +void m68000_mcu_device::reset_ipm() // 4e70 ffff { switch(m_inst_substate) { case 0: @@ -107519,7 +107519,7 @@ rset5: } } -void m68000_device::nop_ipm() // 4e71 ffff +void m68000_mcu_device::nop_ipm() // 4e71 ffff { switch(m_inst_substate) { case 0: @@ -107561,7 +107561,7 @@ void m68000_device::nop_ipm() // 4e71 ffff } } -void m68000_device::stop_i16u_ipm() // 4e72 ffff +void m68000_mcu_device::stop_i16u_ipm() // 4e72 ffff { switch(m_inst_substate) { case 0: @@ -107594,7 +107594,7 @@ void m68000_device::stop_i16u_ipm() // 4e72 ffff } } -void m68000_device::rte_ipm() // 4e73 ffff +void m68000_mcu_device::rte_ipm() // 4e73 ffff { switch(m_inst_substate) { case 0: @@ -107745,7 +107745,7 @@ void m68000_device::rte_ipm() // 4e73 ffff } } -void m68000_device::rts_ipm() // 4e75 ffff +void m68000_mcu_device::rts_ipm() // 4e75 ffff { switch(m_inst_substate) { case 0: @@ -107860,7 +107860,7 @@ void m68000_device::rts_ipm() // 4e75 ffff } } -void m68000_device::trapv_ipm() // 4e76 ffff +void m68000_mcu_device::trapv_ipm() // 4e76 ffff { switch(m_inst_substate) { case 0: @@ -108125,7 +108125,7 @@ trpv3: } } -void m68000_device::rtr_ipm() // 4e77 ffff +void m68000_mcu_device::rtr_ipm() // 4e77 ffff { switch(m_inst_substate) { case 0: @@ -108269,7 +108269,7 @@ void m68000_device::rtr_ipm() // 4e77 ffff } } -void m68000_device::jsr_ais_ipm() // 4e90 fff8 +void m68000_mcu_device::jsr_ais_ipm() // 4e90 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -108384,7 +108384,7 @@ void m68000_device::jsr_ais_ipm() // 4e90 fff8 } } -void m68000_device::jsr_das_ipm() // 4ea8 fff8 +void m68000_mcu_device::jsr_das_ipm() // 4ea8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -108505,7 +108505,7 @@ void m68000_device::jsr_das_ipm() // 4ea8 fff8 } } -void m68000_device::jsr_dais_ipm() // 4eb0 fff8 +void m68000_mcu_device::jsr_dais_ipm() // 4eb0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -108646,7 +108646,7 @@ jsrd2: } } -void m68000_device::jsr_adr16_ipm() // 4eb8 ffff +void m68000_mcu_device::jsr_adr16_ipm() // 4eb8 ffff { switch(m_inst_substate) { case 0: @@ -108763,7 +108763,7 @@ void m68000_device::jsr_adr16_ipm() // 4eb8 ffff } } -void m68000_device::jsr_adr32_ipm() // 4eb9 ffff +void m68000_mcu_device::jsr_adr32_ipm() // 4eb9 ffff { switch(m_inst_substate) { case 0: @@ -108902,7 +108902,7 @@ void m68000_device::jsr_adr32_ipm() // 4eb9 ffff } } -void m68000_device::jsr_dpc_ipm() // 4eba ffff +void m68000_mcu_device::jsr_dpc_ipm() // 4eba ffff { switch(m_inst_substate) { case 0: @@ -109022,7 +109022,7 @@ void m68000_device::jsr_dpc_ipm() // 4eba ffff } } -void m68000_device::jsr_dpci_ipm() // 4ebb ffff +void m68000_mcu_device::jsr_dpci_ipm() // 4ebb ffff { switch(m_inst_substate) { case 0: @@ -109162,7 +109162,7 @@ jsrd2: } } -void m68000_device::jmp_ais_ipm() // 4ed0 fff8 +void m68000_mcu_device::jmp_ais_ipm() // 4ed0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -109228,7 +109228,7 @@ void m68000_device::jmp_ais_ipm() // 4ed0 fff8 } } -void m68000_device::jmp_das_ipm() // 4ee8 fff8 +void m68000_mcu_device::jmp_das_ipm() // 4ee8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -109298,7 +109298,7 @@ void m68000_device::jmp_das_ipm() // 4ee8 fff8 } } -void m68000_device::jmp_dais_ipm() // 4ef0 fff8 +void m68000_mcu_device::jmp_dais_ipm() // 4ef0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -109388,7 +109388,7 @@ bbci3: } } -void m68000_device::jmp_adr16_ipm() // 4ef8 ffff +void m68000_mcu_device::jmp_adr16_ipm() // 4ef8 ffff { switch(m_inst_substate) { case 0: @@ -109456,7 +109456,7 @@ void m68000_device::jmp_adr16_ipm() // 4ef8 ffff } } -void m68000_device::jmp_adr32_ipm() // 4ef9 ffff +void m68000_mcu_device::jmp_adr32_ipm() // 4ef9 ffff { switch(m_inst_substate) { case 0: @@ -109545,7 +109545,7 @@ void m68000_device::jmp_adr32_ipm() // 4ef9 ffff } } -void m68000_device::jmp_dpc_ipm() // 4efa ffff +void m68000_mcu_device::jmp_dpc_ipm() // 4efa ffff { switch(m_inst_substate) { case 0: @@ -109614,7 +109614,7 @@ void m68000_device::jmp_dpc_ipm() // 4efa ffff } } -void m68000_device::jmp_dpci_ipm() // 4efb ffff +void m68000_mcu_device::jmp_dpci_ipm() // 4efb ffff { switch(m_inst_substate) { case 0: @@ -109703,7 +109703,7 @@ bbci3: } } -void m68000_device::addq_b_imm3_ds_ipm() // 5000 f1f8 +void m68000_mcu_device::addq_b_imm3_ds_ipm() // 5000 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -109751,7 +109751,7 @@ void m68000_device::addq_b_imm3_ds_ipm() // 5000 f1f8 } } -void m68000_device::addq_b_imm3_ais_ipm() // 5010 f1f8 +void m68000_mcu_device::addq_b_imm3_ais_ipm() // 5010 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -109837,7 +109837,7 @@ void m68000_device::addq_b_imm3_ais_ipm() // 5010 f1f8 } } -void m68000_device::addq_b_imm3_aips_ipm() // 5018 f1f8 +void m68000_mcu_device::addq_b_imm3_aips_ipm() // 5018 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -109927,7 +109927,7 @@ void m68000_device::addq_b_imm3_aips_ipm() // 5018 f1f8 } } -void m68000_device::addq_b_imm3_pais_ipm() // 5020 f1f8 +void m68000_mcu_device::addq_b_imm3_pais_ipm() // 5020 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -110019,7 +110019,7 @@ void m68000_device::addq_b_imm3_pais_ipm() // 5020 f1f8 } } -void m68000_device::addq_b_imm3_das_ipm() // 5028 f1f8 +void m68000_mcu_device::addq_b_imm3_das_ipm() // 5028 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -110130,7 +110130,7 @@ void m68000_device::addq_b_imm3_das_ipm() // 5028 f1f8 } } -void m68000_device::addq_b_imm3_dais_ipm() // 5030 f1f8 +void m68000_mcu_device::addq_b_imm3_dais_ipm() // 5030 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -110282,7 +110282,7 @@ adsw2: } } -void m68000_device::addq_b_imm3_adr16_ipm() // 5038 f1ff +void m68000_mcu_device::addq_b_imm3_adr16_ipm() // 5038 f1ff { switch(m_inst_substate) { case 0: @@ -110392,7 +110392,7 @@ void m68000_device::addq_b_imm3_adr16_ipm() // 5038 f1ff } } -void m68000_device::addq_b_imm3_adr32_ipm() // 5039 f1ff +void m68000_mcu_device::addq_b_imm3_adr32_ipm() // 5039 f1ff { switch(m_inst_substate) { case 0: @@ -110526,7 +110526,7 @@ void m68000_device::addq_b_imm3_adr32_ipm() // 5039 f1ff } } -void m68000_device::addq_w_imm3_ds_ipm() // 5040 f1f8 +void m68000_mcu_device::addq_w_imm3_ds_ipm() // 5040 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -110574,7 +110574,7 @@ void m68000_device::addq_w_imm3_ds_ipm() // 5040 f1f8 } } -void m68000_device::addq_w_imm3_as_ipm() // 5048 f1f8 +void m68000_mcu_device::addq_w_imm3_as_ipm() // 5048 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -110628,7 +110628,7 @@ void m68000_device::addq_w_imm3_as_ipm() // 5048 f1f8 } } -void m68000_device::addq_w_imm3_ais_ipm() // 5050 f1f8 +void m68000_mcu_device::addq_w_imm3_ais_ipm() // 5050 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -110724,7 +110724,7 @@ void m68000_device::addq_w_imm3_ais_ipm() // 5050 f1f8 } } -void m68000_device::addq_w_imm3_aips_ipm() // 5058 f1f8 +void m68000_mcu_device::addq_w_imm3_aips_ipm() // 5058 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -110824,7 +110824,7 @@ void m68000_device::addq_w_imm3_aips_ipm() // 5058 f1f8 } } -void m68000_device::addq_w_imm3_pais_ipm() // 5060 f1f8 +void m68000_mcu_device::addq_w_imm3_pais_ipm() // 5060 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -110926,7 +110926,7 @@ void m68000_device::addq_w_imm3_pais_ipm() // 5060 f1f8 } } -void m68000_device::addq_w_imm3_das_ipm() // 5068 f1f8 +void m68000_mcu_device::addq_w_imm3_das_ipm() // 5068 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -111047,7 +111047,7 @@ void m68000_device::addq_w_imm3_das_ipm() // 5068 f1f8 } } -void m68000_device::addq_w_imm3_dais_ipm() // 5070 f1f8 +void m68000_mcu_device::addq_w_imm3_dais_ipm() // 5070 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -111209,7 +111209,7 @@ adsw2: } } -void m68000_device::addq_w_imm3_adr16_ipm() // 5078 f1ff +void m68000_mcu_device::addq_w_imm3_adr16_ipm() // 5078 f1ff { switch(m_inst_substate) { case 0: @@ -111329,7 +111329,7 @@ void m68000_device::addq_w_imm3_adr16_ipm() // 5078 f1ff } } -void m68000_device::addq_w_imm3_adr32_ipm() // 5079 f1ff +void m68000_mcu_device::addq_w_imm3_adr32_ipm() // 5079 f1ff { switch(m_inst_substate) { case 0: @@ -111473,7 +111473,7 @@ void m68000_device::addq_w_imm3_adr32_ipm() // 5079 f1ff } } -void m68000_device::addq_l_imm3_ds_ipm() // 5080 f1f8 +void m68000_mcu_device::addq_l_imm3_ds_ipm() // 5080 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -111529,7 +111529,7 @@ void m68000_device::addq_l_imm3_ds_ipm() // 5080 f1f8 } } -void m68000_device::addq_l_imm3_as_ipm() // 5088 f1f8 +void m68000_mcu_device::addq_l_imm3_as_ipm() // 5088 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -111583,7 +111583,7 @@ void m68000_device::addq_l_imm3_as_ipm() // 5088 f1f8 } } -void m68000_device::addq_l_imm3_ais_ipm() // 5090 f1f8 +void m68000_mcu_device::addq_l_imm3_ais_ipm() // 5090 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -111729,7 +111729,7 @@ void m68000_device::addq_l_imm3_ais_ipm() // 5090 f1f8 } } -void m68000_device::addq_l_imm3_aips_ipm() // 5098 f1f8 +void m68000_mcu_device::addq_l_imm3_aips_ipm() // 5098 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -111878,7 +111878,7 @@ void m68000_device::addq_l_imm3_aips_ipm() // 5098 f1f8 } } -void m68000_device::addq_l_imm3_pais_ipm() // 50a0 f1f8 +void m68000_mcu_device::addq_l_imm3_pais_ipm() // 50a0 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -112028,7 +112028,7 @@ void m68000_device::addq_l_imm3_pais_ipm() // 50a0 f1f8 } } -void m68000_device::addq_l_imm3_das_ipm() // 50a8 f1f8 +void m68000_mcu_device::addq_l_imm3_das_ipm() // 50a8 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -112198,7 +112198,7 @@ void m68000_device::addq_l_imm3_das_ipm() // 50a8 f1f8 } } -void m68000_device::addq_l_imm3_dais_ipm() // 50b0 f1f8 +void m68000_mcu_device::addq_l_imm3_dais_ipm() // 50b0 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -112409,7 +112409,7 @@ adsl2: } } -void m68000_device::addq_l_imm3_adr16_ipm() // 50b8 f1ff +void m68000_mcu_device::addq_l_imm3_adr16_ipm() // 50b8 f1ff { switch(m_inst_substate) { case 0: @@ -112581,7 +112581,7 @@ void m68000_device::addq_l_imm3_adr16_ipm() // 50b8 f1ff } } -void m68000_device::addq_l_imm3_adr32_ipm() // 50b9 f1ff +void m68000_mcu_device::addq_l_imm3_adr32_ipm() // 50b9 f1ff { switch(m_inst_substate) { case 0: @@ -112777,7 +112777,7 @@ void m68000_device::addq_l_imm3_adr32_ipm() // 50b9 f1ff } } -void m68000_device::st_ds_ipm() // 50c0 fff8 +void m68000_mcu_device::st_ds_ipm() // 50c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -112869,7 +112869,7 @@ sccr2: } } -void m68000_device::dbt_ds_rel16_ipm() // 50c8 fff8 +void m68000_mcu_device::dbt_ds_rel16_ipm() // 50c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -113068,7 +113068,7 @@ dbcc5: } } -void m68000_device::st_ais_ipm() // 50d0 fff8 +void m68000_mcu_device::st_ais_ipm() // 50d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -113193,7 +113193,7 @@ morw2: } } -void m68000_device::st_aips_ipm() // 50d8 fff8 +void m68000_mcu_device::st_aips_ipm() // 50d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -113323,7 +113323,7 @@ morw2: } } -void m68000_device::st_pais_ipm() // 50e0 fff8 +void m68000_mcu_device::st_pais_ipm() // 50e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -113455,7 +113455,7 @@ morw2: } } -void m68000_device::st_das_ipm() // 50e8 fff8 +void m68000_mcu_device::st_das_ipm() // 50e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -113606,7 +113606,7 @@ morw2: } } -void m68000_device::st_dais_ipm() // 50f0 fff8 +void m68000_mcu_device::st_dais_ipm() // 50f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -113800,7 +113800,7 @@ morw2: } } -void m68000_device::st_adr16_ipm() // 50f8 ffff +void m68000_mcu_device::st_adr16_ipm() // 50f8 ffff { switch(m_inst_substate) { case 0: @@ -113950,7 +113950,7 @@ morw2: } } -void m68000_device::st_adr32_ipm() // 50f9 ffff +void m68000_mcu_device::st_adr32_ipm() // 50f9 ffff { switch(m_inst_substate) { case 0: @@ -114125,7 +114125,7 @@ morw2: } } -void m68000_device::subq_b_imm3_ds_ipm() // 5100 f1f8 +void m68000_mcu_device::subq_b_imm3_ds_ipm() // 5100 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -114173,7 +114173,7 @@ void m68000_device::subq_b_imm3_ds_ipm() // 5100 f1f8 } } -void m68000_device::subq_b_imm3_ais_ipm() // 5110 f1f8 +void m68000_mcu_device::subq_b_imm3_ais_ipm() // 5110 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -114259,7 +114259,7 @@ void m68000_device::subq_b_imm3_ais_ipm() // 5110 f1f8 } } -void m68000_device::subq_b_imm3_aips_ipm() // 5118 f1f8 +void m68000_mcu_device::subq_b_imm3_aips_ipm() // 5118 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -114349,7 +114349,7 @@ void m68000_device::subq_b_imm3_aips_ipm() // 5118 f1f8 } } -void m68000_device::subq_b_imm3_pais_ipm() // 5120 f1f8 +void m68000_mcu_device::subq_b_imm3_pais_ipm() // 5120 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -114441,7 +114441,7 @@ void m68000_device::subq_b_imm3_pais_ipm() // 5120 f1f8 } } -void m68000_device::subq_b_imm3_das_ipm() // 5128 f1f8 +void m68000_mcu_device::subq_b_imm3_das_ipm() // 5128 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -114552,7 +114552,7 @@ void m68000_device::subq_b_imm3_das_ipm() // 5128 f1f8 } } -void m68000_device::subq_b_imm3_dais_ipm() // 5130 f1f8 +void m68000_mcu_device::subq_b_imm3_dais_ipm() // 5130 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -114704,7 +114704,7 @@ adsw2: } } -void m68000_device::subq_b_imm3_adr16_ipm() // 5138 f1ff +void m68000_mcu_device::subq_b_imm3_adr16_ipm() // 5138 f1ff { switch(m_inst_substate) { case 0: @@ -114814,7 +114814,7 @@ void m68000_device::subq_b_imm3_adr16_ipm() // 5138 f1ff } } -void m68000_device::subq_b_imm3_adr32_ipm() // 5139 f1ff +void m68000_mcu_device::subq_b_imm3_adr32_ipm() // 5139 f1ff { switch(m_inst_substate) { case 0: @@ -114948,7 +114948,7 @@ void m68000_device::subq_b_imm3_adr32_ipm() // 5139 f1ff } } -void m68000_device::subq_w_imm3_ds_ipm() // 5140 f1f8 +void m68000_mcu_device::subq_w_imm3_ds_ipm() // 5140 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -114996,7 +114996,7 @@ void m68000_device::subq_w_imm3_ds_ipm() // 5140 f1f8 } } -void m68000_device::subq_w_imm3_as_ipm() // 5148 f1f8 +void m68000_mcu_device::subq_w_imm3_as_ipm() // 5148 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -115050,7 +115050,7 @@ void m68000_device::subq_w_imm3_as_ipm() // 5148 f1f8 } } -void m68000_device::subq_w_imm3_ais_ipm() // 5150 f1f8 +void m68000_mcu_device::subq_w_imm3_ais_ipm() // 5150 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -115146,7 +115146,7 @@ void m68000_device::subq_w_imm3_ais_ipm() // 5150 f1f8 } } -void m68000_device::subq_w_imm3_aips_ipm() // 5158 f1f8 +void m68000_mcu_device::subq_w_imm3_aips_ipm() // 5158 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -115246,7 +115246,7 @@ void m68000_device::subq_w_imm3_aips_ipm() // 5158 f1f8 } } -void m68000_device::subq_w_imm3_pais_ipm() // 5160 f1f8 +void m68000_mcu_device::subq_w_imm3_pais_ipm() // 5160 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -115348,7 +115348,7 @@ void m68000_device::subq_w_imm3_pais_ipm() // 5160 f1f8 } } -void m68000_device::subq_w_imm3_das_ipm() // 5168 f1f8 +void m68000_mcu_device::subq_w_imm3_das_ipm() // 5168 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -115469,7 +115469,7 @@ void m68000_device::subq_w_imm3_das_ipm() // 5168 f1f8 } } -void m68000_device::subq_w_imm3_dais_ipm() // 5170 f1f8 +void m68000_mcu_device::subq_w_imm3_dais_ipm() // 5170 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -115631,7 +115631,7 @@ adsw2: } } -void m68000_device::subq_w_imm3_adr16_ipm() // 5178 f1ff +void m68000_mcu_device::subq_w_imm3_adr16_ipm() // 5178 f1ff { switch(m_inst_substate) { case 0: @@ -115751,7 +115751,7 @@ void m68000_device::subq_w_imm3_adr16_ipm() // 5178 f1ff } } -void m68000_device::subq_w_imm3_adr32_ipm() // 5179 f1ff +void m68000_mcu_device::subq_w_imm3_adr32_ipm() // 5179 f1ff { switch(m_inst_substate) { case 0: @@ -115895,7 +115895,7 @@ void m68000_device::subq_w_imm3_adr32_ipm() // 5179 f1ff } } -void m68000_device::subq_l_imm3_ds_ipm() // 5180 f1f8 +void m68000_mcu_device::subq_l_imm3_ds_ipm() // 5180 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -115951,7 +115951,7 @@ void m68000_device::subq_l_imm3_ds_ipm() // 5180 f1f8 } } -void m68000_device::subq_l_imm3_as_ipm() // 5188 f1f8 +void m68000_mcu_device::subq_l_imm3_as_ipm() // 5188 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -116005,7 +116005,7 @@ void m68000_device::subq_l_imm3_as_ipm() // 5188 f1f8 } } -void m68000_device::subq_l_imm3_ais_ipm() // 5190 f1f8 +void m68000_mcu_device::subq_l_imm3_ais_ipm() // 5190 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -116151,7 +116151,7 @@ void m68000_device::subq_l_imm3_ais_ipm() // 5190 f1f8 } } -void m68000_device::subq_l_imm3_aips_ipm() // 5198 f1f8 +void m68000_mcu_device::subq_l_imm3_aips_ipm() // 5198 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -116300,7 +116300,7 @@ void m68000_device::subq_l_imm3_aips_ipm() // 5198 f1f8 } } -void m68000_device::subq_l_imm3_pais_ipm() // 51a0 f1f8 +void m68000_mcu_device::subq_l_imm3_pais_ipm() // 51a0 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -116450,7 +116450,7 @@ void m68000_device::subq_l_imm3_pais_ipm() // 51a0 f1f8 } } -void m68000_device::subq_l_imm3_das_ipm() // 51a8 f1f8 +void m68000_mcu_device::subq_l_imm3_das_ipm() // 51a8 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -116620,7 +116620,7 @@ void m68000_device::subq_l_imm3_das_ipm() // 51a8 f1f8 } } -void m68000_device::subq_l_imm3_dais_ipm() // 51b0 f1f8 +void m68000_mcu_device::subq_l_imm3_dais_ipm() // 51b0 f1f8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -116831,7 +116831,7 @@ adsl2: } } -void m68000_device::subq_l_imm3_adr16_ipm() // 51b8 f1ff +void m68000_mcu_device::subq_l_imm3_adr16_ipm() // 51b8 f1ff { switch(m_inst_substate) { case 0: @@ -117003,7 +117003,7 @@ void m68000_device::subq_l_imm3_adr16_ipm() // 51b8 f1ff } } -void m68000_device::subq_l_imm3_adr32_ipm() // 51b9 f1ff +void m68000_mcu_device::subq_l_imm3_adr32_ipm() // 51b9 f1ff { switch(m_inst_substate) { case 0: @@ -117199,7 +117199,7 @@ void m68000_device::subq_l_imm3_adr32_ipm() // 51b9 f1ff } } -void m68000_device::sf_ds_ipm() // 51c0 fff8 +void m68000_mcu_device::sf_ds_ipm() // 51c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -117291,7 +117291,7 @@ sccr2: } } -void m68000_device::dbra_ds_rel16_ipm() // 51c8 fff8 +void m68000_mcu_device::dbra_ds_rel16_ipm() // 51c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -117490,7 +117490,7 @@ dbcc5: } } -void m68000_device::sf_ais_ipm() // 51d0 fff8 +void m68000_mcu_device::sf_ais_ipm() // 51d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -117615,7 +117615,7 @@ morw2: } } -void m68000_device::sf_aips_ipm() // 51d8 fff8 +void m68000_mcu_device::sf_aips_ipm() // 51d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -117745,7 +117745,7 @@ morw2: } } -void m68000_device::sf_pais_ipm() // 51e0 fff8 +void m68000_mcu_device::sf_pais_ipm() // 51e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -117877,7 +117877,7 @@ morw2: } } -void m68000_device::sf_das_ipm() // 51e8 fff8 +void m68000_mcu_device::sf_das_ipm() // 51e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -118028,7 +118028,7 @@ morw2: } } -void m68000_device::sf_dais_ipm() // 51f0 fff8 +void m68000_mcu_device::sf_dais_ipm() // 51f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -118222,7 +118222,7 @@ morw2: } } -void m68000_device::sf_adr16_ipm() // 51f8 ffff +void m68000_mcu_device::sf_adr16_ipm() // 51f8 ffff { switch(m_inst_substate) { case 0: @@ -118372,7 +118372,7 @@ morw2: } } -void m68000_device::sf_adr32_ipm() // 51f9 ffff +void m68000_mcu_device::sf_adr32_ipm() // 51f9 ffff { switch(m_inst_substate) { case 0: @@ -118547,7 +118547,7 @@ morw2: } } -void m68000_device::shi_ds_ipm() // 52c0 fff8 +void m68000_mcu_device::shi_ds_ipm() // 52c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -118639,7 +118639,7 @@ sccr2: } } -void m68000_device::dbhi_ds_rel16_ipm() // 52c8 fff8 +void m68000_mcu_device::dbhi_ds_rel16_ipm() // 52c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -118838,7 +118838,7 @@ dbcc5: } } -void m68000_device::shi_ais_ipm() // 52d0 fff8 +void m68000_mcu_device::shi_ais_ipm() // 52d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -118963,7 +118963,7 @@ morw2: } } -void m68000_device::shi_aips_ipm() // 52d8 fff8 +void m68000_mcu_device::shi_aips_ipm() // 52d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -119093,7 +119093,7 @@ morw2: } } -void m68000_device::shi_pais_ipm() // 52e0 fff8 +void m68000_mcu_device::shi_pais_ipm() // 52e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -119225,7 +119225,7 @@ morw2: } } -void m68000_device::shi_das_ipm() // 52e8 fff8 +void m68000_mcu_device::shi_das_ipm() // 52e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -119376,7 +119376,7 @@ morw2: } } -void m68000_device::shi_dais_ipm() // 52f0 fff8 +void m68000_mcu_device::shi_dais_ipm() // 52f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -119570,7 +119570,7 @@ morw2: } } -void m68000_device::shi_adr16_ipm() // 52f8 ffff +void m68000_mcu_device::shi_adr16_ipm() // 52f8 ffff { switch(m_inst_substate) { case 0: @@ -119720,7 +119720,7 @@ morw2: } } -void m68000_device::shi_adr32_ipm() // 52f9 ffff +void m68000_mcu_device::shi_adr32_ipm() // 52f9 ffff { switch(m_inst_substate) { case 0: @@ -119895,7 +119895,7 @@ morw2: } } -void m68000_device::sls_ds_ipm() // 53c0 fff8 +void m68000_mcu_device::sls_ds_ipm() // 53c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -119987,7 +119987,7 @@ sccr2: } } -void m68000_device::dbls_ds_rel16_ipm() // 53c8 fff8 +void m68000_mcu_device::dbls_ds_rel16_ipm() // 53c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -120186,7 +120186,7 @@ dbcc5: } } -void m68000_device::sls_ais_ipm() // 53d0 fff8 +void m68000_mcu_device::sls_ais_ipm() // 53d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -120311,7 +120311,7 @@ morw2: } } -void m68000_device::sls_aips_ipm() // 53d8 fff8 +void m68000_mcu_device::sls_aips_ipm() // 53d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -120441,7 +120441,7 @@ morw2: } } -void m68000_device::sls_pais_ipm() // 53e0 fff8 +void m68000_mcu_device::sls_pais_ipm() // 53e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -120573,7 +120573,7 @@ morw2: } } -void m68000_device::sls_das_ipm() // 53e8 fff8 +void m68000_mcu_device::sls_das_ipm() // 53e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -120724,7 +120724,7 @@ morw2: } } -void m68000_device::sls_dais_ipm() // 53f0 fff8 +void m68000_mcu_device::sls_dais_ipm() // 53f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -120918,7 +120918,7 @@ morw2: } } -void m68000_device::sls_adr16_ipm() // 53f8 ffff +void m68000_mcu_device::sls_adr16_ipm() // 53f8 ffff { switch(m_inst_substate) { case 0: @@ -121068,7 +121068,7 @@ morw2: } } -void m68000_device::sls_adr32_ipm() // 53f9 ffff +void m68000_mcu_device::sls_adr32_ipm() // 53f9 ffff { switch(m_inst_substate) { case 0: @@ -121243,7 +121243,7 @@ morw2: } } -void m68000_device::scc_ds_ipm() // 54c0 fff8 +void m68000_mcu_device::scc_ds_ipm() // 54c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -121335,7 +121335,7 @@ sccr2: } } -void m68000_device::dbcc_ds_rel16_ipm() // 54c8 fff8 +void m68000_mcu_device::dbcc_ds_rel16_ipm() // 54c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -121534,7 +121534,7 @@ dbcc5: } } -void m68000_device::scc_ais_ipm() // 54d0 fff8 +void m68000_mcu_device::scc_ais_ipm() // 54d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -121659,7 +121659,7 @@ morw2: } } -void m68000_device::scc_aips_ipm() // 54d8 fff8 +void m68000_mcu_device::scc_aips_ipm() // 54d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -121789,7 +121789,7 @@ morw2: } } -void m68000_device::scc_pais_ipm() // 54e0 fff8 +void m68000_mcu_device::scc_pais_ipm() // 54e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -121921,7 +121921,7 @@ morw2: } } -void m68000_device::scc_das_ipm() // 54e8 fff8 +void m68000_mcu_device::scc_das_ipm() // 54e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -122072,7 +122072,7 @@ morw2: } } -void m68000_device::scc_dais_ipm() // 54f0 fff8 +void m68000_mcu_device::scc_dais_ipm() // 54f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -122266,7 +122266,7 @@ morw2: } } -void m68000_device::scc_adr16_ipm() // 54f8 ffff +void m68000_mcu_device::scc_adr16_ipm() // 54f8 ffff { switch(m_inst_substate) { case 0: @@ -122416,7 +122416,7 @@ morw2: } } -void m68000_device::scc_adr32_ipm() // 54f9 ffff +void m68000_mcu_device::scc_adr32_ipm() // 54f9 ffff { switch(m_inst_substate) { case 0: @@ -122591,7 +122591,7 @@ morw2: } } -void m68000_device::scs_ds_ipm() // 55c0 fff8 +void m68000_mcu_device::scs_ds_ipm() // 55c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -122683,7 +122683,7 @@ sccr2: } } -void m68000_device::dbcs_ds_rel16_ipm() // 55c8 fff8 +void m68000_mcu_device::dbcs_ds_rel16_ipm() // 55c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -122882,7 +122882,7 @@ dbcc5: } } -void m68000_device::scs_ais_ipm() // 55d0 fff8 +void m68000_mcu_device::scs_ais_ipm() // 55d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -123007,7 +123007,7 @@ morw2: } } -void m68000_device::scs_aips_ipm() // 55d8 fff8 +void m68000_mcu_device::scs_aips_ipm() // 55d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -123137,7 +123137,7 @@ morw2: } } -void m68000_device::scs_pais_ipm() // 55e0 fff8 +void m68000_mcu_device::scs_pais_ipm() // 55e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -123269,7 +123269,7 @@ morw2: } } -void m68000_device::scs_das_ipm() // 55e8 fff8 +void m68000_mcu_device::scs_das_ipm() // 55e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -123420,7 +123420,7 @@ morw2: } } -void m68000_device::scs_dais_ipm() // 55f0 fff8 +void m68000_mcu_device::scs_dais_ipm() // 55f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -123614,7 +123614,7 @@ morw2: } } -void m68000_device::scs_adr16_ipm() // 55f8 ffff +void m68000_mcu_device::scs_adr16_ipm() // 55f8 ffff { switch(m_inst_substate) { case 0: @@ -123764,7 +123764,7 @@ morw2: } } -void m68000_device::scs_adr32_ipm() // 55f9 ffff +void m68000_mcu_device::scs_adr32_ipm() // 55f9 ffff { switch(m_inst_substate) { case 0: @@ -123939,7 +123939,7 @@ morw2: } } -void m68000_device::sne_ds_ipm() // 56c0 fff8 +void m68000_mcu_device::sne_ds_ipm() // 56c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -124031,7 +124031,7 @@ sccr2: } } -void m68000_device::dbne_ds_rel16_ipm() // 56c8 fff8 +void m68000_mcu_device::dbne_ds_rel16_ipm() // 56c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -124230,7 +124230,7 @@ dbcc5: } } -void m68000_device::sne_ais_ipm() // 56d0 fff8 +void m68000_mcu_device::sne_ais_ipm() // 56d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -124355,7 +124355,7 @@ morw2: } } -void m68000_device::sne_aips_ipm() // 56d8 fff8 +void m68000_mcu_device::sne_aips_ipm() // 56d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -124485,7 +124485,7 @@ morw2: } } -void m68000_device::sne_pais_ipm() // 56e0 fff8 +void m68000_mcu_device::sne_pais_ipm() // 56e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -124617,7 +124617,7 @@ morw2: } } -void m68000_device::sne_das_ipm() // 56e8 fff8 +void m68000_mcu_device::sne_das_ipm() // 56e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -124768,7 +124768,7 @@ morw2: } } -void m68000_device::sne_dais_ipm() // 56f0 fff8 +void m68000_mcu_device::sne_dais_ipm() // 56f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -124962,7 +124962,7 @@ morw2: } } -void m68000_device::sne_adr16_ipm() // 56f8 ffff +void m68000_mcu_device::sne_adr16_ipm() // 56f8 ffff { switch(m_inst_substate) { case 0: @@ -125112,7 +125112,7 @@ morw2: } } -void m68000_device::sne_adr32_ipm() // 56f9 ffff +void m68000_mcu_device::sne_adr32_ipm() // 56f9 ffff { switch(m_inst_substate) { case 0: @@ -125287,7 +125287,7 @@ morw2: } } -void m68000_device::seq_ds_ipm() // 57c0 fff8 +void m68000_mcu_device::seq_ds_ipm() // 57c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -125379,7 +125379,7 @@ sccr2: } } -void m68000_device::dbeq_ds_rel16_ipm() // 57c8 fff8 +void m68000_mcu_device::dbeq_ds_rel16_ipm() // 57c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -125578,7 +125578,7 @@ dbcc5: } } -void m68000_device::seq_ais_ipm() // 57d0 fff8 +void m68000_mcu_device::seq_ais_ipm() // 57d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -125703,7 +125703,7 @@ morw2: } } -void m68000_device::seq_aips_ipm() // 57d8 fff8 +void m68000_mcu_device::seq_aips_ipm() // 57d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -125833,7 +125833,7 @@ morw2: } } -void m68000_device::seq_pais_ipm() // 57e0 fff8 +void m68000_mcu_device::seq_pais_ipm() // 57e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -125965,7 +125965,7 @@ morw2: } } -void m68000_device::seq_das_ipm() // 57e8 fff8 +void m68000_mcu_device::seq_das_ipm() // 57e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -126116,7 +126116,7 @@ morw2: } } -void m68000_device::seq_dais_ipm() // 57f0 fff8 +void m68000_mcu_device::seq_dais_ipm() // 57f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -126310,7 +126310,7 @@ morw2: } } -void m68000_device::seq_adr16_ipm() // 57f8 ffff +void m68000_mcu_device::seq_adr16_ipm() // 57f8 ffff { switch(m_inst_substate) { case 0: @@ -126460,7 +126460,7 @@ morw2: } } -void m68000_device::seq_adr32_ipm() // 57f9 ffff +void m68000_mcu_device::seq_adr32_ipm() // 57f9 ffff { switch(m_inst_substate) { case 0: @@ -126635,7 +126635,7 @@ morw2: } } -void m68000_device::svc_ds_ipm() // 58c0 fff8 +void m68000_mcu_device::svc_ds_ipm() // 58c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -126727,7 +126727,7 @@ sccr2: } } -void m68000_device::dbvc_ds_rel16_ipm() // 58c8 fff8 +void m68000_mcu_device::dbvc_ds_rel16_ipm() // 58c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -126926,7 +126926,7 @@ dbcc5: } } -void m68000_device::svc_ais_ipm() // 58d0 fff8 +void m68000_mcu_device::svc_ais_ipm() // 58d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -127051,7 +127051,7 @@ morw2: } } -void m68000_device::svc_aips_ipm() // 58d8 fff8 +void m68000_mcu_device::svc_aips_ipm() // 58d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -127181,7 +127181,7 @@ morw2: } } -void m68000_device::svc_pais_ipm() // 58e0 fff8 +void m68000_mcu_device::svc_pais_ipm() // 58e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -127313,7 +127313,7 @@ morw2: } } -void m68000_device::svc_das_ipm() // 58e8 fff8 +void m68000_mcu_device::svc_das_ipm() // 58e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -127464,7 +127464,7 @@ morw2: } } -void m68000_device::svc_dais_ipm() // 58f0 fff8 +void m68000_mcu_device::svc_dais_ipm() // 58f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -127658,7 +127658,7 @@ morw2: } } -void m68000_device::svc_adr16_ipm() // 58f8 ffff +void m68000_mcu_device::svc_adr16_ipm() // 58f8 ffff { switch(m_inst_substate) { case 0: @@ -127808,7 +127808,7 @@ morw2: } } -void m68000_device::svc_adr32_ipm() // 58f9 ffff +void m68000_mcu_device::svc_adr32_ipm() // 58f9 ffff { switch(m_inst_substate) { case 0: @@ -127983,7 +127983,7 @@ morw2: } } -void m68000_device::svs_ds_ipm() // 59c0 fff8 +void m68000_mcu_device::svs_ds_ipm() // 59c0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -128075,7 +128075,7 @@ sccr2: } } -void m68000_device::dbvs_ds_rel16_ipm() // 59c8 fff8 +void m68000_mcu_device::dbvs_ds_rel16_ipm() // 59c8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -128274,7 +128274,7 @@ dbcc5: } } -void m68000_device::svs_ais_ipm() // 59d0 fff8 +void m68000_mcu_device::svs_ais_ipm() // 59d0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -128399,7 +128399,7 @@ morw2: } } -void m68000_device::svs_aips_ipm() // 59d8 fff8 +void m68000_mcu_device::svs_aips_ipm() // 59d8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -128529,7 +128529,7 @@ morw2: } } -void m68000_device::svs_pais_ipm() // 59e0 fff8 +void m68000_mcu_device::svs_pais_ipm() // 59e0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -128661,7 +128661,7 @@ morw2: } } -void m68000_device::svs_das_ipm() // 59e8 fff8 +void m68000_mcu_device::svs_das_ipm() // 59e8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -128812,7 +128812,7 @@ morw2: } } -void m68000_device::svs_dais_ipm() // 59f0 fff8 +void m68000_mcu_device::svs_dais_ipm() // 59f0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -129006,7 +129006,7 @@ morw2: } } -void m68000_device::svs_adr16_ipm() // 59f8 ffff +void m68000_mcu_device::svs_adr16_ipm() // 59f8 ffff { switch(m_inst_substate) { case 0: @@ -129156,7 +129156,7 @@ morw2: } } -void m68000_device::svs_adr32_ipm() // 59f9 ffff +void m68000_mcu_device::svs_adr32_ipm() // 59f9 ffff { switch(m_inst_substate) { case 0: @@ -129331,7 +129331,7 @@ morw2: } } -void m68000_device::spl_ds_ipm() // 5ac0 fff8 +void m68000_mcu_device::spl_ds_ipm() // 5ac0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -129423,7 +129423,7 @@ sccr2: } } -void m68000_device::dbpl_ds_rel16_ipm() // 5ac8 fff8 +void m68000_mcu_device::dbpl_ds_rel16_ipm() // 5ac8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -129622,7 +129622,7 @@ dbcc5: } } -void m68000_device::spl_ais_ipm() // 5ad0 fff8 +void m68000_mcu_device::spl_ais_ipm() // 5ad0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -129747,7 +129747,7 @@ morw2: } } -void m68000_device::spl_aips_ipm() // 5ad8 fff8 +void m68000_mcu_device::spl_aips_ipm() // 5ad8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -129877,7 +129877,7 @@ morw2: } } -void m68000_device::spl_pais_ipm() // 5ae0 fff8 +void m68000_mcu_device::spl_pais_ipm() // 5ae0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -130009,7 +130009,7 @@ morw2: } } -void m68000_device::spl_das_ipm() // 5ae8 fff8 +void m68000_mcu_device::spl_das_ipm() // 5ae8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -130160,7 +130160,7 @@ morw2: } } -void m68000_device::spl_dais_ipm() // 5af0 fff8 +void m68000_mcu_device::spl_dais_ipm() // 5af0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -130354,7 +130354,7 @@ morw2: } } -void m68000_device::spl_adr16_ipm() // 5af8 ffff +void m68000_mcu_device::spl_adr16_ipm() // 5af8 ffff { switch(m_inst_substate) { case 0: @@ -130504,7 +130504,7 @@ morw2: } } -void m68000_device::spl_adr32_ipm() // 5af9 ffff +void m68000_mcu_device::spl_adr32_ipm() // 5af9 ffff { switch(m_inst_substate) { case 0: @@ -130679,7 +130679,7 @@ morw2: } } -void m68000_device::smi_ds_ipm() // 5bc0 fff8 +void m68000_mcu_device::smi_ds_ipm() // 5bc0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -130771,7 +130771,7 @@ sccr2: } } -void m68000_device::dbmi_ds_rel16_ipm() // 5bc8 fff8 +void m68000_mcu_device::dbmi_ds_rel16_ipm() // 5bc8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -130970,7 +130970,7 @@ dbcc5: } } -void m68000_device::smi_ais_ipm() // 5bd0 fff8 +void m68000_mcu_device::smi_ais_ipm() // 5bd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -131095,7 +131095,7 @@ morw2: } } -void m68000_device::smi_aips_ipm() // 5bd8 fff8 +void m68000_mcu_device::smi_aips_ipm() // 5bd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -131225,7 +131225,7 @@ morw2: } } -void m68000_device::smi_pais_ipm() // 5be0 fff8 +void m68000_mcu_device::smi_pais_ipm() // 5be0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -131357,7 +131357,7 @@ morw2: } } -void m68000_device::smi_das_ipm() // 5be8 fff8 +void m68000_mcu_device::smi_das_ipm() // 5be8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -131508,7 +131508,7 @@ morw2: } } -void m68000_device::smi_dais_ipm() // 5bf0 fff8 +void m68000_mcu_device::smi_dais_ipm() // 5bf0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -131702,7 +131702,7 @@ morw2: } } -void m68000_device::smi_adr16_ipm() // 5bf8 ffff +void m68000_mcu_device::smi_adr16_ipm() // 5bf8 ffff { switch(m_inst_substate) { case 0: @@ -131852,7 +131852,7 @@ morw2: } } -void m68000_device::smi_adr32_ipm() // 5bf9 ffff +void m68000_mcu_device::smi_adr32_ipm() // 5bf9 ffff { switch(m_inst_substate) { case 0: @@ -132027,7 +132027,7 @@ morw2: } } -void m68000_device::sge_ds_ipm() // 5cc0 fff8 +void m68000_mcu_device::sge_ds_ipm() // 5cc0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -132119,7 +132119,7 @@ sccr2: } } -void m68000_device::dbge_ds_rel16_ipm() // 5cc8 fff8 +void m68000_mcu_device::dbge_ds_rel16_ipm() // 5cc8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -132318,7 +132318,7 @@ dbcc5: } } -void m68000_device::sge_ais_ipm() // 5cd0 fff8 +void m68000_mcu_device::sge_ais_ipm() // 5cd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -132443,7 +132443,7 @@ morw2: } } -void m68000_device::sge_aips_ipm() // 5cd8 fff8 +void m68000_mcu_device::sge_aips_ipm() // 5cd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -132573,7 +132573,7 @@ morw2: } } -void m68000_device::sge_pais_ipm() // 5ce0 fff8 +void m68000_mcu_device::sge_pais_ipm() // 5ce0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -132705,7 +132705,7 @@ morw2: } } -void m68000_device::sge_das_ipm() // 5ce8 fff8 +void m68000_mcu_device::sge_das_ipm() // 5ce8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -132856,7 +132856,7 @@ morw2: } } -void m68000_device::sge_dais_ipm() // 5cf0 fff8 +void m68000_mcu_device::sge_dais_ipm() // 5cf0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -133050,7 +133050,7 @@ morw2: } } -void m68000_device::sge_adr16_ipm() // 5cf8 ffff +void m68000_mcu_device::sge_adr16_ipm() // 5cf8 ffff { switch(m_inst_substate) { case 0: @@ -133200,7 +133200,7 @@ morw2: } } -void m68000_device::sge_adr32_ipm() // 5cf9 ffff +void m68000_mcu_device::sge_adr32_ipm() // 5cf9 ffff { switch(m_inst_substate) { case 0: @@ -133375,7 +133375,7 @@ morw2: } } -void m68000_device::slt_ds_ipm() // 5dc0 fff8 +void m68000_mcu_device::slt_ds_ipm() // 5dc0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -133467,7 +133467,7 @@ sccr2: } } -void m68000_device::dblt_ds_rel16_ipm() // 5dc8 fff8 +void m68000_mcu_device::dblt_ds_rel16_ipm() // 5dc8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -133666,7 +133666,7 @@ dbcc5: } } -void m68000_device::slt_ais_ipm() // 5dd0 fff8 +void m68000_mcu_device::slt_ais_ipm() // 5dd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -133791,7 +133791,7 @@ morw2: } } -void m68000_device::slt_aips_ipm() // 5dd8 fff8 +void m68000_mcu_device::slt_aips_ipm() // 5dd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -133921,7 +133921,7 @@ morw2: } } -void m68000_device::slt_pais_ipm() // 5de0 fff8 +void m68000_mcu_device::slt_pais_ipm() // 5de0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -134053,7 +134053,7 @@ morw2: } } -void m68000_device::slt_das_ipm() // 5de8 fff8 +void m68000_mcu_device::slt_das_ipm() // 5de8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -134204,7 +134204,7 @@ morw2: } } -void m68000_device::slt_dais_ipm() // 5df0 fff8 +void m68000_mcu_device::slt_dais_ipm() // 5df0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -134398,7 +134398,7 @@ morw2: } } -void m68000_device::slt_adr16_ipm() // 5df8 ffff +void m68000_mcu_device::slt_adr16_ipm() // 5df8 ffff { switch(m_inst_substate) { case 0: @@ -134548,7 +134548,7 @@ morw2: } } -void m68000_device::slt_adr32_ipm() // 5df9 ffff +void m68000_mcu_device::slt_adr32_ipm() // 5df9 ffff { switch(m_inst_substate) { case 0: @@ -134723,7 +134723,7 @@ morw2: } } -void m68000_device::sgt_ds_ipm() // 5ec0 fff8 +void m68000_mcu_device::sgt_ds_ipm() // 5ec0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -134815,7 +134815,7 @@ sccr2: } } -void m68000_device::dbgt_ds_rel16_ipm() // 5ec8 fff8 +void m68000_mcu_device::dbgt_ds_rel16_ipm() // 5ec8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -135014,7 +135014,7 @@ dbcc5: } } -void m68000_device::sgt_ais_ipm() // 5ed0 fff8 +void m68000_mcu_device::sgt_ais_ipm() // 5ed0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -135139,7 +135139,7 @@ morw2: } } -void m68000_device::sgt_aips_ipm() // 5ed8 fff8 +void m68000_mcu_device::sgt_aips_ipm() // 5ed8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -135269,7 +135269,7 @@ morw2: } } -void m68000_device::sgt_pais_ipm() // 5ee0 fff8 +void m68000_mcu_device::sgt_pais_ipm() // 5ee0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -135401,7 +135401,7 @@ morw2: } } -void m68000_device::sgt_das_ipm() // 5ee8 fff8 +void m68000_mcu_device::sgt_das_ipm() // 5ee8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -135552,7 +135552,7 @@ morw2: } } -void m68000_device::sgt_dais_ipm() // 5ef0 fff8 +void m68000_mcu_device::sgt_dais_ipm() // 5ef0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -135746,7 +135746,7 @@ morw2: } } -void m68000_device::sgt_adr16_ipm() // 5ef8 ffff +void m68000_mcu_device::sgt_adr16_ipm() // 5ef8 ffff { switch(m_inst_substate) { case 0: @@ -135896,7 +135896,7 @@ morw2: } } -void m68000_device::sgt_adr32_ipm() // 5ef9 ffff +void m68000_mcu_device::sgt_adr32_ipm() // 5ef9 ffff { switch(m_inst_substate) { case 0: @@ -136071,7 +136071,7 @@ morw2: } } -void m68000_device::sle_ds_ipm() // 5fc0 fff8 +void m68000_mcu_device::sle_ds_ipm() // 5fc0 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -136163,7 +136163,7 @@ sccr2: } } -void m68000_device::dble_ds_rel16_ipm() // 5fc8 fff8 +void m68000_mcu_device::dble_ds_rel16_ipm() // 5fc8 fff8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -136362,7 +136362,7 @@ dbcc5: } } -void m68000_device::sle_ais_ipm() // 5fd0 fff8 +void m68000_mcu_device::sle_ais_ipm() // 5fd0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -136487,7 +136487,7 @@ morw2: } } -void m68000_device::sle_aips_ipm() // 5fd8 fff8 +void m68000_mcu_device::sle_aips_ipm() // 5fd8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -136617,7 +136617,7 @@ morw2: } } -void m68000_device::sle_pais_ipm() // 5fe0 fff8 +void m68000_mcu_device::sle_pais_ipm() // 5fe0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -136749,7 +136749,7 @@ morw2: } } -void m68000_device::sle_das_ipm() // 5fe8 fff8 +void m68000_mcu_device::sle_das_ipm() // 5fe8 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -136900,7 +136900,7 @@ morw2: } } -void m68000_device::sle_dais_ipm() // 5ff0 fff8 +void m68000_mcu_device::sle_dais_ipm() // 5ff0 fff8 { int ry = map_sp((m_irdi & 7) | 8); switch(m_inst_substate) { @@ -137094,7 +137094,7 @@ morw2: } } -void m68000_device::sle_adr16_ipm() // 5ff8 ffff +void m68000_mcu_device::sle_adr16_ipm() // 5ff8 ffff { switch(m_inst_substate) { case 0: @@ -137244,7 +137244,7 @@ morw2: } } -void m68000_device::sle_adr32_ipm() // 5ff9 ffff +void m68000_mcu_device::sle_adr32_ipm() // 5ff9 ffff { switch(m_inst_substate) { case 0: @@ -137419,7 +137419,7 @@ morw2: } } -void m68000_device::bra_rel16_ipm() // 6000 ffff +void m68000_mcu_device::bra_rel16_ipm() // 6000 ffff { switch(m_inst_substate) { case 0: @@ -137533,7 +137533,7 @@ b: } } -void m68000_device::bra_rel8_ipm() // 6000 ff00 +void m68000_mcu_device::bra_rel8_ipm() // 6000 ff00 { switch(m_inst_substate) { case 0: @@ -137620,7 +137620,7 @@ b: } } -void m68000_device::bsr_rel16_ipm() // 6100 ffff +void m68000_mcu_device::bsr_rel16_ipm() // 6100 ffff { switch(m_inst_substate) { case 0: @@ -137742,7 +137742,7 @@ void m68000_device::bsr_rel16_ipm() // 6100 ffff } } -void m68000_device::bsr_rel8_ipm() // 6100 ff00 +void m68000_mcu_device::bsr_rel8_ipm() // 6100 ff00 { switch(m_inst_substate) { case 0: @@ -137864,7 +137864,7 @@ void m68000_device::bsr_rel8_ipm() // 6100 ff00 } } -void m68000_device::bhi_rel16_ipm() // 6200 ffff +void m68000_mcu_device::bhi_rel16_ipm() // 6200 ffff { switch(m_inst_substate) { case 0: @@ -137978,7 +137978,7 @@ b: } } -void m68000_device::bhi_rel8_ipm() // 6200 ff00 +void m68000_mcu_device::bhi_rel8_ipm() // 6200 ff00 { switch(m_inst_substate) { case 0: @@ -138065,7 +138065,7 @@ b: } } -void m68000_device::bls_rel16_ipm() // 6300 ffff +void m68000_mcu_device::bls_rel16_ipm() // 6300 ffff { switch(m_inst_substate) { case 0: @@ -138179,7 +138179,7 @@ b: } } -void m68000_device::bls_rel8_ipm() // 6300 ff00 +void m68000_mcu_device::bls_rel8_ipm() // 6300 ff00 { switch(m_inst_substate) { case 0: @@ -138266,7 +138266,7 @@ b: } } -void m68000_device::bcc_rel16_ipm() // 6400 ffff +void m68000_mcu_device::bcc_rel16_ipm() // 6400 ffff { switch(m_inst_substate) { case 0: @@ -138380,7 +138380,7 @@ b: } } -void m68000_device::bcc_rel8_ipm() // 6400 ff00 +void m68000_mcu_device::bcc_rel8_ipm() // 6400 ff00 { switch(m_inst_substate) { case 0: @@ -138467,7 +138467,7 @@ b: } } -void m68000_device::bcs_rel16_ipm() // 6500 ffff +void m68000_mcu_device::bcs_rel16_ipm() // 6500 ffff { switch(m_inst_substate) { case 0: @@ -138581,7 +138581,7 @@ b: } } -void m68000_device::bcs_rel8_ipm() // 6500 ff00 +void m68000_mcu_device::bcs_rel8_ipm() // 6500 ff00 { switch(m_inst_substate) { case 0: @@ -138668,7 +138668,7 @@ b: } } -void m68000_device::bne_rel16_ipm() // 6600 ffff +void m68000_mcu_device::bne_rel16_ipm() // 6600 ffff { switch(m_inst_substate) { case 0: @@ -138782,7 +138782,7 @@ b: } } -void m68000_device::bne_rel8_ipm() // 6600 ff00 +void m68000_mcu_device::bne_rel8_ipm() // 6600 ff00 { switch(m_inst_substate) { case 0: @@ -138869,7 +138869,7 @@ b: } } -void m68000_device::beq_rel16_ipm() // 6700 ffff +void m68000_mcu_device::beq_rel16_ipm() // 6700 ffff { switch(m_inst_substate) { case 0: @@ -138983,7 +138983,7 @@ b: } } -void m68000_device::beq_rel8_ipm() // 6700 ff00 +void m68000_mcu_device::beq_rel8_ipm() // 6700 ff00 { switch(m_inst_substate) { case 0: @@ -139070,7 +139070,7 @@ b: } } -void m68000_device::bvc_rel16_ipm() // 6800 ffff +void m68000_mcu_device::bvc_rel16_ipm() // 6800 ffff { switch(m_inst_substate) { case 0: @@ -139184,7 +139184,7 @@ b: } } -void m68000_device::bvc_rel8_ipm() // 6800 ff00 +void m68000_mcu_device::bvc_rel8_ipm() // 6800 ff00 { switch(m_inst_substate) { case 0: @@ -139271,7 +139271,7 @@ b: } } -void m68000_device::bvs_rel16_ipm() // 6900 ffff +void m68000_mcu_device::bvs_rel16_ipm() // 6900 ffff { switch(m_inst_substate) { case 0: @@ -139385,7 +139385,7 @@ b: } } -void m68000_device::bvs_rel8_ipm() // 6900 ff00 +void m68000_mcu_device::bvs_rel8_ipm() // 6900 ff00 { switch(m_inst_substate) { case 0: @@ -139472,7 +139472,7 @@ b: } } -void m68000_device::bpl_rel16_ipm() // 6a00 ffff +void m68000_mcu_device::bpl_rel16_ipm() // 6a00 ffff { switch(m_inst_substate) { case 0: @@ -139586,7 +139586,7 @@ b: } } -void m68000_device::bpl_rel8_ipm() // 6a00 ff00 +void m68000_mcu_device::bpl_rel8_ipm() // 6a00 ff00 { switch(m_inst_substate) { case 0: @@ -139673,7 +139673,7 @@ b: } } -void m68000_device::bmi_rel16_ipm() // 6b00 ffff +void m68000_mcu_device::bmi_rel16_ipm() // 6b00 ffff { switch(m_inst_substate) { case 0: @@ -139787,7 +139787,7 @@ b: } } -void m68000_device::bmi_rel8_ipm() // 6b00 ff00 +void m68000_mcu_device::bmi_rel8_ipm() // 6b00 ff00 { switch(m_inst_substate) { case 0: @@ -139874,7 +139874,7 @@ b: } } -void m68000_device::bge_rel16_ipm() // 6c00 ffff +void m68000_mcu_device::bge_rel16_ipm() // 6c00 ffff { switch(m_inst_substate) { case 0: @@ -139988,7 +139988,7 @@ b: } } -void m68000_device::bge_rel8_ipm() // 6c00 ff00 +void m68000_mcu_device::bge_rel8_ipm() // 6c00 ff00 { switch(m_inst_substate) { case 0: @@ -140075,7 +140075,7 @@ b: } } -void m68000_device::blt_rel16_ipm() // 6d00 ffff +void m68000_mcu_device::blt_rel16_ipm() // 6d00 ffff { switch(m_inst_substate) { case 0: @@ -140189,7 +140189,7 @@ b: } } -void m68000_device::blt_rel8_ipm() // 6d00 ff00 +void m68000_mcu_device::blt_rel8_ipm() // 6d00 ff00 { switch(m_inst_substate) { case 0: @@ -140276,7 +140276,7 @@ b: } } -void m68000_device::bgt_rel16_ipm() // 6e00 ffff +void m68000_mcu_device::bgt_rel16_ipm() // 6e00 ffff { switch(m_inst_substate) { case 0: @@ -140390,7 +140390,7 @@ b: } } -void m68000_device::bgt_rel8_ipm() // 6e00 ff00 +void m68000_mcu_device::bgt_rel8_ipm() // 6e00 ff00 { switch(m_inst_substate) { case 0: @@ -140477,7 +140477,7 @@ b: } } -void m68000_device::ble_rel16_ipm() // 6f00 ffff +void m68000_mcu_device::ble_rel16_ipm() // 6f00 ffff { switch(m_inst_substate) { case 0: @@ -140591,7 +140591,7 @@ b: } } -void m68000_device::ble_rel8_ipm() // 6f00 ff00 +void m68000_mcu_device::ble_rel8_ipm() // 6f00 ff00 { switch(m_inst_substate) { case 0: @@ -140678,7 +140678,7 @@ b: } } -void m68000_device::moveq_imm8o_dd_ipm() // 7000 f100 +void m68000_mcu_device::moveq_imm8o_dd_ipm() // 7000 f100 { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -140725,7 +140725,7 @@ void m68000_device::moveq_imm8o_dd_ipm() // 7000 f100 } } -void m68000_device::or_b_ds_dd_ipm() // 8000 f1f8 +void m68000_mcu_device::or_b_ds_dd_ipm() // 8000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -140775,7 +140775,7 @@ void m68000_device::or_b_ds_dd_ipm() // 8000 f1f8 } } -void m68000_device::or_b_ais_dd_ipm() // 8010 f1f8 +void m68000_mcu_device::or_b_ais_dd_ipm() // 8010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -140849,7 +140849,7 @@ void m68000_device::or_b_ais_dd_ipm() // 8010 f1f8 } } -void m68000_device::or_b_aips_dd_ipm() // 8018 f1f8 +void m68000_mcu_device::or_b_aips_dd_ipm() // 8018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -140928,7 +140928,7 @@ void m68000_device::or_b_aips_dd_ipm() // 8018 f1f8 } } -void m68000_device::or_b_pais_dd_ipm() // 8020 f1f8 +void m68000_mcu_device::or_b_pais_dd_ipm() // 8020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141009,7 +141009,7 @@ void m68000_device::or_b_pais_dd_ipm() // 8020 f1f8 } } -void m68000_device::or_b_das_dd_ipm() // 8028 f1f8 +void m68000_mcu_device::or_b_das_dd_ipm() // 8028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141109,7 +141109,7 @@ void m68000_device::or_b_das_dd_ipm() // 8028 f1f8 } } -void m68000_device::or_b_dais_dd_ipm() // 8030 f1f8 +void m68000_mcu_device::or_b_dais_dd_ipm() // 8030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141252,7 +141252,7 @@ adsw2: } } -void m68000_device::or_b_adr16_dd_ipm() // 8038 f1ff +void m68000_mcu_device::or_b_adr16_dd_ipm() // 8038 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -141351,7 +141351,7 @@ void m68000_device::or_b_adr16_dd_ipm() // 8038 f1ff } } -void m68000_device::or_b_adr32_dd_ipm() // 8039 f1ff +void m68000_mcu_device::or_b_adr32_dd_ipm() // 8039 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -141475,7 +141475,7 @@ void m68000_device::or_b_adr32_dd_ipm() // 8039 f1ff } } -void m68000_device::or_b_dpc_dd_ipm() // 803a f1ff +void m68000_mcu_device::or_b_dpc_dd_ipm() // 803a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -141574,7 +141574,7 @@ void m68000_device::or_b_dpc_dd_ipm() // 803a f1ff } } -void m68000_device::or_b_dpci_dd_ipm() // 803b f1ff +void m68000_mcu_device::or_b_dpci_dd_ipm() // 803b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -141716,7 +141716,7 @@ adsw2: } } -void m68000_device::or_b_imm8_dd_ipm() // 803c f1ff +void m68000_mcu_device::or_b_imm8_dd_ipm() // 803c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -141793,7 +141793,7 @@ void m68000_device::or_b_imm8_dd_ipm() // 803c f1ff } } -void m68000_device::or_w_ds_dd_ipm() // 8040 f1f8 +void m68000_mcu_device::or_w_ds_dd_ipm() // 8040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -141843,7 +141843,7 @@ void m68000_device::or_w_ds_dd_ipm() // 8040 f1f8 } } -void m68000_device::or_w_ais_dd_ipm() // 8050 f1f8 +void m68000_mcu_device::or_w_ais_dd_ipm() // 8050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -141921,7 +141921,7 @@ void m68000_device::or_w_ais_dd_ipm() // 8050 f1f8 } } -void m68000_device::or_w_aips_dd_ipm() // 8058 f1f8 +void m68000_mcu_device::or_w_aips_dd_ipm() // 8058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142004,7 +142004,7 @@ void m68000_device::or_w_aips_dd_ipm() // 8058 f1f8 } } -void m68000_device::or_w_pais_dd_ipm() // 8060 f1f8 +void m68000_mcu_device::or_w_pais_dd_ipm() // 8060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142089,7 +142089,7 @@ void m68000_device::or_w_pais_dd_ipm() // 8060 f1f8 } } -void m68000_device::or_w_das_dd_ipm() // 8068 f1f8 +void m68000_mcu_device::or_w_das_dd_ipm() // 8068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142193,7 +142193,7 @@ void m68000_device::or_w_das_dd_ipm() // 8068 f1f8 } } -void m68000_device::or_w_dais_dd_ipm() // 8070 f1f8 +void m68000_mcu_device::or_w_dais_dd_ipm() // 8070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -142340,7 +142340,7 @@ adsw2: } } -void m68000_device::or_w_adr16_dd_ipm() // 8078 f1ff +void m68000_mcu_device::or_w_adr16_dd_ipm() // 8078 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -142443,7 +142443,7 @@ void m68000_device::or_w_adr16_dd_ipm() // 8078 f1ff } } -void m68000_device::or_w_adr32_dd_ipm() // 8079 f1ff +void m68000_mcu_device::or_w_adr32_dd_ipm() // 8079 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -142571,7 +142571,7 @@ void m68000_device::or_w_adr32_dd_ipm() // 8079 f1ff } } -void m68000_device::or_w_dpc_dd_ipm() // 807a f1ff +void m68000_mcu_device::or_w_dpc_dd_ipm() // 807a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -142674,7 +142674,7 @@ void m68000_device::or_w_dpc_dd_ipm() // 807a f1ff } } -void m68000_device::or_w_dpci_dd_ipm() // 807b f1ff +void m68000_mcu_device::or_w_dpci_dd_ipm() // 807b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -142820,7 +142820,7 @@ adsw2: } } -void m68000_device::or_w_imm16_dd_ipm() // 807c f1ff +void m68000_mcu_device::or_w_imm16_dd_ipm() // 807c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -142897,7 +142897,7 @@ void m68000_device::or_w_imm16_dd_ipm() // 807c f1ff } } -void m68000_device::or_l_ds_dd_ipm() // 8080 f1f8 +void m68000_mcu_device::or_l_ds_dd_ipm() // 8080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -142956,7 +142956,7 @@ void m68000_device::or_l_ds_dd_ipm() // 8080 f1f8 } } -void m68000_device::or_l_ais_dd_ipm() // 8090 f1f8 +void m68000_mcu_device::or_l_ais_dd_ipm() // 8090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -143064,7 +143064,7 @@ void m68000_device::or_l_ais_dd_ipm() // 8090 f1f8 } } -void m68000_device::or_l_aips_dd_ipm() // 8098 f1f8 +void m68000_mcu_device::or_l_aips_dd_ipm() // 8098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -143176,7 +143176,7 @@ void m68000_device::or_l_aips_dd_ipm() // 8098 f1f8 } } -void m68000_device::or_l_pais_dd_ipm() // 80a0 f1f8 +void m68000_mcu_device::or_l_pais_dd_ipm() // 80a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -143289,7 +143289,7 @@ void m68000_device::or_l_pais_dd_ipm() // 80a0 f1f8 } } -void m68000_device::or_l_das_dd_ipm() // 80a8 f1f8 +void m68000_mcu_device::or_l_das_dd_ipm() // 80a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -143422,7 +143422,7 @@ void m68000_device::or_l_das_dd_ipm() // 80a8 f1f8 } } -void m68000_device::or_l_dais_dd_ipm() // 80b0 f1f8 +void m68000_mcu_device::or_l_dais_dd_ipm() // 80b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -143598,7 +143598,7 @@ adsl2: } } -void m68000_device::or_l_adr16_dd_ipm() // 80b8 f1ff +void m68000_mcu_device::or_l_adr16_dd_ipm() // 80b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -143734,7 +143734,7 @@ void m68000_device::or_l_adr16_dd_ipm() // 80b8 f1ff } } -void m68000_device::or_l_adr32_dd_ipm() // 80b9 f1ff +void m68000_mcu_device::or_l_adr32_dd_ipm() // 80b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -143895,7 +143895,7 @@ void m68000_device::or_l_adr32_dd_ipm() // 80b9 f1ff } } -void m68000_device::or_l_dpc_dd_ipm() // 80ba f1ff +void m68000_mcu_device::or_l_dpc_dd_ipm() // 80ba f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -144027,7 +144027,7 @@ void m68000_device::or_l_dpc_dd_ipm() // 80ba f1ff } } -void m68000_device::or_l_dpci_dd_ipm() // 80bb f1ff +void m68000_mcu_device::or_l_dpci_dd_ipm() // 80bb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -144202,7 +144202,7 @@ adsl2: } } -void m68000_device::or_l_imm32_dd_ipm() // 80bc f1ff +void m68000_mcu_device::or_l_imm32_dd_ipm() // 80bc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -144313,7 +144313,7 @@ void m68000_device::or_l_imm32_dd_ipm() // 80bc f1ff } } -void m68000_device::divu_w_ds_dd_ipm() // 80c0 f1f8 +void m68000_mcu_device::divu_w_ds_dd_ipm() // 80c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -144726,7 +144726,7 @@ dvum0: } } -void m68000_device::divu_w_ais_dd_ipm() // 80d0 f1f8 +void m68000_mcu_device::divu_w_ais_dd_ipm() // 80d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145166,7 +145166,7 @@ dvum0: } } -void m68000_device::divu_w_aips_dd_ipm() // 80d8 f1f8 +void m68000_mcu_device::divu_w_aips_dd_ipm() // 80d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -145610,7 +145610,7 @@ dvum0: } } -void m68000_device::divu_w_pais_dd_ipm() // 80e0 f1f8 +void m68000_mcu_device::divu_w_pais_dd_ipm() // 80e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -146056,7 +146056,7 @@ dvum0: } } -void m68000_device::divu_w_das_dd_ipm() // 80e8 f1f8 +void m68000_mcu_device::divu_w_das_dd_ipm() // 80e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -146521,7 +146521,7 @@ dvum0: } } -void m68000_device::divu_w_dais_dd_ipm() // 80f0 f1f8 +void m68000_mcu_device::divu_w_dais_dd_ipm() // 80f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -147027,7 +147027,7 @@ dvum0: } } -void m68000_device::divu_w_adr16_dd_ipm() // 80f8 f1ff +void m68000_mcu_device::divu_w_adr16_dd_ipm() // 80f8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -147491,7 +147491,7 @@ dvum0: } } -void m68000_device::divu_w_adr32_dd_ipm() // 80f9 f1ff +void m68000_mcu_device::divu_w_adr32_dd_ipm() // 80f9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -147979,7 +147979,7 @@ dvum0: } } -void m68000_device::divu_w_dpc_dd_ipm() // 80fa f1ff +void m68000_mcu_device::divu_w_dpc_dd_ipm() // 80fa f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -148443,7 +148443,7 @@ dvum0: } } -void m68000_device::divu_w_dpci_dd_ipm() // 80fb f1ff +void m68000_mcu_device::divu_w_dpci_dd_ipm() // 80fb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -148948,7 +148948,7 @@ dvum0: } } -void m68000_device::divu_w_imm16_dd_ipm() // 80fc f1ff +void m68000_mcu_device::divu_w_imm16_dd_ipm() // 80fc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -149387,7 +149387,7 @@ dvum0: } } -void m68000_device::sbcd_ds_dd_ipm() // 8100 f1f8 +void m68000_mcu_device::sbcd_ds_dd_ipm() // 8100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -149440,7 +149440,7 @@ void m68000_device::sbcd_ds_dd_ipm() // 8100 f1f8 } } -void m68000_device::sbcd_pais_paid_ipm() // 8108 f1f8 +void m68000_mcu_device::sbcd_pais_paid_ipm() // 8108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -149554,7 +149554,7 @@ void m68000_device::sbcd_pais_paid_ipm() // 8108 f1f8 } } -void m68000_device::or_b_dd_ais_ipm() // 8110 f1f8 +void m68000_mcu_device::or_b_dd_ais_ipm() // 8110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149642,7 +149642,7 @@ void m68000_device::or_b_dd_ais_ipm() // 8110 f1f8 } } -void m68000_device::or_b_dd_aips_ipm() // 8118 f1f8 +void m68000_mcu_device::or_b_dd_aips_ipm() // 8118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149735,7 +149735,7 @@ void m68000_device::or_b_dd_aips_ipm() // 8118 f1f8 } } -void m68000_device::or_b_dd_pais_ipm() // 8120 f1f8 +void m68000_mcu_device::or_b_dd_pais_ipm() // 8120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149830,7 +149830,7 @@ void m68000_device::or_b_dd_pais_ipm() // 8120 f1f8 } } -void m68000_device::or_b_dd_das_ipm() // 8128 f1f8 +void m68000_mcu_device::or_b_dd_das_ipm() // 8128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -149944,7 +149944,7 @@ void m68000_device::or_b_dd_das_ipm() // 8128 f1f8 } } -void m68000_device::or_b_dd_dais_ipm() // 8130 f1f8 +void m68000_mcu_device::or_b_dd_dais_ipm() // 8130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150101,7 +150101,7 @@ adsw2: } } -void m68000_device::or_b_dd_adr16_ipm() // 8138 f1ff +void m68000_mcu_device::or_b_dd_adr16_ipm() // 8138 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -150214,7 +150214,7 @@ void m68000_device::or_b_dd_adr16_ipm() // 8138 f1ff } } -void m68000_device::or_b_dd_adr32_ipm() // 8139 f1ff +void m68000_mcu_device::or_b_dd_adr32_ipm() // 8139 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -150352,7 +150352,7 @@ void m68000_device::or_b_dd_adr32_ipm() // 8139 f1ff } } -void m68000_device::or_w_dd_ais_ipm() // 8150 f1f8 +void m68000_mcu_device::or_w_dd_ais_ipm() // 8150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150450,7 +150450,7 @@ void m68000_device::or_w_dd_ais_ipm() // 8150 f1f8 } } -void m68000_device::or_w_dd_aips_ipm() // 8158 f1f8 +void m68000_mcu_device::or_w_dd_aips_ipm() // 8158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150553,7 +150553,7 @@ void m68000_device::or_w_dd_aips_ipm() // 8158 f1f8 } } -void m68000_device::or_w_dd_pais_ipm() // 8160 f1f8 +void m68000_mcu_device::or_w_dd_pais_ipm() // 8160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150658,7 +150658,7 @@ void m68000_device::or_w_dd_pais_ipm() // 8160 f1f8 } } -void m68000_device::or_w_dd_das_ipm() // 8168 f1f8 +void m68000_mcu_device::or_w_dd_das_ipm() // 8168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150782,7 +150782,7 @@ void m68000_device::or_w_dd_das_ipm() // 8168 f1f8 } } -void m68000_device::or_w_dd_dais_ipm() // 8170 f1f8 +void m68000_mcu_device::or_w_dd_dais_ipm() // 8170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -150949,7 +150949,7 @@ adsw2: } } -void m68000_device::or_w_dd_adr16_ipm() // 8178 f1ff +void m68000_mcu_device::or_w_dd_adr16_ipm() // 8178 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -151072,7 +151072,7 @@ void m68000_device::or_w_dd_adr16_ipm() // 8178 f1ff } } -void m68000_device::or_w_dd_adr32_ipm() // 8179 f1ff +void m68000_mcu_device::or_w_dd_adr32_ipm() // 8179 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -151220,7 +151220,7 @@ void m68000_device::or_w_dd_adr32_ipm() // 8179 f1ff } } -void m68000_device::or_l_dd_ais_ipm() // 8190 f1f8 +void m68000_mcu_device::or_l_dd_ais_ipm() // 8190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -151368,7 +151368,7 @@ void m68000_device::or_l_dd_ais_ipm() // 8190 f1f8 } } -void m68000_device::or_l_dd_aips_ipm() // 8198 f1f8 +void m68000_mcu_device::or_l_dd_aips_ipm() // 8198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -151520,7 +151520,7 @@ void m68000_device::or_l_dd_aips_ipm() // 8198 f1f8 } } -void m68000_device::or_l_dd_pais_ipm() // 81a0 f1f8 +void m68000_mcu_device::or_l_dd_pais_ipm() // 81a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -151673,7 +151673,7 @@ void m68000_device::or_l_dd_pais_ipm() // 81a0 f1f8 } } -void m68000_device::or_l_dd_das_ipm() // 81a8 f1f8 +void m68000_mcu_device::or_l_dd_das_ipm() // 81a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -151846,7 +151846,7 @@ void m68000_device::or_l_dd_das_ipm() // 81a8 f1f8 } } -void m68000_device::or_l_dd_dais_ipm() // 81b0 f1f8 +void m68000_mcu_device::or_l_dd_dais_ipm() // 81b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -152062,7 +152062,7 @@ adsl2: } } -void m68000_device::or_l_dd_adr16_ipm() // 81b8 f1ff +void m68000_mcu_device::or_l_dd_adr16_ipm() // 81b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -152238,7 +152238,7 @@ void m68000_device::or_l_dd_adr16_ipm() // 81b8 f1ff } } -void m68000_device::or_l_dd_adr32_ipm() // 81b9 f1ff +void m68000_mcu_device::or_l_dd_adr32_ipm() // 81b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -152439,7 +152439,7 @@ void m68000_device::or_l_dd_adr32_ipm() // 81b9 f1ff } } -void m68000_device::divs_w_ds_dd_ipm() // 81c0 f1f8 +void m68000_mcu_device::divs_w_ds_dd_ipm() // 81c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -152985,7 +152985,7 @@ dvs1c: } } -void m68000_device::divs_w_ais_dd_ipm() // 81d0 f1f8 +void m68000_mcu_device::divs_w_ais_dd_ipm() // 81d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -153558,7 +153558,7 @@ dvs1c: } } -void m68000_device::divs_w_aips_dd_ipm() // 81d8 f1f8 +void m68000_mcu_device::divs_w_aips_dd_ipm() // 81d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -154135,7 +154135,7 @@ dvs1c: } } -void m68000_device::divs_w_pais_dd_ipm() // 81e0 f1f8 +void m68000_mcu_device::divs_w_pais_dd_ipm() // 81e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -154714,7 +154714,7 @@ dvs1c: } } -void m68000_device::divs_w_das_dd_ipm() // 81e8 f1f8 +void m68000_mcu_device::divs_w_das_dd_ipm() // 81e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -155312,7 +155312,7 @@ dvs1c: } } -void m68000_device::divs_w_dais_dd_ipm() // 81f0 f1f8 +void m68000_mcu_device::divs_w_dais_dd_ipm() // 81f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -155951,7 +155951,7 @@ dvs1c: } } -void m68000_device::divs_w_adr16_dd_ipm() // 81f8 f1ff +void m68000_mcu_device::divs_w_adr16_dd_ipm() // 81f8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -156548,7 +156548,7 @@ dvs1c: } } -void m68000_device::divs_w_adr32_dd_ipm() // 81f9 f1ff +void m68000_mcu_device::divs_w_adr32_dd_ipm() // 81f9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -157169,7 +157169,7 @@ dvs1c: } } -void m68000_device::divs_w_dpc_dd_ipm() // 81fa f1ff +void m68000_mcu_device::divs_w_dpc_dd_ipm() // 81fa f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -157766,7 +157766,7 @@ dvs1c: } } -void m68000_device::divs_w_dpci_dd_ipm() // 81fb f1ff +void m68000_mcu_device::divs_w_dpci_dd_ipm() // 81fb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -158404,7 +158404,7 @@ dvs1c: } } -void m68000_device::divs_w_imm16_dd_ipm() // 81fc f1ff +void m68000_mcu_device::divs_w_imm16_dd_ipm() // 81fc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -158976,7 +158976,7 @@ dvs1c: } } -void m68000_device::sub_b_ds_dd_ipm() // 9000 f1f8 +void m68000_mcu_device::sub_b_ds_dd_ipm() // 9000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -159025,7 +159025,7 @@ void m68000_device::sub_b_ds_dd_ipm() // 9000 f1f8 } } -void m68000_device::sub_b_ais_dd_ipm() // 9010 f1f8 +void m68000_mcu_device::sub_b_ais_dd_ipm() // 9010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159097,7 +159097,7 @@ void m68000_device::sub_b_ais_dd_ipm() // 9010 f1f8 } } -void m68000_device::sub_b_aips_dd_ipm() // 9018 f1f8 +void m68000_mcu_device::sub_b_aips_dd_ipm() // 9018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159173,7 +159173,7 @@ void m68000_device::sub_b_aips_dd_ipm() // 9018 f1f8 } } -void m68000_device::sub_b_pais_dd_ipm() // 9020 f1f8 +void m68000_mcu_device::sub_b_pais_dd_ipm() // 9020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159251,7 +159251,7 @@ void m68000_device::sub_b_pais_dd_ipm() // 9020 f1f8 } } -void m68000_device::sub_b_das_dd_ipm() // 9028 f1f8 +void m68000_mcu_device::sub_b_das_dd_ipm() // 9028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159348,7 +159348,7 @@ void m68000_device::sub_b_das_dd_ipm() // 9028 f1f8 } } -void m68000_device::sub_b_dais_dd_ipm() // 9030 f1f8 +void m68000_mcu_device::sub_b_dais_dd_ipm() // 9030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -159486,7 +159486,7 @@ adsw2: } } -void m68000_device::sub_b_adr16_dd_ipm() // 9038 f1ff +void m68000_mcu_device::sub_b_adr16_dd_ipm() // 9038 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -159582,7 +159582,7 @@ void m68000_device::sub_b_adr16_dd_ipm() // 9038 f1ff } } -void m68000_device::sub_b_adr32_dd_ipm() // 9039 f1ff +void m68000_mcu_device::sub_b_adr32_dd_ipm() // 9039 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -159702,7 +159702,7 @@ void m68000_device::sub_b_adr32_dd_ipm() // 9039 f1ff } } -void m68000_device::sub_b_dpc_dd_ipm() // 903a f1ff +void m68000_mcu_device::sub_b_dpc_dd_ipm() // 903a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -159798,7 +159798,7 @@ void m68000_device::sub_b_dpc_dd_ipm() // 903a f1ff } } -void m68000_device::sub_b_dpci_dd_ipm() // 903b f1ff +void m68000_mcu_device::sub_b_dpci_dd_ipm() // 903b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -159935,7 +159935,7 @@ adsw2: } } -void m68000_device::sub_b_imm8_dd_ipm() // 903c f1ff +void m68000_mcu_device::sub_b_imm8_dd_ipm() // 903c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -160010,7 +160010,7 @@ void m68000_device::sub_b_imm8_dd_ipm() // 903c f1ff } } -void m68000_device::sub_w_ds_dd_ipm() // 9040 f1f8 +void m68000_mcu_device::sub_w_ds_dd_ipm() // 9040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -160059,7 +160059,7 @@ void m68000_device::sub_w_ds_dd_ipm() // 9040 f1f8 } } -void m68000_device::sub_w_as_dd_ipm() // 9048 f1f8 +void m68000_mcu_device::sub_w_as_dd_ipm() // 9048 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160108,7 +160108,7 @@ void m68000_device::sub_w_as_dd_ipm() // 9048 f1f8 } } -void m68000_device::sub_w_ais_dd_ipm() // 9050 f1f8 +void m68000_mcu_device::sub_w_ais_dd_ipm() // 9050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160184,7 +160184,7 @@ void m68000_device::sub_w_ais_dd_ipm() // 9050 f1f8 } } -void m68000_device::sub_w_aips_dd_ipm() // 9058 f1f8 +void m68000_mcu_device::sub_w_aips_dd_ipm() // 9058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160264,7 +160264,7 @@ void m68000_device::sub_w_aips_dd_ipm() // 9058 f1f8 } } -void m68000_device::sub_w_pais_dd_ipm() // 9060 f1f8 +void m68000_mcu_device::sub_w_pais_dd_ipm() // 9060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160346,7 +160346,7 @@ void m68000_device::sub_w_pais_dd_ipm() // 9060 f1f8 } } -void m68000_device::sub_w_das_dd_ipm() // 9068 f1f8 +void m68000_mcu_device::sub_w_das_dd_ipm() // 9068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160447,7 +160447,7 @@ void m68000_device::sub_w_das_dd_ipm() // 9068 f1f8 } } -void m68000_device::sub_w_dais_dd_ipm() // 9070 f1f8 +void m68000_mcu_device::sub_w_dais_dd_ipm() // 9070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -160589,7 +160589,7 @@ adsw2: } } -void m68000_device::sub_w_adr16_dd_ipm() // 9078 f1ff +void m68000_mcu_device::sub_w_adr16_dd_ipm() // 9078 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -160689,7 +160689,7 @@ void m68000_device::sub_w_adr16_dd_ipm() // 9078 f1ff } } -void m68000_device::sub_w_adr32_dd_ipm() // 9079 f1ff +void m68000_mcu_device::sub_w_adr32_dd_ipm() // 9079 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -160813,7 +160813,7 @@ void m68000_device::sub_w_adr32_dd_ipm() // 9079 f1ff } } -void m68000_device::sub_w_dpc_dd_ipm() // 907a f1ff +void m68000_mcu_device::sub_w_dpc_dd_ipm() // 907a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -160913,7 +160913,7 @@ void m68000_device::sub_w_dpc_dd_ipm() // 907a f1ff } } -void m68000_device::sub_w_dpci_dd_ipm() // 907b f1ff +void m68000_mcu_device::sub_w_dpci_dd_ipm() // 907b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -161054,7 +161054,7 @@ adsw2: } } -void m68000_device::sub_w_imm16_dd_ipm() // 907c f1ff +void m68000_mcu_device::sub_w_imm16_dd_ipm() // 907c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -161129,7 +161129,7 @@ void m68000_device::sub_w_imm16_dd_ipm() // 907c f1ff } } -void m68000_device::sub_l_ds_dd_ipm() // 9080 f1f8 +void m68000_mcu_device::sub_l_ds_dd_ipm() // 9080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -161186,7 +161186,7 @@ void m68000_device::sub_l_ds_dd_ipm() // 9080 f1f8 } } -void m68000_device::sub_l_as_dd_ipm() // 9088 f1f8 +void m68000_mcu_device::sub_l_as_dd_ipm() // 9088 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -161243,7 +161243,7 @@ void m68000_device::sub_l_as_dd_ipm() // 9088 f1f8 } } -void m68000_device::sub_l_ais_dd_ipm() // 9090 f1f8 +void m68000_mcu_device::sub_l_ais_dd_ipm() // 9090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -161349,7 +161349,7 @@ void m68000_device::sub_l_ais_dd_ipm() // 9090 f1f8 } } -void m68000_device::sub_l_aips_dd_ipm() // 9098 f1f8 +void m68000_mcu_device::sub_l_aips_dd_ipm() // 9098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -161458,7 +161458,7 @@ void m68000_device::sub_l_aips_dd_ipm() // 9098 f1f8 } } -void m68000_device::sub_l_pais_dd_ipm() // 90a0 f1f8 +void m68000_mcu_device::sub_l_pais_dd_ipm() // 90a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -161568,7 +161568,7 @@ void m68000_device::sub_l_pais_dd_ipm() // 90a0 f1f8 } } -void m68000_device::sub_l_das_dd_ipm() // 90a8 f1f8 +void m68000_mcu_device::sub_l_das_dd_ipm() // 90a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -161698,7 +161698,7 @@ void m68000_device::sub_l_das_dd_ipm() // 90a8 f1f8 } } -void m68000_device::sub_l_dais_dd_ipm() // 90b0 f1f8 +void m68000_mcu_device::sub_l_dais_dd_ipm() // 90b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -161869,7 +161869,7 @@ adsl2: } } -void m68000_device::sub_l_adr16_dd_ipm() // 90b8 f1ff +void m68000_mcu_device::sub_l_adr16_dd_ipm() // 90b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -162001,7 +162001,7 @@ void m68000_device::sub_l_adr16_dd_ipm() // 90b8 f1ff } } -void m68000_device::sub_l_adr32_dd_ipm() // 90b9 f1ff +void m68000_mcu_device::sub_l_adr32_dd_ipm() // 90b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -162157,7 +162157,7 @@ void m68000_device::sub_l_adr32_dd_ipm() // 90b9 f1ff } } -void m68000_device::sub_l_dpc_dd_ipm() // 90ba f1ff +void m68000_mcu_device::sub_l_dpc_dd_ipm() // 90ba f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -162286,7 +162286,7 @@ void m68000_device::sub_l_dpc_dd_ipm() // 90ba f1ff } } -void m68000_device::sub_l_dpci_dd_ipm() // 90bb f1ff +void m68000_mcu_device::sub_l_dpci_dd_ipm() // 90bb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -162456,7 +162456,7 @@ adsl2: } } -void m68000_device::sub_l_imm32_dd_ipm() // 90bc f1ff +void m68000_mcu_device::sub_l_imm32_dd_ipm() // 90bc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -162563,7 +162563,7 @@ void m68000_device::sub_l_imm32_dd_ipm() // 90bc f1ff } } -void m68000_device::suba_w_ds_ad_ipm() // 90c0 f1f8 +void m68000_mcu_device::suba_w_ds_ad_ipm() // 90c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -162618,7 +162618,7 @@ void m68000_device::suba_w_ds_ad_ipm() // 90c0 f1f8 } } -void m68000_device::suba_w_as_ad_ipm() // 90c8 f1f8 +void m68000_mcu_device::suba_w_as_ad_ipm() // 90c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -162673,7 +162673,7 @@ void m68000_device::suba_w_as_ad_ipm() // 90c8 f1f8 } } -void m68000_device::suba_w_ais_ad_ipm() // 90d0 f1f8 +void m68000_mcu_device::suba_w_ais_ad_ipm() // 90d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -162755,7 +162755,7 @@ void m68000_device::suba_w_ais_ad_ipm() // 90d0 f1f8 } } -void m68000_device::suba_w_aips_ad_ipm() // 90d8 f1f8 +void m68000_mcu_device::suba_w_aips_ad_ipm() // 90d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -162841,7 +162841,7 @@ void m68000_device::suba_w_aips_ad_ipm() // 90d8 f1f8 } } -void m68000_device::suba_w_pais_ad_ipm() // 90e0 f1f8 +void m68000_mcu_device::suba_w_pais_ad_ipm() // 90e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -162929,7 +162929,7 @@ void m68000_device::suba_w_pais_ad_ipm() // 90e0 f1f8 } } -void m68000_device::suba_w_das_ad_ipm() // 90e8 f1f8 +void m68000_mcu_device::suba_w_das_ad_ipm() // 90e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -163036,7 +163036,7 @@ void m68000_device::suba_w_das_ad_ipm() // 90e8 f1f8 } } -void m68000_device::suba_w_dais_ad_ipm() // 90f0 f1f8 +void m68000_mcu_device::suba_w_dais_ad_ipm() // 90f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -163184,7 +163184,7 @@ adsw2: } } -void m68000_device::suba_w_adr16_ad_ipm() // 90f8 f1ff +void m68000_mcu_device::suba_w_adr16_ad_ipm() // 90f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -163290,7 +163290,7 @@ void m68000_device::suba_w_adr16_ad_ipm() // 90f8 f1ff } } -void m68000_device::suba_w_adr32_ad_ipm() // 90f9 f1ff +void m68000_mcu_device::suba_w_adr32_ad_ipm() // 90f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -163420,7 +163420,7 @@ void m68000_device::suba_w_adr32_ad_ipm() // 90f9 f1ff } } -void m68000_device::suba_w_dpc_ad_ipm() // 90fa f1ff +void m68000_mcu_device::suba_w_dpc_ad_ipm() // 90fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -163526,7 +163526,7 @@ void m68000_device::suba_w_dpc_ad_ipm() // 90fa f1ff } } -void m68000_device::suba_w_dpci_ad_ipm() // 90fb f1ff +void m68000_mcu_device::suba_w_dpci_ad_ipm() // 90fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -163673,7 +163673,7 @@ adsw2: } } -void m68000_device::suba_w_imm16_ad_ipm() // 90fc f1ff +void m68000_mcu_device::suba_w_imm16_ad_ipm() // 90fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -163754,7 +163754,7 @@ void m68000_device::suba_w_imm16_ad_ipm() // 90fc f1ff } } -void m68000_device::subx_b_ds_dd_ipm() // 9100 f1f8 +void m68000_mcu_device::subx_b_ds_dd_ipm() // 9100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -163803,7 +163803,7 @@ void m68000_device::subx_b_ds_dd_ipm() // 9100 f1f8 } } -void m68000_device::subx_b_pais_paid_ipm() // 9108 f1f8 +void m68000_mcu_device::subx_b_pais_paid_ipm() // 9108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -163915,7 +163915,7 @@ void m68000_device::subx_b_pais_paid_ipm() // 9108 f1f8 } } -void m68000_device::sub_b_dd_ais_ipm() // 9110 f1f8 +void m68000_mcu_device::sub_b_dd_ais_ipm() // 9110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164001,7 +164001,7 @@ void m68000_device::sub_b_dd_ais_ipm() // 9110 f1f8 } } -void m68000_device::sub_b_dd_aips_ipm() // 9118 f1f8 +void m68000_mcu_device::sub_b_dd_aips_ipm() // 9118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164091,7 +164091,7 @@ void m68000_device::sub_b_dd_aips_ipm() // 9118 f1f8 } } -void m68000_device::sub_b_dd_pais_ipm() // 9120 f1f8 +void m68000_mcu_device::sub_b_dd_pais_ipm() // 9120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164183,7 +164183,7 @@ void m68000_device::sub_b_dd_pais_ipm() // 9120 f1f8 } } -void m68000_device::sub_b_dd_das_ipm() // 9128 f1f8 +void m68000_mcu_device::sub_b_dd_das_ipm() // 9128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164294,7 +164294,7 @@ void m68000_device::sub_b_dd_das_ipm() // 9128 f1f8 } } -void m68000_device::sub_b_dd_dais_ipm() // 9130 f1f8 +void m68000_mcu_device::sub_b_dd_dais_ipm() // 9130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164446,7 +164446,7 @@ adsw2: } } -void m68000_device::sub_b_dd_adr16_ipm() // 9138 f1ff +void m68000_mcu_device::sub_b_dd_adr16_ipm() // 9138 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -164556,7 +164556,7 @@ void m68000_device::sub_b_dd_adr16_ipm() // 9138 f1ff } } -void m68000_device::sub_b_dd_adr32_ipm() // 9139 f1ff +void m68000_mcu_device::sub_b_dd_adr32_ipm() // 9139 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -164690,7 +164690,7 @@ void m68000_device::sub_b_dd_adr32_ipm() // 9139 f1ff } } -void m68000_device::subx_w_ds_dd_ipm() // 9140 f1f8 +void m68000_mcu_device::subx_w_ds_dd_ipm() // 9140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -164739,7 +164739,7 @@ void m68000_device::subx_w_ds_dd_ipm() // 9140 f1f8 } } -void m68000_device::subx_w_pais_paid_ipm() // 9148 f1f8 +void m68000_mcu_device::subx_w_pais_paid_ipm() // 9148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -164865,7 +164865,7 @@ void m68000_device::subx_w_pais_paid_ipm() // 9148 f1f8 } } -void m68000_device::sub_w_dd_ais_ipm() // 9150 f1f8 +void m68000_mcu_device::sub_w_dd_ais_ipm() // 9150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -164961,7 +164961,7 @@ void m68000_device::sub_w_dd_ais_ipm() // 9150 f1f8 } } -void m68000_device::sub_w_dd_aips_ipm() // 9158 f1f8 +void m68000_mcu_device::sub_w_dd_aips_ipm() // 9158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -165061,7 +165061,7 @@ void m68000_device::sub_w_dd_aips_ipm() // 9158 f1f8 } } -void m68000_device::sub_w_dd_pais_ipm() // 9160 f1f8 +void m68000_mcu_device::sub_w_dd_pais_ipm() // 9160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -165163,7 +165163,7 @@ void m68000_device::sub_w_dd_pais_ipm() // 9160 f1f8 } } -void m68000_device::sub_w_dd_das_ipm() // 9168 f1f8 +void m68000_mcu_device::sub_w_dd_das_ipm() // 9168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -165284,7 +165284,7 @@ void m68000_device::sub_w_dd_das_ipm() // 9168 f1f8 } } -void m68000_device::sub_w_dd_dais_ipm() // 9170 f1f8 +void m68000_mcu_device::sub_w_dd_dais_ipm() // 9170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -165446,7 +165446,7 @@ adsw2: } } -void m68000_device::sub_w_dd_adr16_ipm() // 9178 f1ff +void m68000_mcu_device::sub_w_dd_adr16_ipm() // 9178 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -165566,7 +165566,7 @@ void m68000_device::sub_w_dd_adr16_ipm() // 9178 f1ff } } -void m68000_device::sub_w_dd_adr32_ipm() // 9179 f1ff +void m68000_mcu_device::sub_w_dd_adr32_ipm() // 9179 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -165710,7 +165710,7 @@ void m68000_device::sub_w_dd_adr32_ipm() // 9179 f1ff } } -void m68000_device::subx_l_ds_dd_ipm() // 9180 f1f8 +void m68000_mcu_device::subx_l_ds_dd_ipm() // 9180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -165767,7 +165767,7 @@ void m68000_device::subx_l_ds_dd_ipm() // 9180 f1f8 } } -void m68000_device::subx_l_pais_paid_ipm() // 9188 f1f8 +void m68000_mcu_device::subx_l_pais_paid_ipm() // 9188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -165967,7 +165967,7 @@ void m68000_device::subx_l_pais_paid_ipm() // 9188 f1f8 } } -void m68000_device::sub_l_dd_ais_ipm() // 9190 f1f8 +void m68000_mcu_device::sub_l_dd_ais_ipm() // 9190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166113,7 +166113,7 @@ void m68000_device::sub_l_dd_ais_ipm() // 9190 f1f8 } } -void m68000_device::sub_l_dd_aips_ipm() // 9198 f1f8 +void m68000_mcu_device::sub_l_dd_aips_ipm() // 9198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166262,7 +166262,7 @@ void m68000_device::sub_l_dd_aips_ipm() // 9198 f1f8 } } -void m68000_device::sub_l_dd_pais_ipm() // 91a0 f1f8 +void m68000_mcu_device::sub_l_dd_pais_ipm() // 91a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166412,7 +166412,7 @@ void m68000_device::sub_l_dd_pais_ipm() // 91a0 f1f8 } } -void m68000_device::sub_l_dd_das_ipm() // 91a8 f1f8 +void m68000_mcu_device::sub_l_dd_das_ipm() // 91a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166582,7 +166582,7 @@ void m68000_device::sub_l_dd_das_ipm() // 91a8 f1f8 } } -void m68000_device::sub_l_dd_dais_ipm() // 91b0 f1f8 +void m68000_mcu_device::sub_l_dd_dais_ipm() // 91b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -166793,7 +166793,7 @@ adsl2: } } -void m68000_device::sub_l_dd_adr16_ipm() // 91b8 f1ff +void m68000_mcu_device::sub_l_dd_adr16_ipm() // 91b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -166965,7 +166965,7 @@ void m68000_device::sub_l_dd_adr16_ipm() // 91b8 f1ff } } -void m68000_device::sub_l_dd_adr32_ipm() // 91b9 f1ff +void m68000_mcu_device::sub_l_dd_adr32_ipm() // 91b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -167161,7 +167161,7 @@ void m68000_device::sub_l_dd_adr32_ipm() // 91b9 f1ff } } -void m68000_device::suba_l_ds_ad_ipm() // 91c0 f1f8 +void m68000_mcu_device::suba_l_ds_ad_ipm() // 91c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -167216,7 +167216,7 @@ void m68000_device::suba_l_ds_ad_ipm() // 91c0 f1f8 } } -void m68000_device::suba_l_as_ad_ipm() // 91c8 f1f8 +void m68000_mcu_device::suba_l_as_ad_ipm() // 91c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -167271,7 +167271,7 @@ void m68000_device::suba_l_as_ad_ipm() // 91c8 f1f8 } } -void m68000_device::suba_l_ais_ad_ipm() // 91d0 f1f8 +void m68000_mcu_device::suba_l_ais_ad_ipm() // 91d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -167375,7 +167375,7 @@ void m68000_device::suba_l_ais_ad_ipm() // 91d0 f1f8 } } -void m68000_device::suba_l_aips_ad_ipm() // 91d8 f1f8 +void m68000_mcu_device::suba_l_aips_ad_ipm() // 91d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -167482,7 +167482,7 @@ void m68000_device::suba_l_aips_ad_ipm() // 91d8 f1f8 } } -void m68000_device::suba_l_pais_ad_ipm() // 91e0 f1f8 +void m68000_mcu_device::suba_l_pais_ad_ipm() // 91e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -167590,7 +167590,7 @@ void m68000_device::suba_l_pais_ad_ipm() // 91e0 f1f8 } } -void m68000_device::suba_l_das_ad_ipm() // 91e8 f1f8 +void m68000_mcu_device::suba_l_das_ad_ipm() // 91e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -167718,7 +167718,7 @@ void m68000_device::suba_l_das_ad_ipm() // 91e8 f1f8 } } -void m68000_device::suba_l_dais_ad_ipm() // 91f0 f1f8 +void m68000_mcu_device::suba_l_dais_ad_ipm() // 91f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -167887,7 +167887,7 @@ adsl2: } } -void m68000_device::suba_l_adr16_ad_ipm() // 91f8 f1ff +void m68000_mcu_device::suba_l_adr16_ad_ipm() // 91f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -168017,7 +168017,7 @@ void m68000_device::suba_l_adr16_ad_ipm() // 91f8 f1ff } } -void m68000_device::suba_l_adr32_ad_ipm() // 91f9 f1ff +void m68000_mcu_device::suba_l_adr32_ad_ipm() // 91f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -168171,7 +168171,7 @@ void m68000_device::suba_l_adr32_ad_ipm() // 91f9 f1ff } } -void m68000_device::suba_l_dpc_ad_ipm() // 91fa f1ff +void m68000_mcu_device::suba_l_dpc_ad_ipm() // 91fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -168298,7 +168298,7 @@ void m68000_device::suba_l_dpc_ad_ipm() // 91fa f1ff } } -void m68000_device::suba_l_dpci_ad_ipm() // 91fb f1ff +void m68000_mcu_device::suba_l_dpci_ad_ipm() // 91fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -168466,7 +168466,7 @@ adsl2: } } -void m68000_device::suba_l_imm32_ad_ipm() // 91fc f1ff +void m68000_mcu_device::suba_l_imm32_ad_ipm() // 91fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -168571,7 +168571,7 @@ void m68000_device::suba_l_imm32_ad_ipm() // 91fc f1ff } } -void m68000_device::cmp_b_ds_dd_ipm() // b000 f1f8 +void m68000_mcu_device::cmp_b_ds_dd_ipm() // b000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -168619,7 +168619,7 @@ void m68000_device::cmp_b_ds_dd_ipm() // b000 f1f8 } } -void m68000_device::cmp_b_ais_dd_ipm() // b010 f1f8 +void m68000_mcu_device::cmp_b_ais_dd_ipm() // b010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168690,7 +168690,7 @@ void m68000_device::cmp_b_ais_dd_ipm() // b010 f1f8 } } -void m68000_device::cmp_b_aips_dd_ipm() // b018 f1f8 +void m68000_mcu_device::cmp_b_aips_dd_ipm() // b018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168765,7 +168765,7 @@ void m68000_device::cmp_b_aips_dd_ipm() // b018 f1f8 } } -void m68000_device::cmp_b_pais_dd_ipm() // b020 f1f8 +void m68000_mcu_device::cmp_b_pais_dd_ipm() // b020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168842,7 +168842,7 @@ void m68000_device::cmp_b_pais_dd_ipm() // b020 f1f8 } } -void m68000_device::cmp_b_das_dd_ipm() // b028 f1f8 +void m68000_mcu_device::cmp_b_das_dd_ipm() // b028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -168938,7 +168938,7 @@ void m68000_device::cmp_b_das_dd_ipm() // b028 f1f8 } } -void m68000_device::cmp_b_dais_dd_ipm() // b030 f1f8 +void m68000_mcu_device::cmp_b_dais_dd_ipm() // b030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -169075,7 +169075,7 @@ adsw2: } } -void m68000_device::cmp_b_adr16_dd_ipm() // b038 f1ff +void m68000_mcu_device::cmp_b_adr16_dd_ipm() // b038 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -169170,7 +169170,7 @@ void m68000_device::cmp_b_adr16_dd_ipm() // b038 f1ff } } -void m68000_device::cmp_b_adr32_dd_ipm() // b039 f1ff +void m68000_mcu_device::cmp_b_adr32_dd_ipm() // b039 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -169289,7 +169289,7 @@ void m68000_device::cmp_b_adr32_dd_ipm() // b039 f1ff } } -void m68000_device::cmp_b_dpc_dd_ipm() // b03a f1ff +void m68000_mcu_device::cmp_b_dpc_dd_ipm() // b03a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -169384,7 +169384,7 @@ void m68000_device::cmp_b_dpc_dd_ipm() // b03a f1ff } } -void m68000_device::cmp_b_dpci_dd_ipm() // b03b f1ff +void m68000_mcu_device::cmp_b_dpci_dd_ipm() // b03b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -169520,7 +169520,7 @@ adsw2: } } -void m68000_device::cmp_b_imm8_dd_ipm() // b03c f1ff +void m68000_mcu_device::cmp_b_imm8_dd_ipm() // b03c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -169594,7 +169594,7 @@ void m68000_device::cmp_b_imm8_dd_ipm() // b03c f1ff } } -void m68000_device::cmp_w_ds_dd_ipm() // b040 f1f8 +void m68000_mcu_device::cmp_w_ds_dd_ipm() // b040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -169642,7 +169642,7 @@ void m68000_device::cmp_w_ds_dd_ipm() // b040 f1f8 } } -void m68000_device::cmp_w_as_dd_ipm() // b048 f1f8 +void m68000_mcu_device::cmp_w_as_dd_ipm() // b048 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -169690,7 +169690,7 @@ void m68000_device::cmp_w_as_dd_ipm() // b048 f1f8 } } -void m68000_device::cmp_w_ais_dd_ipm() // b050 f1f8 +void m68000_mcu_device::cmp_w_ais_dd_ipm() // b050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -169765,7 +169765,7 @@ void m68000_device::cmp_w_ais_dd_ipm() // b050 f1f8 } } -void m68000_device::cmp_w_aips_dd_ipm() // b058 f1f8 +void m68000_mcu_device::cmp_w_aips_dd_ipm() // b058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -169844,7 +169844,7 @@ void m68000_device::cmp_w_aips_dd_ipm() // b058 f1f8 } } -void m68000_device::cmp_w_pais_dd_ipm() // b060 f1f8 +void m68000_mcu_device::cmp_w_pais_dd_ipm() // b060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -169925,7 +169925,7 @@ void m68000_device::cmp_w_pais_dd_ipm() // b060 f1f8 } } -void m68000_device::cmp_w_das_dd_ipm() // b068 f1f8 +void m68000_mcu_device::cmp_w_das_dd_ipm() // b068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170025,7 +170025,7 @@ void m68000_device::cmp_w_das_dd_ipm() // b068 f1f8 } } -void m68000_device::cmp_w_dais_dd_ipm() // b070 f1f8 +void m68000_mcu_device::cmp_w_dais_dd_ipm() // b070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170166,7 +170166,7 @@ adsw2: } } -void m68000_device::cmp_w_adr16_dd_ipm() // b078 f1ff +void m68000_mcu_device::cmp_w_adr16_dd_ipm() // b078 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -170265,7 +170265,7 @@ void m68000_device::cmp_w_adr16_dd_ipm() // b078 f1ff } } -void m68000_device::cmp_w_adr32_dd_ipm() // b079 f1ff +void m68000_mcu_device::cmp_w_adr32_dd_ipm() // b079 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -170388,7 +170388,7 @@ void m68000_device::cmp_w_adr32_dd_ipm() // b079 f1ff } } -void m68000_device::cmp_w_dpc_dd_ipm() // b07a f1ff +void m68000_mcu_device::cmp_w_dpc_dd_ipm() // b07a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -170487,7 +170487,7 @@ void m68000_device::cmp_w_dpc_dd_ipm() // b07a f1ff } } -void m68000_device::cmp_w_dpci_dd_ipm() // b07b f1ff +void m68000_mcu_device::cmp_w_dpci_dd_ipm() // b07b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -170627,7 +170627,7 @@ adsw2: } } -void m68000_device::cmp_w_imm16_dd_ipm() // b07c f1ff +void m68000_mcu_device::cmp_w_imm16_dd_ipm() // b07c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -170701,7 +170701,7 @@ void m68000_device::cmp_w_imm16_dd_ipm() // b07c f1ff } } -void m68000_device::cmp_l_ds_dd_ipm() // b080 f1f8 +void m68000_mcu_device::cmp_l_ds_dd_ipm() // b080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -170754,7 +170754,7 @@ void m68000_device::cmp_l_ds_dd_ipm() // b080 f1f8 } } -void m68000_device::cmp_l_as_dd_ipm() // b088 f1f8 +void m68000_mcu_device::cmp_l_as_dd_ipm() // b088 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170807,7 +170807,7 @@ void m68000_device::cmp_l_as_dd_ipm() // b088 f1f8 } } -void m68000_device::cmp_l_ais_dd_ipm() // b090 f1f8 +void m68000_mcu_device::cmp_l_ais_dd_ipm() // b090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -170911,7 +170911,7 @@ void m68000_device::cmp_l_ais_dd_ipm() // b090 f1f8 } } -void m68000_device::cmp_l_aips_dd_ipm() // b098 f1f8 +void m68000_mcu_device::cmp_l_aips_dd_ipm() // b098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171018,7 +171018,7 @@ void m68000_device::cmp_l_aips_dd_ipm() // b098 f1f8 } } -void m68000_device::cmp_l_pais_dd_ipm() // b0a0 f1f8 +void m68000_mcu_device::cmp_l_pais_dd_ipm() // b0a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171126,7 +171126,7 @@ void m68000_device::cmp_l_pais_dd_ipm() // b0a0 f1f8 } } -void m68000_device::cmp_l_das_dd_ipm() // b0a8 f1f8 +void m68000_mcu_device::cmp_l_das_dd_ipm() // b0a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171254,7 +171254,7 @@ void m68000_device::cmp_l_das_dd_ipm() // b0a8 f1f8 } } -void m68000_device::cmp_l_dais_dd_ipm() // b0b0 f1f8 +void m68000_mcu_device::cmp_l_dais_dd_ipm() // b0b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -171423,7 +171423,7 @@ adsl2: } } -void m68000_device::cmp_l_adr16_dd_ipm() // b0b8 f1ff +void m68000_mcu_device::cmp_l_adr16_dd_ipm() // b0b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -171553,7 +171553,7 @@ void m68000_device::cmp_l_adr16_dd_ipm() // b0b8 f1ff } } -void m68000_device::cmp_l_adr32_dd_ipm() // b0b9 f1ff +void m68000_mcu_device::cmp_l_adr32_dd_ipm() // b0b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -171707,7 +171707,7 @@ void m68000_device::cmp_l_adr32_dd_ipm() // b0b9 f1ff } } -void m68000_device::cmp_l_dpc_dd_ipm() // b0ba f1ff +void m68000_mcu_device::cmp_l_dpc_dd_ipm() // b0ba f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -171834,7 +171834,7 @@ void m68000_device::cmp_l_dpc_dd_ipm() // b0ba f1ff } } -void m68000_device::cmp_l_dpci_dd_ipm() // b0bb f1ff +void m68000_mcu_device::cmp_l_dpci_dd_ipm() // b0bb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -172002,7 +172002,7 @@ adsl2: } } -void m68000_device::cmp_l_imm32_dd_ipm() // b0bc f1ff +void m68000_mcu_device::cmp_l_imm32_dd_ipm() // b0bc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -172105,7 +172105,7 @@ void m68000_device::cmp_l_imm32_dd_ipm() // b0bc f1ff } } -void m68000_device::cmpa_w_ds_ad_ipm() // b0c0 f1f8 +void m68000_mcu_device::cmpa_w_ds_ad_ipm() // b0c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -172158,7 +172158,7 @@ void m68000_device::cmpa_w_ds_ad_ipm() // b0c0 f1f8 } } -void m68000_device::cmpa_w_as_ad_ipm() // b0c8 f1f8 +void m68000_mcu_device::cmpa_w_as_ad_ipm() // b0c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -172211,7 +172211,7 @@ void m68000_device::cmpa_w_as_ad_ipm() // b0c8 f1f8 } } -void m68000_device::cmpa_w_ais_ad_ipm() // b0d0 f1f8 +void m68000_mcu_device::cmpa_w_ais_ad_ipm() // b0d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -172291,7 +172291,7 @@ void m68000_device::cmpa_w_ais_ad_ipm() // b0d0 f1f8 } } -void m68000_device::cmpa_w_aips_ad_ipm() // b0d8 f1f8 +void m68000_mcu_device::cmpa_w_aips_ad_ipm() // b0d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -172375,7 +172375,7 @@ void m68000_device::cmpa_w_aips_ad_ipm() // b0d8 f1f8 } } -void m68000_device::cmpa_w_pais_ad_ipm() // b0e0 f1f8 +void m68000_mcu_device::cmpa_w_pais_ad_ipm() // b0e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -172461,7 +172461,7 @@ void m68000_device::cmpa_w_pais_ad_ipm() // b0e0 f1f8 } } -void m68000_device::cmpa_w_das_ad_ipm() // b0e8 f1f8 +void m68000_mcu_device::cmpa_w_das_ad_ipm() // b0e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -172566,7 +172566,7 @@ void m68000_device::cmpa_w_das_ad_ipm() // b0e8 f1f8 } } -void m68000_device::cmpa_w_dais_ad_ipm() // b0f0 f1f8 +void m68000_mcu_device::cmpa_w_dais_ad_ipm() // b0f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -172712,7 +172712,7 @@ adsw2: } } -void m68000_device::cmpa_w_adr16_ad_ipm() // b0f8 f1ff +void m68000_mcu_device::cmpa_w_adr16_ad_ipm() // b0f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -172816,7 +172816,7 @@ void m68000_device::cmpa_w_adr16_ad_ipm() // b0f8 f1ff } } -void m68000_device::cmpa_w_adr32_ad_ipm() // b0f9 f1ff +void m68000_mcu_device::cmpa_w_adr32_ad_ipm() // b0f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -172944,7 +172944,7 @@ void m68000_device::cmpa_w_adr32_ad_ipm() // b0f9 f1ff } } -void m68000_device::cmpa_w_dpc_ad_ipm() // b0fa f1ff +void m68000_mcu_device::cmpa_w_dpc_ad_ipm() // b0fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -173048,7 +173048,7 @@ void m68000_device::cmpa_w_dpc_ad_ipm() // b0fa f1ff } } -void m68000_device::cmpa_w_dpci_ad_ipm() // b0fb f1ff +void m68000_mcu_device::cmpa_w_dpci_ad_ipm() // b0fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -173193,7 +173193,7 @@ adsw2: } } -void m68000_device::cmpa_w_imm16_ad_ipm() // b0fc f1ff +void m68000_mcu_device::cmpa_w_imm16_ad_ipm() // b0fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -173272,7 +173272,7 @@ void m68000_device::cmpa_w_imm16_ad_ipm() // b0fc f1ff } } -void m68000_device::eor_b_dd_ds_ipm() // b100 f1f8 +void m68000_mcu_device::eor_b_dd_ds_ipm() // b100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -173321,7 +173321,7 @@ void m68000_device::eor_b_dd_ds_ipm() // b100 f1f8 } } -void m68000_device::cmpm_b_aips_aipd_ipm() // b108 f1f8 +void m68000_mcu_device::cmpm_b_aips_aipd_ipm() // b108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -173412,7 +173412,7 @@ void m68000_device::cmpm_b_aips_aipd_ipm() // b108 f1f8 } } -void m68000_device::eor_b_dd_ais_ipm() // b110 f1f8 +void m68000_mcu_device::eor_b_dd_ais_ipm() // b110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -173500,7 +173500,7 @@ void m68000_device::eor_b_dd_ais_ipm() // b110 f1f8 } } -void m68000_device::eor_b_dd_aips_ipm() // b118 f1f8 +void m68000_mcu_device::eor_b_dd_aips_ipm() // b118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -173593,7 +173593,7 @@ void m68000_device::eor_b_dd_aips_ipm() // b118 f1f8 } } -void m68000_device::eor_b_dd_pais_ipm() // b120 f1f8 +void m68000_mcu_device::eor_b_dd_pais_ipm() // b120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -173688,7 +173688,7 @@ void m68000_device::eor_b_dd_pais_ipm() // b120 f1f8 } } -void m68000_device::eor_b_dd_das_ipm() // b128 f1f8 +void m68000_mcu_device::eor_b_dd_das_ipm() // b128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -173802,7 +173802,7 @@ void m68000_device::eor_b_dd_das_ipm() // b128 f1f8 } } -void m68000_device::eor_b_dd_dais_ipm() // b130 f1f8 +void m68000_mcu_device::eor_b_dd_dais_ipm() // b130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -173959,7 +173959,7 @@ adsw2: } } -void m68000_device::eor_b_dd_adr16_ipm() // b138 f1ff +void m68000_mcu_device::eor_b_dd_adr16_ipm() // b138 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -174072,7 +174072,7 @@ void m68000_device::eor_b_dd_adr16_ipm() // b138 f1ff } } -void m68000_device::eor_b_dd_adr32_ipm() // b139 f1ff +void m68000_mcu_device::eor_b_dd_adr32_ipm() // b139 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -174210,7 +174210,7 @@ void m68000_device::eor_b_dd_adr32_ipm() // b139 f1ff } } -void m68000_device::eor_w_dd_ds_ipm() // b140 f1f8 +void m68000_mcu_device::eor_w_dd_ds_ipm() // b140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -174259,7 +174259,7 @@ void m68000_device::eor_w_dd_ds_ipm() // b140 f1f8 } } -void m68000_device::cmpm_w_aips_aipd_ipm() // b148 f1f8 +void m68000_mcu_device::cmpm_w_aips_aipd_ipm() // b148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -174358,7 +174358,7 @@ void m68000_device::cmpm_w_aips_aipd_ipm() // b148 f1f8 } } -void m68000_device::eor_w_dd_ais_ipm() // b150 f1f8 +void m68000_mcu_device::eor_w_dd_ais_ipm() // b150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -174456,7 +174456,7 @@ void m68000_device::eor_w_dd_ais_ipm() // b150 f1f8 } } -void m68000_device::eor_w_dd_aips_ipm() // b158 f1f8 +void m68000_mcu_device::eor_w_dd_aips_ipm() // b158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -174559,7 +174559,7 @@ void m68000_device::eor_w_dd_aips_ipm() // b158 f1f8 } } -void m68000_device::eor_w_dd_pais_ipm() // b160 f1f8 +void m68000_mcu_device::eor_w_dd_pais_ipm() // b160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -174664,7 +174664,7 @@ void m68000_device::eor_w_dd_pais_ipm() // b160 f1f8 } } -void m68000_device::eor_w_dd_das_ipm() // b168 f1f8 +void m68000_mcu_device::eor_w_dd_das_ipm() // b168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -174788,7 +174788,7 @@ void m68000_device::eor_w_dd_das_ipm() // b168 f1f8 } } -void m68000_device::eor_w_dd_dais_ipm() // b170 f1f8 +void m68000_mcu_device::eor_w_dd_dais_ipm() // b170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -174955,7 +174955,7 @@ adsw2: } } -void m68000_device::eor_w_dd_adr16_ipm() // b178 f1ff +void m68000_mcu_device::eor_w_dd_adr16_ipm() // b178 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -175078,7 +175078,7 @@ void m68000_device::eor_w_dd_adr16_ipm() // b178 f1ff } } -void m68000_device::eor_w_dd_adr32_ipm() // b179 f1ff +void m68000_mcu_device::eor_w_dd_adr32_ipm() // b179 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -175226,7 +175226,7 @@ void m68000_device::eor_w_dd_adr32_ipm() // b179 f1ff } } -void m68000_device::eor_l_dd_ds_ipm() // b180 f1f8 +void m68000_mcu_device::eor_l_dd_ds_ipm() // b180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -175284,7 +175284,7 @@ void m68000_device::eor_l_dd_ds_ipm() // b180 f1f8 } } -void m68000_device::cmpm_l_aips_aipd_ipm() // b188 f1f8 +void m68000_mcu_device::cmpm_l_aips_aipd_ipm() // b188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -175435,7 +175435,7 @@ void m68000_device::cmpm_l_aips_aipd_ipm() // b188 f1f8 } } -void m68000_device::eor_l_dd_ais_ipm() // b190 f1f8 +void m68000_mcu_device::eor_l_dd_ais_ipm() // b190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -175583,7 +175583,7 @@ void m68000_device::eor_l_dd_ais_ipm() // b190 f1f8 } } -void m68000_device::eor_l_dd_aips_ipm() // b198 f1f8 +void m68000_mcu_device::eor_l_dd_aips_ipm() // b198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -175735,7 +175735,7 @@ void m68000_device::eor_l_dd_aips_ipm() // b198 f1f8 } } -void m68000_device::eor_l_dd_pais_ipm() // b1a0 f1f8 +void m68000_mcu_device::eor_l_dd_pais_ipm() // b1a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -175888,7 +175888,7 @@ void m68000_device::eor_l_dd_pais_ipm() // b1a0 f1f8 } } -void m68000_device::eor_l_dd_das_ipm() // b1a8 f1f8 +void m68000_mcu_device::eor_l_dd_das_ipm() // b1a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -176061,7 +176061,7 @@ void m68000_device::eor_l_dd_das_ipm() // b1a8 f1f8 } } -void m68000_device::eor_l_dd_dais_ipm() // b1b0 f1f8 +void m68000_mcu_device::eor_l_dd_dais_ipm() // b1b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -176277,7 +176277,7 @@ adsl2: } } -void m68000_device::eor_l_dd_adr16_ipm() // b1b8 f1ff +void m68000_mcu_device::eor_l_dd_adr16_ipm() // b1b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -176453,7 +176453,7 @@ void m68000_device::eor_l_dd_adr16_ipm() // b1b8 f1ff } } -void m68000_device::eor_l_dd_adr32_ipm() // b1b9 f1ff +void m68000_mcu_device::eor_l_dd_adr32_ipm() // b1b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -176654,7 +176654,7 @@ void m68000_device::eor_l_dd_adr32_ipm() // b1b9 f1ff } } -void m68000_device::cmpa_l_ds_ad_ipm() // b1c0 f1f8 +void m68000_mcu_device::cmpa_l_ds_ad_ipm() // b1c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -176707,7 +176707,7 @@ void m68000_device::cmpa_l_ds_ad_ipm() // b1c0 f1f8 } } -void m68000_device::cmpa_l_as_ad_ipm() // b1c8 f1f8 +void m68000_mcu_device::cmpa_l_as_ad_ipm() // b1c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -176760,7 +176760,7 @@ void m68000_device::cmpa_l_as_ad_ipm() // b1c8 f1f8 } } -void m68000_device::cmpa_l_ais_ad_ipm() // b1d0 f1f8 +void m68000_mcu_device::cmpa_l_ais_ad_ipm() // b1d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -176864,7 +176864,7 @@ void m68000_device::cmpa_l_ais_ad_ipm() // b1d0 f1f8 } } -void m68000_device::cmpa_l_aips_ad_ipm() // b1d8 f1f8 +void m68000_mcu_device::cmpa_l_aips_ad_ipm() // b1d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -176971,7 +176971,7 @@ void m68000_device::cmpa_l_aips_ad_ipm() // b1d8 f1f8 } } -void m68000_device::cmpa_l_pais_ad_ipm() // b1e0 f1f8 +void m68000_mcu_device::cmpa_l_pais_ad_ipm() // b1e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -177079,7 +177079,7 @@ void m68000_device::cmpa_l_pais_ad_ipm() // b1e0 f1f8 } } -void m68000_device::cmpa_l_das_ad_ipm() // b1e8 f1f8 +void m68000_mcu_device::cmpa_l_das_ad_ipm() // b1e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -177207,7 +177207,7 @@ void m68000_device::cmpa_l_das_ad_ipm() // b1e8 f1f8 } } -void m68000_device::cmpa_l_dais_ad_ipm() // b1f0 f1f8 +void m68000_mcu_device::cmpa_l_dais_ad_ipm() // b1f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -177376,7 +177376,7 @@ adsl2: } } -void m68000_device::cmpa_l_adr16_ad_ipm() // b1f8 f1ff +void m68000_mcu_device::cmpa_l_adr16_ad_ipm() // b1f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -177506,7 +177506,7 @@ void m68000_device::cmpa_l_adr16_ad_ipm() // b1f8 f1ff } } -void m68000_device::cmpa_l_adr32_ad_ipm() // b1f9 f1ff +void m68000_mcu_device::cmpa_l_adr32_ad_ipm() // b1f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -177660,7 +177660,7 @@ void m68000_device::cmpa_l_adr32_ad_ipm() // b1f9 f1ff } } -void m68000_device::cmpa_l_dpc_ad_ipm() // b1fa f1ff +void m68000_mcu_device::cmpa_l_dpc_ad_ipm() // b1fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -177787,7 +177787,7 @@ void m68000_device::cmpa_l_dpc_ad_ipm() // b1fa f1ff } } -void m68000_device::cmpa_l_dpci_ad_ipm() // b1fb f1ff +void m68000_mcu_device::cmpa_l_dpci_ad_ipm() // b1fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -177955,7 +177955,7 @@ adsl2: } } -void m68000_device::cmpa_l_imm32_ad_ipm() // b1fc f1ff +void m68000_mcu_device::cmpa_l_imm32_ad_ipm() // b1fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -178058,7 +178058,7 @@ void m68000_device::cmpa_l_imm32_ad_ipm() // b1fc f1ff } } -void m68000_device::and_b_ds_dd_ipm() // c000 f1f8 +void m68000_mcu_device::and_b_ds_dd_ipm() // c000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -178108,7 +178108,7 @@ void m68000_device::and_b_ds_dd_ipm() // c000 f1f8 } } -void m68000_device::and_b_ais_dd_ipm() // c010 f1f8 +void m68000_mcu_device::and_b_ais_dd_ipm() // c010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178182,7 +178182,7 @@ void m68000_device::and_b_ais_dd_ipm() // c010 f1f8 } } -void m68000_device::and_b_aips_dd_ipm() // c018 f1f8 +void m68000_mcu_device::and_b_aips_dd_ipm() // c018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178261,7 +178261,7 @@ void m68000_device::and_b_aips_dd_ipm() // c018 f1f8 } } -void m68000_device::and_b_pais_dd_ipm() // c020 f1f8 +void m68000_mcu_device::and_b_pais_dd_ipm() // c020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178342,7 +178342,7 @@ void m68000_device::and_b_pais_dd_ipm() // c020 f1f8 } } -void m68000_device::and_b_das_dd_ipm() // c028 f1f8 +void m68000_mcu_device::and_b_das_dd_ipm() // c028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178442,7 +178442,7 @@ void m68000_device::and_b_das_dd_ipm() // c028 f1f8 } } -void m68000_device::and_b_dais_dd_ipm() // c030 f1f8 +void m68000_mcu_device::and_b_dais_dd_ipm() // c030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -178585,7 +178585,7 @@ adsw2: } } -void m68000_device::and_b_adr16_dd_ipm() // c038 f1ff +void m68000_mcu_device::and_b_adr16_dd_ipm() // c038 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -178684,7 +178684,7 @@ void m68000_device::and_b_adr16_dd_ipm() // c038 f1ff } } -void m68000_device::and_b_adr32_dd_ipm() // c039 f1ff +void m68000_mcu_device::and_b_adr32_dd_ipm() // c039 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -178808,7 +178808,7 @@ void m68000_device::and_b_adr32_dd_ipm() // c039 f1ff } } -void m68000_device::and_b_dpc_dd_ipm() // c03a f1ff +void m68000_mcu_device::and_b_dpc_dd_ipm() // c03a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -178907,7 +178907,7 @@ void m68000_device::and_b_dpc_dd_ipm() // c03a f1ff } } -void m68000_device::and_b_dpci_dd_ipm() // c03b f1ff +void m68000_mcu_device::and_b_dpci_dd_ipm() // c03b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -179049,7 +179049,7 @@ adsw2: } } -void m68000_device::and_b_imm8_dd_ipm() // c03c f1ff +void m68000_mcu_device::and_b_imm8_dd_ipm() // c03c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -179126,7 +179126,7 @@ void m68000_device::and_b_imm8_dd_ipm() // c03c f1ff } } -void m68000_device::and_w_ds_dd_ipm() // c040 f1f8 +void m68000_mcu_device::and_w_ds_dd_ipm() // c040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -179176,7 +179176,7 @@ void m68000_device::and_w_ds_dd_ipm() // c040 f1f8 } } -void m68000_device::and_w_ais_dd_ipm() // c050 f1f8 +void m68000_mcu_device::and_w_ais_dd_ipm() // c050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179254,7 +179254,7 @@ void m68000_device::and_w_ais_dd_ipm() // c050 f1f8 } } -void m68000_device::and_w_aips_dd_ipm() // c058 f1f8 +void m68000_mcu_device::and_w_aips_dd_ipm() // c058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179337,7 +179337,7 @@ void m68000_device::and_w_aips_dd_ipm() // c058 f1f8 } } -void m68000_device::and_w_pais_dd_ipm() // c060 f1f8 +void m68000_mcu_device::and_w_pais_dd_ipm() // c060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179422,7 +179422,7 @@ void m68000_device::and_w_pais_dd_ipm() // c060 f1f8 } } -void m68000_device::and_w_das_dd_ipm() // c068 f1f8 +void m68000_mcu_device::and_w_das_dd_ipm() // c068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179526,7 +179526,7 @@ void m68000_device::and_w_das_dd_ipm() // c068 f1f8 } } -void m68000_device::and_w_dais_dd_ipm() // c070 f1f8 +void m68000_mcu_device::and_w_dais_dd_ipm() // c070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -179673,7 +179673,7 @@ adsw2: } } -void m68000_device::and_w_adr16_dd_ipm() // c078 f1ff +void m68000_mcu_device::and_w_adr16_dd_ipm() // c078 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -179776,7 +179776,7 @@ void m68000_device::and_w_adr16_dd_ipm() // c078 f1ff } } -void m68000_device::and_w_adr32_dd_ipm() // c079 f1ff +void m68000_mcu_device::and_w_adr32_dd_ipm() // c079 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -179904,7 +179904,7 @@ void m68000_device::and_w_adr32_dd_ipm() // c079 f1ff } } -void m68000_device::and_w_dpc_dd_ipm() // c07a f1ff +void m68000_mcu_device::and_w_dpc_dd_ipm() // c07a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -180007,7 +180007,7 @@ void m68000_device::and_w_dpc_dd_ipm() // c07a f1ff } } -void m68000_device::and_w_dpci_dd_ipm() // c07b f1ff +void m68000_mcu_device::and_w_dpci_dd_ipm() // c07b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -180153,7 +180153,7 @@ adsw2: } } -void m68000_device::and_w_imm16_dd_ipm() // c07c f1ff +void m68000_mcu_device::and_w_imm16_dd_ipm() // c07c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -180230,7 +180230,7 @@ void m68000_device::and_w_imm16_dd_ipm() // c07c f1ff } } -void m68000_device::and_l_ds_dd_ipm() // c080 f1f8 +void m68000_mcu_device::and_l_ds_dd_ipm() // c080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -180289,7 +180289,7 @@ void m68000_device::and_l_ds_dd_ipm() // c080 f1f8 } } -void m68000_device::and_l_ais_dd_ipm() // c090 f1f8 +void m68000_mcu_device::and_l_ais_dd_ipm() // c090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180397,7 +180397,7 @@ void m68000_device::and_l_ais_dd_ipm() // c090 f1f8 } } -void m68000_device::and_l_aips_dd_ipm() // c098 f1f8 +void m68000_mcu_device::and_l_aips_dd_ipm() // c098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180509,7 +180509,7 @@ void m68000_device::and_l_aips_dd_ipm() // c098 f1f8 } } -void m68000_device::and_l_pais_dd_ipm() // c0a0 f1f8 +void m68000_mcu_device::and_l_pais_dd_ipm() // c0a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180622,7 +180622,7 @@ void m68000_device::and_l_pais_dd_ipm() // c0a0 f1f8 } } -void m68000_device::and_l_das_dd_ipm() // c0a8 f1f8 +void m68000_mcu_device::and_l_das_dd_ipm() // c0a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180755,7 +180755,7 @@ void m68000_device::and_l_das_dd_ipm() // c0a8 f1f8 } } -void m68000_device::and_l_dais_dd_ipm() // c0b0 f1f8 +void m68000_mcu_device::and_l_dais_dd_ipm() // c0b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -180931,7 +180931,7 @@ adsl2: } } -void m68000_device::and_l_adr16_dd_ipm() // c0b8 f1ff +void m68000_mcu_device::and_l_adr16_dd_ipm() // c0b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -181067,7 +181067,7 @@ void m68000_device::and_l_adr16_dd_ipm() // c0b8 f1ff } } -void m68000_device::and_l_adr32_dd_ipm() // c0b9 f1ff +void m68000_mcu_device::and_l_adr32_dd_ipm() // c0b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -181228,7 +181228,7 @@ void m68000_device::and_l_adr32_dd_ipm() // c0b9 f1ff } } -void m68000_device::and_l_dpc_dd_ipm() // c0ba f1ff +void m68000_mcu_device::and_l_dpc_dd_ipm() // c0ba f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -181360,7 +181360,7 @@ void m68000_device::and_l_dpc_dd_ipm() // c0ba f1ff } } -void m68000_device::and_l_dpci_dd_ipm() // c0bb f1ff +void m68000_mcu_device::and_l_dpci_dd_ipm() // c0bb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -181535,7 +181535,7 @@ adsl2: } } -void m68000_device::and_l_imm32_dd_ipm() // c0bc f1ff +void m68000_mcu_device::and_l_imm32_dd_ipm() // c0bc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -181646,7 +181646,7 @@ void m68000_device::and_l_imm32_dd_ipm() // c0bc f1ff } } -void m68000_device::mulu_w_ds_dd_ipm() // c0c0 f1f8 +void m68000_mcu_device::mulu_w_ds_dd_ipm() // c0c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -181732,7 +181732,7 @@ mulm6: } } -void m68000_device::mulu_w_ais_dd_ipm() // c0d0 f1f8 +void m68000_mcu_device::mulu_w_ais_dd_ipm() // c0d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181845,7 +181845,7 @@ mulm6: } } -void m68000_device::mulu_w_aips_dd_ipm() // c0d8 f1f8 +void m68000_mcu_device::mulu_w_aips_dd_ipm() // c0d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -181962,7 +181962,7 @@ mulm6: } } -void m68000_device::mulu_w_pais_dd_ipm() // c0e0 f1f8 +void m68000_mcu_device::mulu_w_pais_dd_ipm() // c0e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182081,7 +182081,7 @@ mulm6: } } -void m68000_device::mulu_w_das_dd_ipm() // c0e8 f1f8 +void m68000_mcu_device::mulu_w_das_dd_ipm() // c0e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182219,7 +182219,7 @@ mulm6: } } -void m68000_device::mulu_w_dais_dd_ipm() // c0f0 f1f8 +void m68000_mcu_device::mulu_w_dais_dd_ipm() // c0f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -182398,7 +182398,7 @@ mulm6: } } -void m68000_device::mulu_w_adr16_dd_ipm() // c0f8 f1ff +void m68000_mcu_device::mulu_w_adr16_dd_ipm() // c0f8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -182535,7 +182535,7 @@ mulm6: } } -void m68000_device::mulu_w_adr32_dd_ipm() // c0f9 f1ff +void m68000_mcu_device::mulu_w_adr32_dd_ipm() // c0f9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -182696,7 +182696,7 @@ mulm6: } } -void m68000_device::mulu_w_dpc_dd_ipm() // c0fa f1ff +void m68000_mcu_device::mulu_w_dpc_dd_ipm() // c0fa f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -182833,7 +182833,7 @@ mulm6: } } -void m68000_device::mulu_w_dpci_dd_ipm() // c0fb f1ff +void m68000_mcu_device::mulu_w_dpci_dd_ipm() // c0fb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -183011,7 +183011,7 @@ mulm6: } } -void m68000_device::mulu_w_imm16_dd_ipm() // c0fc f1ff +void m68000_mcu_device::mulu_w_imm16_dd_ipm() // c0fc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -183123,7 +183123,7 @@ mulm6: } } -void m68000_device::abcd_ds_dd_ipm() // c100 f1f8 +void m68000_mcu_device::abcd_ds_dd_ipm() // c100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -183176,7 +183176,7 @@ void m68000_device::abcd_ds_dd_ipm() // c100 f1f8 } } -void m68000_device::abcd_pais_paid_ipm() // c108 f1f8 +void m68000_mcu_device::abcd_pais_paid_ipm() // c108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -183290,7 +183290,7 @@ void m68000_device::abcd_pais_paid_ipm() // c108 f1f8 } } -void m68000_device::and_b_dd_ais_ipm() // c110 f1f8 +void m68000_mcu_device::and_b_dd_ais_ipm() // c110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183378,7 +183378,7 @@ void m68000_device::and_b_dd_ais_ipm() // c110 f1f8 } } -void m68000_device::and_b_dd_aips_ipm() // c118 f1f8 +void m68000_mcu_device::and_b_dd_aips_ipm() // c118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183471,7 +183471,7 @@ void m68000_device::and_b_dd_aips_ipm() // c118 f1f8 } } -void m68000_device::and_b_dd_pais_ipm() // c120 f1f8 +void m68000_mcu_device::and_b_dd_pais_ipm() // c120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183566,7 +183566,7 @@ void m68000_device::and_b_dd_pais_ipm() // c120 f1f8 } } -void m68000_device::and_b_dd_das_ipm() // c128 f1f8 +void m68000_mcu_device::and_b_dd_das_ipm() // c128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183680,7 +183680,7 @@ void m68000_device::and_b_dd_das_ipm() // c128 f1f8 } } -void m68000_device::and_b_dd_dais_ipm() // c130 f1f8 +void m68000_mcu_device::and_b_dd_dais_ipm() // c130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -183837,7 +183837,7 @@ adsw2: } } -void m68000_device::and_b_dd_adr16_ipm() // c138 f1ff +void m68000_mcu_device::and_b_dd_adr16_ipm() // c138 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -183950,7 +183950,7 @@ void m68000_device::and_b_dd_adr16_ipm() // c138 f1ff } } -void m68000_device::and_b_dd_adr32_ipm() // c139 f1ff +void m68000_mcu_device::and_b_dd_adr32_ipm() // c139 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -184088,7 +184088,7 @@ void m68000_device::and_b_dd_adr32_ipm() // c139 f1ff } } -void m68000_device::exg_dd_ds_ipm() // c140 f1f8 +void m68000_mcu_device::exg_dd_ds_ipm() // c140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -184139,7 +184139,7 @@ void m68000_device::exg_dd_ds_ipm() // c140 f1f8 } } -void m68000_device::exg_ad_as_ipm() // c148 f1f8 +void m68000_mcu_device::exg_ad_as_ipm() // c148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -184190,7 +184190,7 @@ void m68000_device::exg_ad_as_ipm() // c148 f1f8 } } -void m68000_device::and_w_dd_ais_ipm() // c150 f1f8 +void m68000_mcu_device::and_w_dd_ais_ipm() // c150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -184288,7 +184288,7 @@ void m68000_device::and_w_dd_ais_ipm() // c150 f1f8 } } -void m68000_device::and_w_dd_aips_ipm() // c158 f1f8 +void m68000_mcu_device::and_w_dd_aips_ipm() // c158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -184391,7 +184391,7 @@ void m68000_device::and_w_dd_aips_ipm() // c158 f1f8 } } -void m68000_device::and_w_dd_pais_ipm() // c160 f1f8 +void m68000_mcu_device::and_w_dd_pais_ipm() // c160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -184496,7 +184496,7 @@ void m68000_device::and_w_dd_pais_ipm() // c160 f1f8 } } -void m68000_device::and_w_dd_das_ipm() // c168 f1f8 +void m68000_mcu_device::and_w_dd_das_ipm() // c168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -184620,7 +184620,7 @@ void m68000_device::and_w_dd_das_ipm() // c168 f1f8 } } -void m68000_device::and_w_dd_dais_ipm() // c170 f1f8 +void m68000_mcu_device::and_w_dd_dais_ipm() // c170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -184787,7 +184787,7 @@ adsw2: } } -void m68000_device::and_w_dd_adr16_ipm() // c178 f1ff +void m68000_mcu_device::and_w_dd_adr16_ipm() // c178 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -184910,7 +184910,7 @@ void m68000_device::and_w_dd_adr16_ipm() // c178 f1ff } } -void m68000_device::and_w_dd_adr32_ipm() // c179 f1ff +void m68000_mcu_device::and_w_dd_adr32_ipm() // c179 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -185058,7 +185058,7 @@ void m68000_device::and_w_dd_adr32_ipm() // c179 f1ff } } -void m68000_device::exg_dd_as_ipm() // c188 f1f8 +void m68000_mcu_device::exg_dd_as_ipm() // c188 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -185109,7 +185109,7 @@ void m68000_device::exg_dd_as_ipm() // c188 f1f8 } } -void m68000_device::and_l_dd_ais_ipm() // c190 f1f8 +void m68000_mcu_device::and_l_dd_ais_ipm() // c190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -185257,7 +185257,7 @@ void m68000_device::and_l_dd_ais_ipm() // c190 f1f8 } } -void m68000_device::and_l_dd_aips_ipm() // c198 f1f8 +void m68000_mcu_device::and_l_dd_aips_ipm() // c198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -185409,7 +185409,7 @@ void m68000_device::and_l_dd_aips_ipm() // c198 f1f8 } } -void m68000_device::and_l_dd_pais_ipm() // c1a0 f1f8 +void m68000_mcu_device::and_l_dd_pais_ipm() // c1a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -185562,7 +185562,7 @@ void m68000_device::and_l_dd_pais_ipm() // c1a0 f1f8 } } -void m68000_device::and_l_dd_das_ipm() // c1a8 f1f8 +void m68000_mcu_device::and_l_dd_das_ipm() // c1a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -185735,7 +185735,7 @@ void m68000_device::and_l_dd_das_ipm() // c1a8 f1f8 } } -void m68000_device::and_l_dd_dais_ipm() // c1b0 f1f8 +void m68000_mcu_device::and_l_dd_dais_ipm() // c1b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -185951,7 +185951,7 @@ adsl2: } } -void m68000_device::and_l_dd_adr16_ipm() // c1b8 f1ff +void m68000_mcu_device::and_l_dd_adr16_ipm() // c1b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -186127,7 +186127,7 @@ void m68000_device::and_l_dd_adr16_ipm() // c1b8 f1ff } } -void m68000_device::and_l_dd_adr32_ipm() // c1b9 f1ff +void m68000_mcu_device::and_l_dd_adr32_ipm() // c1b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -186328,7 +186328,7 @@ void m68000_device::and_l_dd_adr32_ipm() // c1b9 f1ff } } -void m68000_device::muls_w_ds_dd_ipm() // c1c0 f1f8 +void m68000_mcu_device::muls_w_ds_dd_ipm() // c1c0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -186423,7 +186423,7 @@ mulm3: } } -void m68000_device::muls_w_ais_dd_ipm() // c1d0 f1f8 +void m68000_mcu_device::muls_w_ais_dd_ipm() // c1d0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -186545,7 +186545,7 @@ mulm3: } } -void m68000_device::muls_w_aips_dd_ipm() // c1d8 f1f8 +void m68000_mcu_device::muls_w_aips_dd_ipm() // c1d8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -186671,7 +186671,7 @@ mulm3: } } -void m68000_device::muls_w_pais_dd_ipm() // c1e0 f1f8 +void m68000_mcu_device::muls_w_pais_dd_ipm() // c1e0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -186799,7 +186799,7 @@ mulm3: } } -void m68000_device::muls_w_das_dd_ipm() // c1e8 f1f8 +void m68000_mcu_device::muls_w_das_dd_ipm() // c1e8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -186946,7 +186946,7 @@ mulm3: } } -void m68000_device::muls_w_dais_dd_ipm() // c1f0 f1f8 +void m68000_mcu_device::muls_w_dais_dd_ipm() // c1f0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -187134,7 +187134,7 @@ mulm3: } } -void m68000_device::muls_w_adr16_dd_ipm() // c1f8 f1ff +void m68000_mcu_device::muls_w_adr16_dd_ipm() // c1f8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -187280,7 +187280,7 @@ mulm3: } } -void m68000_device::muls_w_adr32_dd_ipm() // c1f9 f1ff +void m68000_mcu_device::muls_w_adr32_dd_ipm() // c1f9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -187450,7 +187450,7 @@ mulm3: } } -void m68000_device::muls_w_dpc_dd_ipm() // c1fa f1ff +void m68000_mcu_device::muls_w_dpc_dd_ipm() // c1fa f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -187596,7 +187596,7 @@ mulm3: } } -void m68000_device::muls_w_dpci_dd_ipm() // c1fb f1ff +void m68000_mcu_device::muls_w_dpci_dd_ipm() // c1fb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -187783,7 +187783,7 @@ mulm3: } } -void m68000_device::muls_w_imm16_dd_ipm() // c1fc f1ff +void m68000_mcu_device::muls_w_imm16_dd_ipm() // c1fc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -187904,7 +187904,7 @@ mulm3: } } -void m68000_device::add_b_ds_dd_ipm() // d000 f1f8 +void m68000_mcu_device::add_b_ds_dd_ipm() // d000 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -187953,7 +187953,7 @@ void m68000_device::add_b_ds_dd_ipm() // d000 f1f8 } } -void m68000_device::add_b_ais_dd_ipm() // d010 f1f8 +void m68000_mcu_device::add_b_ais_dd_ipm() // d010 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -188025,7 +188025,7 @@ void m68000_device::add_b_ais_dd_ipm() // d010 f1f8 } } -void m68000_device::add_b_aips_dd_ipm() // d018 f1f8 +void m68000_mcu_device::add_b_aips_dd_ipm() // d018 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -188101,7 +188101,7 @@ void m68000_device::add_b_aips_dd_ipm() // d018 f1f8 } } -void m68000_device::add_b_pais_dd_ipm() // d020 f1f8 +void m68000_mcu_device::add_b_pais_dd_ipm() // d020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -188179,7 +188179,7 @@ void m68000_device::add_b_pais_dd_ipm() // d020 f1f8 } } -void m68000_device::add_b_das_dd_ipm() // d028 f1f8 +void m68000_mcu_device::add_b_das_dd_ipm() // d028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -188276,7 +188276,7 @@ void m68000_device::add_b_das_dd_ipm() // d028 f1f8 } } -void m68000_device::add_b_dais_dd_ipm() // d030 f1f8 +void m68000_mcu_device::add_b_dais_dd_ipm() // d030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -188414,7 +188414,7 @@ adsw2: } } -void m68000_device::add_b_adr16_dd_ipm() // d038 f1ff +void m68000_mcu_device::add_b_adr16_dd_ipm() // d038 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -188510,7 +188510,7 @@ void m68000_device::add_b_adr16_dd_ipm() // d038 f1ff } } -void m68000_device::add_b_adr32_dd_ipm() // d039 f1ff +void m68000_mcu_device::add_b_adr32_dd_ipm() // d039 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -188630,7 +188630,7 @@ void m68000_device::add_b_adr32_dd_ipm() // d039 f1ff } } -void m68000_device::add_b_dpc_dd_ipm() // d03a f1ff +void m68000_mcu_device::add_b_dpc_dd_ipm() // d03a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -188726,7 +188726,7 @@ void m68000_device::add_b_dpc_dd_ipm() // d03a f1ff } } -void m68000_device::add_b_dpci_dd_ipm() // d03b f1ff +void m68000_mcu_device::add_b_dpci_dd_ipm() // d03b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -188863,7 +188863,7 @@ adsw2: } } -void m68000_device::add_b_imm8_dd_ipm() // d03c f1ff +void m68000_mcu_device::add_b_imm8_dd_ipm() // d03c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -188938,7 +188938,7 @@ void m68000_device::add_b_imm8_dd_ipm() // d03c f1ff } } -void m68000_device::add_w_ds_dd_ipm() // d040 f1f8 +void m68000_mcu_device::add_w_ds_dd_ipm() // d040 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -188987,7 +188987,7 @@ void m68000_device::add_w_ds_dd_ipm() // d040 f1f8 } } -void m68000_device::add_w_as_dd_ipm() // d048 f1f8 +void m68000_mcu_device::add_w_as_dd_ipm() // d048 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -189036,7 +189036,7 @@ void m68000_device::add_w_as_dd_ipm() // d048 f1f8 } } -void m68000_device::add_w_ais_dd_ipm() // d050 f1f8 +void m68000_mcu_device::add_w_ais_dd_ipm() // d050 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -189112,7 +189112,7 @@ void m68000_device::add_w_ais_dd_ipm() // d050 f1f8 } } -void m68000_device::add_w_aips_dd_ipm() // d058 f1f8 +void m68000_mcu_device::add_w_aips_dd_ipm() // d058 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -189192,7 +189192,7 @@ void m68000_device::add_w_aips_dd_ipm() // d058 f1f8 } } -void m68000_device::add_w_pais_dd_ipm() // d060 f1f8 +void m68000_mcu_device::add_w_pais_dd_ipm() // d060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -189274,7 +189274,7 @@ void m68000_device::add_w_pais_dd_ipm() // d060 f1f8 } } -void m68000_device::add_w_das_dd_ipm() // d068 f1f8 +void m68000_mcu_device::add_w_das_dd_ipm() // d068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -189375,7 +189375,7 @@ void m68000_device::add_w_das_dd_ipm() // d068 f1f8 } } -void m68000_device::add_w_dais_dd_ipm() // d070 f1f8 +void m68000_mcu_device::add_w_dais_dd_ipm() // d070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -189517,7 +189517,7 @@ adsw2: } } -void m68000_device::add_w_adr16_dd_ipm() // d078 f1ff +void m68000_mcu_device::add_w_adr16_dd_ipm() // d078 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -189617,7 +189617,7 @@ void m68000_device::add_w_adr16_dd_ipm() // d078 f1ff } } -void m68000_device::add_w_adr32_dd_ipm() // d079 f1ff +void m68000_mcu_device::add_w_adr32_dd_ipm() // d079 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -189741,7 +189741,7 @@ void m68000_device::add_w_adr32_dd_ipm() // d079 f1ff } } -void m68000_device::add_w_dpc_dd_ipm() // d07a f1ff +void m68000_mcu_device::add_w_dpc_dd_ipm() // d07a f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -189841,7 +189841,7 @@ void m68000_device::add_w_dpc_dd_ipm() // d07a f1ff } } -void m68000_device::add_w_dpci_dd_ipm() // d07b f1ff +void m68000_mcu_device::add_w_dpci_dd_ipm() // d07b f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -189982,7 +189982,7 @@ adsw2: } } -void m68000_device::add_w_imm16_dd_ipm() // d07c f1ff +void m68000_mcu_device::add_w_imm16_dd_ipm() // d07c f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -190057,7 +190057,7 @@ void m68000_device::add_w_imm16_dd_ipm() // d07c f1ff } } -void m68000_device::add_l_ds_dd_ipm() // d080 f1f8 +void m68000_mcu_device::add_l_ds_dd_ipm() // d080 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -190114,7 +190114,7 @@ void m68000_device::add_l_ds_dd_ipm() // d080 f1f8 } } -void m68000_device::add_l_as_dd_ipm() // d088 f1f8 +void m68000_mcu_device::add_l_as_dd_ipm() // d088 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -190171,7 +190171,7 @@ void m68000_device::add_l_as_dd_ipm() // d088 f1f8 } } -void m68000_device::add_l_ais_dd_ipm() // d090 f1f8 +void m68000_mcu_device::add_l_ais_dd_ipm() // d090 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -190277,7 +190277,7 @@ void m68000_device::add_l_ais_dd_ipm() // d090 f1f8 } } -void m68000_device::add_l_aips_dd_ipm() // d098 f1f8 +void m68000_mcu_device::add_l_aips_dd_ipm() // d098 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -190386,7 +190386,7 @@ void m68000_device::add_l_aips_dd_ipm() // d098 f1f8 } } -void m68000_device::add_l_pais_dd_ipm() // d0a0 f1f8 +void m68000_mcu_device::add_l_pais_dd_ipm() // d0a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -190496,7 +190496,7 @@ void m68000_device::add_l_pais_dd_ipm() // d0a0 f1f8 } } -void m68000_device::add_l_das_dd_ipm() // d0a8 f1f8 +void m68000_mcu_device::add_l_das_dd_ipm() // d0a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -190626,7 +190626,7 @@ void m68000_device::add_l_das_dd_ipm() // d0a8 f1f8 } } -void m68000_device::add_l_dais_dd_ipm() // d0b0 f1f8 +void m68000_mcu_device::add_l_dais_dd_ipm() // d0b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -190797,7 +190797,7 @@ adsl2: } } -void m68000_device::add_l_adr16_dd_ipm() // d0b8 f1ff +void m68000_mcu_device::add_l_adr16_dd_ipm() // d0b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -190929,7 +190929,7 @@ void m68000_device::add_l_adr16_dd_ipm() // d0b8 f1ff } } -void m68000_device::add_l_adr32_dd_ipm() // d0b9 f1ff +void m68000_mcu_device::add_l_adr32_dd_ipm() // d0b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -191085,7 +191085,7 @@ void m68000_device::add_l_adr32_dd_ipm() // d0b9 f1ff } } -void m68000_device::add_l_dpc_dd_ipm() // d0ba f1ff +void m68000_mcu_device::add_l_dpc_dd_ipm() // d0ba f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -191214,7 +191214,7 @@ void m68000_device::add_l_dpc_dd_ipm() // d0ba f1ff } } -void m68000_device::add_l_dpci_dd_ipm() // d0bb f1ff +void m68000_mcu_device::add_l_dpci_dd_ipm() // d0bb f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -191384,7 +191384,7 @@ adsl2: } } -void m68000_device::add_l_imm32_dd_ipm() // d0bc f1ff +void m68000_mcu_device::add_l_imm32_dd_ipm() // d0bc f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -191491,7 +191491,7 @@ void m68000_device::add_l_imm32_dd_ipm() // d0bc f1ff } } -void m68000_device::adda_w_ds_ad_ipm() // d0c0 f1f8 +void m68000_mcu_device::adda_w_ds_ad_ipm() // d0c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -191546,7 +191546,7 @@ void m68000_device::adda_w_ds_ad_ipm() // d0c0 f1f8 } } -void m68000_device::adda_w_as_ad_ipm() // d0c8 f1f8 +void m68000_mcu_device::adda_w_as_ad_ipm() // d0c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -191601,7 +191601,7 @@ void m68000_device::adda_w_as_ad_ipm() // d0c8 f1f8 } } -void m68000_device::adda_w_ais_ad_ipm() // d0d0 f1f8 +void m68000_mcu_device::adda_w_ais_ad_ipm() // d0d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -191683,7 +191683,7 @@ void m68000_device::adda_w_ais_ad_ipm() // d0d0 f1f8 } } -void m68000_device::adda_w_aips_ad_ipm() // d0d8 f1f8 +void m68000_mcu_device::adda_w_aips_ad_ipm() // d0d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -191769,7 +191769,7 @@ void m68000_device::adda_w_aips_ad_ipm() // d0d8 f1f8 } } -void m68000_device::adda_w_pais_ad_ipm() // d0e0 f1f8 +void m68000_mcu_device::adda_w_pais_ad_ipm() // d0e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -191857,7 +191857,7 @@ void m68000_device::adda_w_pais_ad_ipm() // d0e0 f1f8 } } -void m68000_device::adda_w_das_ad_ipm() // d0e8 f1f8 +void m68000_mcu_device::adda_w_das_ad_ipm() // d0e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -191964,7 +191964,7 @@ void m68000_device::adda_w_das_ad_ipm() // d0e8 f1f8 } } -void m68000_device::adda_w_dais_ad_ipm() // d0f0 f1f8 +void m68000_mcu_device::adda_w_dais_ad_ipm() // d0f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -192112,7 +192112,7 @@ adsw2: } } -void m68000_device::adda_w_adr16_ad_ipm() // d0f8 f1ff +void m68000_mcu_device::adda_w_adr16_ad_ipm() // d0f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -192218,7 +192218,7 @@ void m68000_device::adda_w_adr16_ad_ipm() // d0f8 f1ff } } -void m68000_device::adda_w_adr32_ad_ipm() // d0f9 f1ff +void m68000_mcu_device::adda_w_adr32_ad_ipm() // d0f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -192348,7 +192348,7 @@ void m68000_device::adda_w_adr32_ad_ipm() // d0f9 f1ff } } -void m68000_device::adda_w_dpc_ad_ipm() // d0fa f1ff +void m68000_mcu_device::adda_w_dpc_ad_ipm() // d0fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -192454,7 +192454,7 @@ void m68000_device::adda_w_dpc_ad_ipm() // d0fa f1ff } } -void m68000_device::adda_w_dpci_ad_ipm() // d0fb f1ff +void m68000_mcu_device::adda_w_dpci_ad_ipm() // d0fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -192601,7 +192601,7 @@ adsw2: } } -void m68000_device::adda_w_imm16_ad_ipm() // d0fc f1ff +void m68000_mcu_device::adda_w_imm16_ad_ipm() // d0fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -192682,7 +192682,7 @@ void m68000_device::adda_w_imm16_ad_ipm() // d0fc f1ff } } -void m68000_device::addx_b_ds_dd_ipm() // d100 f1f8 +void m68000_mcu_device::addx_b_ds_dd_ipm() // d100 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -192732,7 +192732,7 @@ void m68000_device::addx_b_ds_dd_ipm() // d100 f1f8 } } -void m68000_device::addx_b_pais_paid_ipm() // d108 f1f8 +void m68000_mcu_device::addx_b_pais_paid_ipm() // d108 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -192848,7 +192848,7 @@ void m68000_device::addx_b_pais_paid_ipm() // d108 f1f8 } } -void m68000_device::add_b_dd_ais_ipm() // d110 f1f8 +void m68000_mcu_device::add_b_dd_ais_ipm() // d110 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -192934,7 +192934,7 @@ void m68000_device::add_b_dd_ais_ipm() // d110 f1f8 } } -void m68000_device::add_b_dd_aips_ipm() // d118 f1f8 +void m68000_mcu_device::add_b_dd_aips_ipm() // d118 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -193024,7 +193024,7 @@ void m68000_device::add_b_dd_aips_ipm() // d118 f1f8 } } -void m68000_device::add_b_dd_pais_ipm() // d120 f1f8 +void m68000_mcu_device::add_b_dd_pais_ipm() // d120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -193116,7 +193116,7 @@ void m68000_device::add_b_dd_pais_ipm() // d120 f1f8 } } -void m68000_device::add_b_dd_das_ipm() // d128 f1f8 +void m68000_mcu_device::add_b_dd_das_ipm() // d128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -193227,7 +193227,7 @@ void m68000_device::add_b_dd_das_ipm() // d128 f1f8 } } -void m68000_device::add_b_dd_dais_ipm() // d130 f1f8 +void m68000_mcu_device::add_b_dd_dais_ipm() // d130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -193379,7 +193379,7 @@ adsw2: } } -void m68000_device::add_b_dd_adr16_ipm() // d138 f1ff +void m68000_mcu_device::add_b_dd_adr16_ipm() // d138 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -193489,7 +193489,7 @@ void m68000_device::add_b_dd_adr16_ipm() // d138 f1ff } } -void m68000_device::add_b_dd_adr32_ipm() // d139 f1ff +void m68000_mcu_device::add_b_dd_adr32_ipm() // d139 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -193623,7 +193623,7 @@ void m68000_device::add_b_dd_adr32_ipm() // d139 f1ff } } -void m68000_device::addx_w_ds_dd_ipm() // d140 f1f8 +void m68000_mcu_device::addx_w_ds_dd_ipm() // d140 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -193673,7 +193673,7 @@ void m68000_device::addx_w_ds_dd_ipm() // d140 f1f8 } } -void m68000_device::addx_w_pais_paid_ipm() // d148 f1f8 +void m68000_mcu_device::addx_w_pais_paid_ipm() // d148 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -193803,7 +193803,7 @@ void m68000_device::addx_w_pais_paid_ipm() // d148 f1f8 } } -void m68000_device::add_w_dd_ais_ipm() // d150 f1f8 +void m68000_mcu_device::add_w_dd_ais_ipm() // d150 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -193899,7 +193899,7 @@ void m68000_device::add_w_dd_ais_ipm() // d150 f1f8 } } -void m68000_device::add_w_dd_aips_ipm() // d158 f1f8 +void m68000_mcu_device::add_w_dd_aips_ipm() // d158 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -193999,7 +193999,7 @@ void m68000_device::add_w_dd_aips_ipm() // d158 f1f8 } } -void m68000_device::add_w_dd_pais_ipm() // d160 f1f8 +void m68000_mcu_device::add_w_dd_pais_ipm() // d160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -194101,7 +194101,7 @@ void m68000_device::add_w_dd_pais_ipm() // d160 f1f8 } } -void m68000_device::add_w_dd_das_ipm() // d168 f1f8 +void m68000_mcu_device::add_w_dd_das_ipm() // d168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -194222,7 +194222,7 @@ void m68000_device::add_w_dd_das_ipm() // d168 f1f8 } } -void m68000_device::add_w_dd_dais_ipm() // d170 f1f8 +void m68000_mcu_device::add_w_dd_dais_ipm() // d170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -194384,7 +194384,7 @@ adsw2: } } -void m68000_device::add_w_dd_adr16_ipm() // d178 f1ff +void m68000_mcu_device::add_w_dd_adr16_ipm() // d178 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -194504,7 +194504,7 @@ void m68000_device::add_w_dd_adr16_ipm() // d178 f1ff } } -void m68000_device::add_w_dd_adr32_ipm() // d179 f1ff +void m68000_mcu_device::add_w_dd_adr32_ipm() // d179 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -194648,7 +194648,7 @@ void m68000_device::add_w_dd_adr32_ipm() // d179 f1ff } } -void m68000_device::addx_l_ds_dd_ipm() // d180 f1f8 +void m68000_mcu_device::addx_l_ds_dd_ipm() // d180 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -194707,7 +194707,7 @@ void m68000_device::addx_l_ds_dd_ipm() // d180 f1f8 } } -void m68000_device::addx_l_pais_paid_ipm() // d188 f1f8 +void m68000_mcu_device::addx_l_pais_paid_ipm() // d188 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -194913,7 +194913,7 @@ void m68000_device::addx_l_pais_paid_ipm() // d188 f1f8 } } -void m68000_device::add_l_dd_ais_ipm() // d190 f1f8 +void m68000_mcu_device::add_l_dd_ais_ipm() // d190 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -195059,7 +195059,7 @@ void m68000_device::add_l_dd_ais_ipm() // d190 f1f8 } } -void m68000_device::add_l_dd_aips_ipm() // d198 f1f8 +void m68000_mcu_device::add_l_dd_aips_ipm() // d198 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -195208,7 +195208,7 @@ void m68000_device::add_l_dd_aips_ipm() // d198 f1f8 } } -void m68000_device::add_l_dd_pais_ipm() // d1a0 f1f8 +void m68000_mcu_device::add_l_dd_pais_ipm() // d1a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -195358,7 +195358,7 @@ void m68000_device::add_l_dd_pais_ipm() // d1a0 f1f8 } } -void m68000_device::add_l_dd_das_ipm() // d1a8 f1f8 +void m68000_mcu_device::add_l_dd_das_ipm() // d1a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -195528,7 +195528,7 @@ void m68000_device::add_l_dd_das_ipm() // d1a8 f1f8 } } -void m68000_device::add_l_dd_dais_ipm() // d1b0 f1f8 +void m68000_mcu_device::add_l_dd_dais_ipm() // d1b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -195739,7 +195739,7 @@ adsl2: } } -void m68000_device::add_l_dd_adr16_ipm() // d1b8 f1ff +void m68000_mcu_device::add_l_dd_adr16_ipm() // d1b8 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -195911,7 +195911,7 @@ void m68000_device::add_l_dd_adr16_ipm() // d1b8 f1ff } } -void m68000_device::add_l_dd_adr32_ipm() // d1b9 f1ff +void m68000_mcu_device::add_l_dd_adr32_ipm() // d1b9 f1ff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -196107,7 +196107,7 @@ void m68000_device::add_l_dd_adr32_ipm() // d1b9 f1ff } } -void m68000_device::adda_l_ds_ad_ipm() // d1c0 f1f8 +void m68000_mcu_device::adda_l_ds_ad_ipm() // d1c0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = m_irdi & 7; @@ -196162,7 +196162,7 @@ void m68000_device::adda_l_ds_ad_ipm() // d1c0 f1f8 } } -void m68000_device::adda_l_as_ad_ipm() // d1c8 f1f8 +void m68000_mcu_device::adda_l_as_ad_ipm() // d1c8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -196217,7 +196217,7 @@ void m68000_device::adda_l_as_ad_ipm() // d1c8 f1f8 } } -void m68000_device::adda_l_ais_ad_ipm() // d1d0 f1f8 +void m68000_mcu_device::adda_l_ais_ad_ipm() // d1d0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -196321,7 +196321,7 @@ void m68000_device::adda_l_ais_ad_ipm() // d1d0 f1f8 } } -void m68000_device::adda_l_aips_ad_ipm() // d1d8 f1f8 +void m68000_mcu_device::adda_l_aips_ad_ipm() // d1d8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -196428,7 +196428,7 @@ void m68000_device::adda_l_aips_ad_ipm() // d1d8 f1f8 } } -void m68000_device::adda_l_pais_ad_ipm() // d1e0 f1f8 +void m68000_mcu_device::adda_l_pais_ad_ipm() // d1e0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -196536,7 +196536,7 @@ void m68000_device::adda_l_pais_ad_ipm() // d1e0 f1f8 } } -void m68000_device::adda_l_das_ad_ipm() // d1e8 f1f8 +void m68000_mcu_device::adda_l_das_ad_ipm() // d1e8 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -196664,7 +196664,7 @@ void m68000_device::adda_l_das_ad_ipm() // d1e8 f1f8 } } -void m68000_device::adda_l_dais_ad_ipm() // d1f0 f1f8 +void m68000_mcu_device::adda_l_dais_ad_ipm() // d1f0 f1f8 { int rx = map_sp(((m_irdi >> 9) & 7) | 8); int ry = map_sp((m_irdi & 7) | 8); @@ -196833,7 +196833,7 @@ adsl2: } } -void m68000_device::adda_l_adr16_ad_ipm() // d1f8 f1ff +void m68000_mcu_device::adda_l_adr16_ad_ipm() // d1f8 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -196963,7 +196963,7 @@ void m68000_device::adda_l_adr16_ad_ipm() // d1f8 f1ff } } -void m68000_device::adda_l_adr32_ad_ipm() // d1f9 f1ff +void m68000_mcu_device::adda_l_adr32_ad_ipm() // d1f9 f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -197117,7 +197117,7 @@ void m68000_device::adda_l_adr32_ad_ipm() // d1f9 f1ff } } -void m68000_device::adda_l_dpc_ad_ipm() // d1fa f1ff +void m68000_mcu_device::adda_l_dpc_ad_ipm() // d1fa f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -197244,7 +197244,7 @@ void m68000_device::adda_l_dpc_ad_ipm() // d1fa f1ff } } -void m68000_device::adda_l_dpci_ad_ipm() // d1fb f1ff +void m68000_mcu_device::adda_l_dpci_ad_ipm() // d1fb f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -197412,7 +197412,7 @@ adsl2: } } -void m68000_device::adda_l_imm32_ad_ipm() // d1fc f1ff +void m68000_mcu_device::adda_l_imm32_ad_ipm() // d1fc f1ff { int rx = map_sp(((m_irdi >> 9) & 7) | 8); switch(m_inst_substate) { @@ -197517,7 +197517,7 @@ void m68000_device::adda_l_imm32_ad_ipm() // d1fc f1ff } } -void m68000_device::asr_b_imm3_ds_ipm() // e000 f1f8 +void m68000_mcu_device::asr_b_imm3_ds_ipm() // e000 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -197589,7 +197589,7 @@ nbcr3: } } -void m68000_device::lsr_b_imm3_ds_ipm() // e008 f1f8 +void m68000_mcu_device::lsr_b_imm3_ds_ipm() // e008 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -197661,7 +197661,7 @@ nbcr3: } } -void m68000_device::roxr_b_imm3_ds_ipm() // e010 f1f8 +void m68000_mcu_device::roxr_b_imm3_ds_ipm() // e010 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -197733,7 +197733,7 @@ nbcr3: } } -void m68000_device::ror_b_imm3_ds_ipm() // e018 f1f8 +void m68000_mcu_device::ror_b_imm3_ds_ipm() // e018 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -197805,7 +197805,7 @@ nbcr3: } } -void m68000_device::asr_b_dd_ds_ipm() // e020 f1f8 +void m68000_mcu_device::asr_b_dd_ds_ipm() // e020 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -197878,7 +197878,7 @@ nbcr3: } } -void m68000_device::lsr_b_dd_ds_ipm() // e028 f1f8 +void m68000_mcu_device::lsr_b_dd_ds_ipm() // e028 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -197951,7 +197951,7 @@ nbcr3: } } -void m68000_device::roxr_b_dd_ds_ipm() // e030 f1f8 +void m68000_mcu_device::roxr_b_dd_ds_ipm() // e030 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -198024,7 +198024,7 @@ nbcr3: } } -void m68000_device::ror_b_dd_ds_ipm() // e038 f1f8 +void m68000_mcu_device::ror_b_dd_ds_ipm() // e038 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -198097,7 +198097,7 @@ nbcr3: } } -void m68000_device::asr_w_imm3_ds_ipm() // e040 f1f8 +void m68000_mcu_device::asr_w_imm3_ds_ipm() // e040 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -198169,7 +198169,7 @@ nbcr3: } } -void m68000_device::lsr_w_imm3_ds_ipm() // e048 f1f8 +void m68000_mcu_device::lsr_w_imm3_ds_ipm() // e048 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -198241,7 +198241,7 @@ nbcr3: } } -void m68000_device::roxr_w_imm3_ds_ipm() // e050 f1f8 +void m68000_mcu_device::roxr_w_imm3_ds_ipm() // e050 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -198313,7 +198313,7 @@ nbcr3: } } -void m68000_device::ror_w_imm3_ds_ipm() // e058 f1f8 +void m68000_mcu_device::ror_w_imm3_ds_ipm() // e058 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -198385,7 +198385,7 @@ nbcr3: } } -void m68000_device::asr_w_dd_ds_ipm() // e060 f1f8 +void m68000_mcu_device::asr_w_dd_ds_ipm() // e060 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -198458,7 +198458,7 @@ nbcr3: } } -void m68000_device::lsr_w_dd_ds_ipm() // e068 f1f8 +void m68000_mcu_device::lsr_w_dd_ds_ipm() // e068 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -198531,7 +198531,7 @@ nbcr3: } } -void m68000_device::roxr_w_dd_ds_ipm() // e070 f1f8 +void m68000_mcu_device::roxr_w_dd_ds_ipm() // e070 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -198604,7 +198604,7 @@ nbcr3: } } -void m68000_device::ror_w_dd_ds_ipm() // e078 f1f8 +void m68000_mcu_device::ror_w_dd_ds_ipm() // e078 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -198677,7 +198677,7 @@ nbcr3: } } -void m68000_device::asr_l_imm3_ds_ipm() // e080 f1f8 +void m68000_mcu_device::asr_l_imm3_ds_ipm() // e080 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -198755,7 +198755,7 @@ srrl4: } } -void m68000_device::lsr_l_imm3_ds_ipm() // e088 f1f8 +void m68000_mcu_device::lsr_l_imm3_ds_ipm() // e088 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -198833,7 +198833,7 @@ srrl4: } } -void m68000_device::roxr_l_imm3_ds_ipm() // e090 f1f8 +void m68000_mcu_device::roxr_l_imm3_ds_ipm() // e090 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -198911,7 +198911,7 @@ srrl4: } } -void m68000_device::ror_l_imm3_ds_ipm() // e098 f1f8 +void m68000_mcu_device::ror_l_imm3_ds_ipm() // e098 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -198989,7 +198989,7 @@ srrl4: } } -void m68000_device::asr_l_dd_ds_ipm() // e0a0 f1f8 +void m68000_mcu_device::asr_l_dd_ds_ipm() // e0a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -199068,7 +199068,7 @@ srrl4: } } -void m68000_device::lsr_l_dd_ds_ipm() // e0a8 f1f8 +void m68000_mcu_device::lsr_l_dd_ds_ipm() // e0a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -199147,7 +199147,7 @@ srrl4: } } -void m68000_device::roxr_l_dd_ds_ipm() // e0b0 f1f8 +void m68000_mcu_device::roxr_l_dd_ds_ipm() // e0b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -199226,7 +199226,7 @@ srrl4: } } -void m68000_device::ror_l_dd_ds_ipm() // e0b8 f1f8 +void m68000_mcu_device::ror_l_dd_ds_ipm() // e0b8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -199305,7 +199305,7 @@ srrl4: } } -void m68000_device::asr_ais_ipm() // e0d0 fff8 +void m68000_mcu_device::asr_ais_ipm() // e0d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -199406,7 +199406,7 @@ void m68000_device::asr_ais_ipm() // e0d0 fff8 } } -void m68000_device::asr_aips_ipm() // e0d8 fff8 +void m68000_mcu_device::asr_aips_ipm() // e0d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -199511,7 +199511,7 @@ void m68000_device::asr_aips_ipm() // e0d8 fff8 } } -void m68000_device::asr_pais_ipm() // e0e0 fff8 +void m68000_mcu_device::asr_pais_ipm() // e0e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -199618,7 +199618,7 @@ void m68000_device::asr_pais_ipm() // e0e0 fff8 } } -void m68000_device::asr_das_ipm() // e0e8 fff8 +void m68000_mcu_device::asr_das_ipm() // e0e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -199744,7 +199744,7 @@ void m68000_device::asr_das_ipm() // e0e8 fff8 } } -void m68000_device::asr_dais_ipm() // e0f0 fff8 +void m68000_mcu_device::asr_dais_ipm() // e0f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -199911,7 +199911,7 @@ adsw2: } } -void m68000_device::asr_adr16_ipm() // e0f8 ffff +void m68000_mcu_device::asr_adr16_ipm() // e0f8 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -200036,7 +200036,7 @@ void m68000_device::asr_adr16_ipm() // e0f8 ffff } } -void m68000_device::asr_adr32_ipm() // e0f9 ffff +void m68000_mcu_device::asr_adr32_ipm() // e0f9 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -200185,7 +200185,7 @@ void m68000_device::asr_adr32_ipm() // e0f9 ffff } } -void m68000_device::asl_b_imm3_ds_ipm() // e100 f1f8 +void m68000_mcu_device::asl_b_imm3_ds_ipm() // e100 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -200257,7 +200257,7 @@ nbcr3: } } -void m68000_device::lsl_b_imm3_ds_ipm() // e108 f1f8 +void m68000_mcu_device::lsl_b_imm3_ds_ipm() // e108 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -200330,7 +200330,7 @@ nbcr3: } } -void m68000_device::roxl_b_imm3_ds_ipm() // e110 f1f8 +void m68000_mcu_device::roxl_b_imm3_ds_ipm() // e110 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -200402,7 +200402,7 @@ nbcr3: } } -void m68000_device::rol_b_imm3_ds_ipm() // e118 f1f8 +void m68000_mcu_device::rol_b_imm3_ds_ipm() // e118 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -200474,7 +200474,7 @@ nbcr3: } } -void m68000_device::asl_b_dd_ds_ipm() // e120 f1f8 +void m68000_mcu_device::asl_b_dd_ds_ipm() // e120 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -200547,7 +200547,7 @@ nbcr3: } } -void m68000_device::lsl_b_dd_ds_ipm() // e128 f1f8 +void m68000_mcu_device::lsl_b_dd_ds_ipm() // e128 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -200621,7 +200621,7 @@ nbcr3: } } -void m68000_device::roxl_b_dd_ds_ipm() // e130 f1f8 +void m68000_mcu_device::roxl_b_dd_ds_ipm() // e130 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -200694,7 +200694,7 @@ nbcr3: } } -void m68000_device::rol_b_dd_ds_ipm() // e138 f1f8 +void m68000_mcu_device::rol_b_dd_ds_ipm() // e138 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -200767,7 +200767,7 @@ nbcr3: } } -void m68000_device::asl_w_imm3_ds_ipm() // e140 f1f8 +void m68000_mcu_device::asl_w_imm3_ds_ipm() // e140 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -200839,7 +200839,7 @@ nbcr3: } } -void m68000_device::lsl_w_imm3_ds_ipm() // e148 f1f8 +void m68000_mcu_device::lsl_w_imm3_ds_ipm() // e148 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -200912,7 +200912,7 @@ nbcr3: } } -void m68000_device::roxl_w_imm3_ds_ipm() // e150 f1f8 +void m68000_mcu_device::roxl_w_imm3_ds_ipm() // e150 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -200984,7 +200984,7 @@ nbcr3: } } -void m68000_device::rol_w_imm3_ds_ipm() // e158 f1f8 +void m68000_mcu_device::rol_w_imm3_ds_ipm() // e158 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -201056,7 +201056,7 @@ nbcr3: } } -void m68000_device::asl_w_dd_ds_ipm() // e160 f1f8 +void m68000_mcu_device::asl_w_dd_ds_ipm() // e160 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -201129,7 +201129,7 @@ nbcr3: } } -void m68000_device::lsl_w_dd_ds_ipm() // e168 f1f8 +void m68000_mcu_device::lsl_w_dd_ds_ipm() // e168 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -201203,7 +201203,7 @@ nbcr3: } } -void m68000_device::roxl_w_dd_ds_ipm() // e170 f1f8 +void m68000_mcu_device::roxl_w_dd_ds_ipm() // e170 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -201276,7 +201276,7 @@ nbcr3: } } -void m68000_device::rol_w_dd_ds_ipm() // e178 f1f8 +void m68000_mcu_device::rol_w_dd_ds_ipm() // e178 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -201349,7 +201349,7 @@ nbcr3: } } -void m68000_device::asl_l_imm3_ds_ipm() // e180 f1f8 +void m68000_mcu_device::asl_l_imm3_ds_ipm() // e180 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -201427,7 +201427,7 @@ srrl4: } } -void m68000_device::lsl_l_imm3_ds_ipm() // e188 f1f8 +void m68000_mcu_device::lsl_l_imm3_ds_ipm() // e188 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -201507,7 +201507,7 @@ srrl4: } } -void m68000_device::roxl_l_imm3_ds_ipm() // e190 f1f8 +void m68000_mcu_device::roxl_l_imm3_ds_ipm() // e190 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -201585,7 +201585,7 @@ srrl4: } } -void m68000_device::rol_l_imm3_ds_ipm() // e198 f1f8 +void m68000_mcu_device::rol_l_imm3_ds_ipm() // e198 f1f8 { int ry = m_irdi & 7; switch(m_inst_substate) { @@ -201663,7 +201663,7 @@ srrl4: } } -void m68000_device::asl_l_dd_ds_ipm() // e1a0 f1f8 +void m68000_mcu_device::asl_l_dd_ds_ipm() // e1a0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -201742,7 +201742,7 @@ srrl4: } } -void m68000_device::lsl_l_dd_ds_ipm() // e1a8 f1f8 +void m68000_mcu_device::lsl_l_dd_ds_ipm() // e1a8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -201823,7 +201823,7 @@ srrl4: } } -void m68000_device::roxl_l_dd_ds_ipm() // e1b0 f1f8 +void m68000_mcu_device::roxl_l_dd_ds_ipm() // e1b0 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -201902,7 +201902,7 @@ srrl4: } } -void m68000_device::rol_l_dd_ds_ipm() // e1b8 f1f8 +void m68000_mcu_device::rol_l_dd_ds_ipm() // e1b8 f1f8 { int rx = (m_irdi >> 9) & 7; int ry = m_irdi & 7; @@ -201981,7 +201981,7 @@ srrl4: } } -void m68000_device::asl_ais_ipm() // e1d0 fff8 +void m68000_mcu_device::asl_ais_ipm() // e1d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -202082,7 +202082,7 @@ void m68000_device::asl_ais_ipm() // e1d0 fff8 } } -void m68000_device::asl_aips_ipm() // e1d8 fff8 +void m68000_mcu_device::asl_aips_ipm() // e1d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -202187,7 +202187,7 @@ void m68000_device::asl_aips_ipm() // e1d8 fff8 } } -void m68000_device::asl_pais_ipm() // e1e0 fff8 +void m68000_mcu_device::asl_pais_ipm() // e1e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -202294,7 +202294,7 @@ void m68000_device::asl_pais_ipm() // e1e0 fff8 } } -void m68000_device::asl_das_ipm() // e1e8 fff8 +void m68000_mcu_device::asl_das_ipm() // e1e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -202420,7 +202420,7 @@ void m68000_device::asl_das_ipm() // e1e8 fff8 } } -void m68000_device::asl_dais_ipm() // e1f0 fff8 +void m68000_mcu_device::asl_dais_ipm() // e1f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -202587,7 +202587,7 @@ adsw2: } } -void m68000_device::asl_adr16_ipm() // e1f8 ffff +void m68000_mcu_device::asl_adr16_ipm() // e1f8 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -202712,7 +202712,7 @@ void m68000_device::asl_adr16_ipm() // e1f8 ffff } } -void m68000_device::asl_adr32_ipm() // e1f9 ffff +void m68000_mcu_device::asl_adr32_ipm() // e1f9 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -202861,7 +202861,7 @@ void m68000_device::asl_adr32_ipm() // e1f9 ffff } } -void m68000_device::lsr_ais_ipm() // e2d0 fff8 +void m68000_mcu_device::lsr_ais_ipm() // e2d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -202962,7 +202962,7 @@ void m68000_device::lsr_ais_ipm() // e2d0 fff8 } } -void m68000_device::lsr_aips_ipm() // e2d8 fff8 +void m68000_mcu_device::lsr_aips_ipm() // e2d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -203067,7 +203067,7 @@ void m68000_device::lsr_aips_ipm() // e2d8 fff8 } } -void m68000_device::lsr_pais_ipm() // e2e0 fff8 +void m68000_mcu_device::lsr_pais_ipm() // e2e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -203174,7 +203174,7 @@ void m68000_device::lsr_pais_ipm() // e2e0 fff8 } } -void m68000_device::lsr_das_ipm() // e2e8 fff8 +void m68000_mcu_device::lsr_das_ipm() // e2e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -203300,7 +203300,7 @@ void m68000_device::lsr_das_ipm() // e2e8 fff8 } } -void m68000_device::lsr_dais_ipm() // e2f0 fff8 +void m68000_mcu_device::lsr_dais_ipm() // e2f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -203467,7 +203467,7 @@ adsw2: } } -void m68000_device::lsr_adr16_ipm() // e2f8 ffff +void m68000_mcu_device::lsr_adr16_ipm() // e2f8 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -203592,7 +203592,7 @@ void m68000_device::lsr_adr16_ipm() // e2f8 ffff } } -void m68000_device::lsr_adr32_ipm() // e2f9 ffff +void m68000_mcu_device::lsr_adr32_ipm() // e2f9 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -203741,7 +203741,7 @@ void m68000_device::lsr_adr32_ipm() // e2f9 ffff } } -void m68000_device::lsl_ais_ipm() // e3d0 fff8 +void m68000_mcu_device::lsl_ais_ipm() // e3d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -203844,7 +203844,7 @@ void m68000_device::lsl_ais_ipm() // e3d0 fff8 } } -void m68000_device::lsl_aips_ipm() // e3d8 fff8 +void m68000_mcu_device::lsl_aips_ipm() // e3d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -203952,7 +203952,7 @@ void m68000_device::lsl_aips_ipm() // e3d8 fff8 } } -void m68000_device::lsl_pais_ipm() // e3e0 fff8 +void m68000_mcu_device::lsl_pais_ipm() // e3e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -204062,7 +204062,7 @@ void m68000_device::lsl_pais_ipm() // e3e0 fff8 } } -void m68000_device::lsl_das_ipm() // e3e8 fff8 +void m68000_mcu_device::lsl_das_ipm() // e3e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -204191,7 +204191,7 @@ void m68000_device::lsl_das_ipm() // e3e8 fff8 } } -void m68000_device::lsl_dais_ipm() // e3f0 fff8 +void m68000_mcu_device::lsl_dais_ipm() // e3f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -204363,7 +204363,7 @@ adsw2: } } -void m68000_device::lsl_adr16_ipm() // e3f8 ffff +void m68000_mcu_device::lsl_adr16_ipm() // e3f8 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -204491,7 +204491,7 @@ void m68000_device::lsl_adr16_ipm() // e3f8 ffff } } -void m68000_device::lsl_adr32_ipm() // e3f9 ffff +void m68000_mcu_device::lsl_adr32_ipm() // e3f9 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -204644,7 +204644,7 @@ void m68000_device::lsl_adr32_ipm() // e3f9 ffff } } -void m68000_device::roxr_ais_ipm() // e4d0 fff8 +void m68000_mcu_device::roxr_ais_ipm() // e4d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -204745,7 +204745,7 @@ void m68000_device::roxr_ais_ipm() // e4d0 fff8 } } -void m68000_device::roxr_aips_ipm() // e4d8 fff8 +void m68000_mcu_device::roxr_aips_ipm() // e4d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -204850,7 +204850,7 @@ void m68000_device::roxr_aips_ipm() // e4d8 fff8 } } -void m68000_device::roxr_pais_ipm() // e4e0 fff8 +void m68000_mcu_device::roxr_pais_ipm() // e4e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -204957,7 +204957,7 @@ void m68000_device::roxr_pais_ipm() // e4e0 fff8 } } -void m68000_device::roxr_das_ipm() // e4e8 fff8 +void m68000_mcu_device::roxr_das_ipm() // e4e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -205083,7 +205083,7 @@ void m68000_device::roxr_das_ipm() // e4e8 fff8 } } -void m68000_device::roxr_dais_ipm() // e4f0 fff8 +void m68000_mcu_device::roxr_dais_ipm() // e4f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -205250,7 +205250,7 @@ adsw2: } } -void m68000_device::roxr_adr16_ipm() // e4f8 ffff +void m68000_mcu_device::roxr_adr16_ipm() // e4f8 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -205375,7 +205375,7 @@ void m68000_device::roxr_adr16_ipm() // e4f8 ffff } } -void m68000_device::roxr_adr32_ipm() // e4f9 ffff +void m68000_mcu_device::roxr_adr32_ipm() // e4f9 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -205524,7 +205524,7 @@ void m68000_device::roxr_adr32_ipm() // e4f9 ffff } } -void m68000_device::roxl_ais_ipm() // e5d0 fff8 +void m68000_mcu_device::roxl_ais_ipm() // e5d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -205625,7 +205625,7 @@ void m68000_device::roxl_ais_ipm() // e5d0 fff8 } } -void m68000_device::roxl_aips_ipm() // e5d8 fff8 +void m68000_mcu_device::roxl_aips_ipm() // e5d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -205730,7 +205730,7 @@ void m68000_device::roxl_aips_ipm() // e5d8 fff8 } } -void m68000_device::roxl_pais_ipm() // e5e0 fff8 +void m68000_mcu_device::roxl_pais_ipm() // e5e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -205837,7 +205837,7 @@ void m68000_device::roxl_pais_ipm() // e5e0 fff8 } } -void m68000_device::roxl_das_ipm() // e5e8 fff8 +void m68000_mcu_device::roxl_das_ipm() // e5e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -205963,7 +205963,7 @@ void m68000_device::roxl_das_ipm() // e5e8 fff8 } } -void m68000_device::roxl_dais_ipm() // e5f0 fff8 +void m68000_mcu_device::roxl_dais_ipm() // e5f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -206130,7 +206130,7 @@ adsw2: } } -void m68000_device::roxl_adr16_ipm() // e5f8 ffff +void m68000_mcu_device::roxl_adr16_ipm() // e5f8 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -206255,7 +206255,7 @@ void m68000_device::roxl_adr16_ipm() // e5f8 ffff } } -void m68000_device::roxl_adr32_ipm() // e5f9 ffff +void m68000_mcu_device::roxl_adr32_ipm() // e5f9 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -206404,7 +206404,7 @@ void m68000_device::roxl_adr32_ipm() // e5f9 ffff } } -void m68000_device::ror_ais_ipm() // e6d0 fff8 +void m68000_mcu_device::ror_ais_ipm() // e6d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -206505,7 +206505,7 @@ void m68000_device::ror_ais_ipm() // e6d0 fff8 } } -void m68000_device::ror_aips_ipm() // e6d8 fff8 +void m68000_mcu_device::ror_aips_ipm() // e6d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -206610,7 +206610,7 @@ void m68000_device::ror_aips_ipm() // e6d8 fff8 } } -void m68000_device::ror_pais_ipm() // e6e0 fff8 +void m68000_mcu_device::ror_pais_ipm() // e6e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -206717,7 +206717,7 @@ void m68000_device::ror_pais_ipm() // e6e0 fff8 } } -void m68000_device::ror_das_ipm() // e6e8 fff8 +void m68000_mcu_device::ror_das_ipm() // e6e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -206843,7 +206843,7 @@ void m68000_device::ror_das_ipm() // e6e8 fff8 } } -void m68000_device::ror_dais_ipm() // e6f0 fff8 +void m68000_mcu_device::ror_dais_ipm() // e6f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -207010,7 +207010,7 @@ adsw2: } } -void m68000_device::ror_adr16_ipm() // e6f8 ffff +void m68000_mcu_device::ror_adr16_ipm() // e6f8 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -207135,7 +207135,7 @@ void m68000_device::ror_adr16_ipm() // e6f8 ffff } } -void m68000_device::ror_adr32_ipm() // e6f9 ffff +void m68000_mcu_device::ror_adr32_ipm() // e6f9 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -207284,7 +207284,7 @@ void m68000_device::ror_adr32_ipm() // e6f9 ffff } } -void m68000_device::rol_ais_ipm() // e7d0 fff8 +void m68000_mcu_device::rol_ais_ipm() // e7d0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -207385,7 +207385,7 @@ void m68000_device::rol_ais_ipm() // e7d0 fff8 } } -void m68000_device::rol_aips_ipm() // e7d8 fff8 +void m68000_mcu_device::rol_aips_ipm() // e7d8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -207490,7 +207490,7 @@ void m68000_device::rol_aips_ipm() // e7d8 fff8 } } -void m68000_device::rol_pais_ipm() // e7e0 fff8 +void m68000_mcu_device::rol_pais_ipm() // e7e0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -207597,7 +207597,7 @@ void m68000_device::rol_pais_ipm() // e7e0 fff8 } } -void m68000_device::rol_das_ipm() // e7e8 fff8 +void m68000_mcu_device::rol_das_ipm() // e7e8 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -207723,7 +207723,7 @@ void m68000_device::rol_das_ipm() // e7e8 fff8 } } -void m68000_device::rol_dais_ipm() // e7f0 fff8 +void m68000_mcu_device::rol_dais_ipm() // e7f0 fff8 { int rx = (m_irdi >> 9) & 7; int ry = map_sp((m_irdi & 7) | 8); @@ -207890,7 +207890,7 @@ adsw2: } } -void m68000_device::rol_adr16_ipm() // e7f8 ffff +void m68000_mcu_device::rol_adr16_ipm() // e7f8 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -208015,7 +208015,7 @@ void m68000_device::rol_adr16_ipm() // e7f8 ffff } } -void m68000_device::rol_adr32_ipm() // e7f9 ffff +void m68000_mcu_device::rol_adr32_ipm() // e7f9 ffff { int rx = (m_irdi >> 9) & 7; switch(m_inst_substate) { @@ -208164,1540 +208164,1540 @@ void m68000_device::rol_adr32_ipm() // e7f9 ffff } } -const m68000_device::handler m68000_device::s_handlers_ipm[] = { - &m68000_device::state_reset_ipm, - &m68000_device::state_bus_error_ipm, - &m68000_device::state_address_error_ipm, - &m68000_device::state_double_fault_ipm, - &m68000_device::state_interrupt_ipm, - &m68000_device::state_trace_ipm, - &m68000_device::state_illegal_ipm, - &m68000_device::state_priviledge_ipm, - &m68000_device::state_linea_ipm, - &m68000_device::state_linef_ipm, - &m68000_device::ori_b_imm8_ds_ipm, - &m68000_device::ori_b_imm8_ais_ipm, - &m68000_device::ori_b_imm8_aips_ipm, - &m68000_device::ori_b_imm8_pais_ipm, - &m68000_device::ori_b_imm8_das_ipm, - &m68000_device::ori_b_imm8_dais_ipm, - &m68000_device::ori_b_imm8_adr16_ipm, - &m68000_device::ori_b_imm8_adr32_ipm, - &m68000_device::ori_imm8_ccr_ipm, - &m68000_device::ori_w_imm16_ds_ipm, - &m68000_device::ori_w_imm16_ais_ipm, - &m68000_device::ori_w_imm16_aips_ipm, - &m68000_device::ori_w_imm16_pais_ipm, - &m68000_device::ori_w_imm16_das_ipm, - &m68000_device::ori_w_imm16_dais_ipm, - &m68000_device::ori_w_imm16_adr16_ipm, - &m68000_device::ori_w_imm16_adr32_ipm, - &m68000_device::ori_i16u_sr_ipm, - &m68000_device::ori_l_imm32_ds_ipm, - &m68000_device::ori_l_imm32_ais_ipm, - &m68000_device::ori_l_imm32_aips_ipm, - &m68000_device::ori_l_imm32_pais_ipm, - &m68000_device::ori_l_imm32_das_ipm, - &m68000_device::ori_l_imm32_dais_ipm, - &m68000_device::ori_l_imm32_adr16_ipm, - &m68000_device::ori_l_imm32_adr32_ipm, - &m68000_device::btst_dd_ds_ipm, - &m68000_device::movep_w_das_dd_ipm, - &m68000_device::btst_dd_ais_ipm, - &m68000_device::btst_dd_aips_ipm, - &m68000_device::btst_dd_pais_ipm, - &m68000_device::btst_dd_das_ipm, - &m68000_device::btst_dd_dais_ipm, - &m68000_device::btst_dd_adr16_ipm, - &m68000_device::btst_dd_adr32_ipm, - &m68000_device::btst_dd_dpc_ipm, - &m68000_device::btst_dd_dpci_ipm, - &m68000_device::btst_dd_imm_ipm, - &m68000_device::bchg_dd_ds_ipm, - &m68000_device::movep_l_das_dd_ipm, - &m68000_device::bchg_dd_ais_ipm, - &m68000_device::bchg_dd_aips_ipm, - &m68000_device::bchg_dd_pais_ipm, - &m68000_device::bchg_dd_das_ipm, - &m68000_device::bchg_dd_dais_ipm, - &m68000_device::bchg_dd_adr16_ipm, - &m68000_device::bchg_dd_adr32_ipm, - &m68000_device::bclr_dd_ds_ipm, - &m68000_device::movep_w_dd_das_ipm, - &m68000_device::bclr_dd_ais_ipm, - &m68000_device::bclr_dd_aips_ipm, - &m68000_device::bclr_dd_pais_ipm, - &m68000_device::bclr_dd_das_ipm, - &m68000_device::bclr_dd_dais_ipm, - &m68000_device::bclr_dd_adr16_ipm, - &m68000_device::bclr_dd_adr32_ipm, - &m68000_device::bset_dd_ds_ipm, - &m68000_device::movep_l_dd_das_ipm, - &m68000_device::bset_dd_ais_ipm, - &m68000_device::bset_dd_aips_ipm, - &m68000_device::bset_dd_pais_ipm, - &m68000_device::bset_dd_das_ipm, - &m68000_device::bset_dd_dais_ipm, - &m68000_device::bset_dd_adr16_ipm, - &m68000_device::bset_dd_adr32_ipm, - &m68000_device::andi_b_imm8_ds_ipm, - &m68000_device::andi_b_imm8_ais_ipm, - &m68000_device::andi_b_imm8_aips_ipm, - &m68000_device::andi_b_imm8_pais_ipm, - &m68000_device::andi_b_imm8_das_ipm, - &m68000_device::andi_b_imm8_dais_ipm, - &m68000_device::andi_b_imm8_adr16_ipm, - &m68000_device::andi_b_imm8_adr32_ipm, - &m68000_device::andi_imm8_ccr_ipm, - &m68000_device::andi_w_imm16_ds_ipm, - &m68000_device::andi_w_imm16_ais_ipm, - &m68000_device::andi_w_imm16_aips_ipm, - &m68000_device::andi_w_imm16_pais_ipm, - &m68000_device::andi_w_imm16_das_ipm, - &m68000_device::andi_w_imm16_dais_ipm, - &m68000_device::andi_w_imm16_adr16_ipm, - &m68000_device::andi_w_imm16_adr32_ipm, - &m68000_device::andi_i16u_sr_ipm, - &m68000_device::andi_l_imm32_ds_ipm, - &m68000_device::andi_l_imm32_ais_ipm, - &m68000_device::andi_l_imm32_aips_ipm, - &m68000_device::andi_l_imm32_pais_ipm, - &m68000_device::andi_l_imm32_das_ipm, - &m68000_device::andi_l_imm32_dais_ipm, - &m68000_device::andi_l_imm32_adr16_ipm, - &m68000_device::andi_l_imm32_adr32_ipm, - &m68000_device::subi_b_imm8_ds_ipm, - &m68000_device::subi_b_imm8_ais_ipm, - &m68000_device::subi_b_imm8_aips_ipm, - &m68000_device::subi_b_imm8_pais_ipm, - &m68000_device::subi_b_imm8_das_ipm, - &m68000_device::subi_b_imm8_dais_ipm, - &m68000_device::subi_b_imm8_adr16_ipm, - &m68000_device::subi_b_imm8_adr32_ipm, - &m68000_device::subi_w_imm16_ds_ipm, - &m68000_device::subi_w_imm16_ais_ipm, - &m68000_device::subi_w_imm16_aips_ipm, - &m68000_device::subi_w_imm16_pais_ipm, - &m68000_device::subi_w_imm16_das_ipm, - &m68000_device::subi_w_imm16_dais_ipm, - &m68000_device::subi_w_imm16_adr16_ipm, - &m68000_device::subi_w_imm16_adr32_ipm, - &m68000_device::subi_l_imm32_ds_ipm, - &m68000_device::subi_l_imm32_ais_ipm, - &m68000_device::subi_l_imm32_aips_ipm, - &m68000_device::subi_l_imm32_pais_ipm, - &m68000_device::subi_l_imm32_das_ipm, - &m68000_device::subi_l_imm32_dais_ipm, - &m68000_device::subi_l_imm32_adr16_ipm, - &m68000_device::subi_l_imm32_adr32_ipm, - &m68000_device::addi_b_imm8_ds_ipm, - &m68000_device::addi_b_imm8_ais_ipm, - &m68000_device::addi_b_imm8_aips_ipm, - &m68000_device::addi_b_imm8_pais_ipm, - &m68000_device::addi_b_imm8_das_ipm, - &m68000_device::addi_b_imm8_dais_ipm, - &m68000_device::addi_b_imm8_adr16_ipm, - &m68000_device::addi_b_imm8_adr32_ipm, - &m68000_device::addi_w_imm16_ds_ipm, - &m68000_device::addi_w_imm16_ais_ipm, - &m68000_device::addi_w_imm16_aips_ipm, - &m68000_device::addi_w_imm16_pais_ipm, - &m68000_device::addi_w_imm16_das_ipm, - &m68000_device::addi_w_imm16_dais_ipm, - &m68000_device::addi_w_imm16_adr16_ipm, - &m68000_device::addi_w_imm16_adr32_ipm, - &m68000_device::addi_l_imm32_ds_ipm, - &m68000_device::addi_l_imm32_ais_ipm, - &m68000_device::addi_l_imm32_aips_ipm, - &m68000_device::addi_l_imm32_pais_ipm, - &m68000_device::addi_l_imm32_das_ipm, - &m68000_device::addi_l_imm32_dais_ipm, - &m68000_device::addi_l_imm32_adr16_ipm, - &m68000_device::addi_l_imm32_adr32_ipm, - &m68000_device::btst_imm8_ds_ipm, - &m68000_device::btst_imm8_ais_ipm, - &m68000_device::btst_imm8_aips_ipm, - &m68000_device::btst_imm8_pais_ipm, - &m68000_device::btst_imm8_das_ipm, - &m68000_device::btst_imm8_dais_ipm, - &m68000_device::btst_imm8_adr16_ipm, - &m68000_device::btst_imm8_adr32_ipm, - &m68000_device::btst_imm8_dpc_ipm, - &m68000_device::btst_imm8_dpci_ipm, - &m68000_device::bchg_imm8_ds_ipm, - &m68000_device::bchg_imm8_ais_ipm, - &m68000_device::bchg_imm8_aips_ipm, - &m68000_device::bchg_imm8_pais_ipm, - &m68000_device::bchg_imm8_das_ipm, - &m68000_device::bchg_imm8_dais_ipm, - &m68000_device::bchg_imm8_adr16_ipm, - &m68000_device::bchg_imm8_adr32_ipm, - &m68000_device::bclr_imm8_ds_ipm, - &m68000_device::bclr_imm8_ais_ipm, - &m68000_device::bclr_imm8_aips_ipm, - &m68000_device::bclr_imm8_pais_ipm, - &m68000_device::bclr_imm8_das_ipm, - &m68000_device::bclr_imm8_dais_ipm, - &m68000_device::bclr_imm8_adr16_ipm, - &m68000_device::bclr_imm8_adr32_ipm, - &m68000_device::bset_imm8_ds_ipm, - &m68000_device::bset_imm8_ais_ipm, - &m68000_device::bset_imm8_aips_ipm, - &m68000_device::bset_imm8_pais_ipm, - &m68000_device::bset_imm8_das_ipm, - &m68000_device::bset_imm8_dais_ipm, - &m68000_device::bset_imm8_adr16_ipm, - &m68000_device::bset_imm8_adr32_ipm, - &m68000_device::eori_b_imm8_ds_ipm, - &m68000_device::eori_b_imm8_ais_ipm, - &m68000_device::eori_b_imm8_aips_ipm, - &m68000_device::eori_b_imm8_pais_ipm, - &m68000_device::eori_b_imm8_das_ipm, - &m68000_device::eori_b_imm8_dais_ipm, - &m68000_device::eori_b_imm8_adr16_ipm, - &m68000_device::eori_b_imm8_adr32_ipm, - &m68000_device::eori_imm8_ccr_ipm, - &m68000_device::eori_w_imm16_ds_ipm, - &m68000_device::eori_w_imm16_ais_ipm, - &m68000_device::eori_w_imm16_aips_ipm, - &m68000_device::eori_w_imm16_pais_ipm, - &m68000_device::eori_w_imm16_das_ipm, - &m68000_device::eori_w_imm16_dais_ipm, - &m68000_device::eori_w_imm16_adr16_ipm, - &m68000_device::eori_w_imm16_adr32_ipm, - &m68000_device::eori_i16u_sr_ipm, - &m68000_device::eori_l_imm32_ds_ipm, - &m68000_device::eori_l_imm32_ais_ipm, - &m68000_device::eori_l_imm32_aips_ipm, - &m68000_device::eori_l_imm32_pais_ipm, - &m68000_device::eori_l_imm32_das_ipm, - &m68000_device::eori_l_imm32_dais_ipm, - &m68000_device::eori_l_imm32_adr16_ipm, - &m68000_device::eori_l_imm32_adr32_ipm, - &m68000_device::cmpi_b_imm8_ds_ipm, - &m68000_device::cmpi_b_imm8_ais_ipm, - &m68000_device::cmpi_b_imm8_aips_ipm, - &m68000_device::cmpi_b_imm8_pais_ipm, - &m68000_device::cmpi_b_imm8_das_ipm, - &m68000_device::cmpi_b_imm8_dais_ipm, - &m68000_device::cmpi_b_imm8_adr16_ipm, - &m68000_device::cmpi_b_imm8_adr32_ipm, - &m68000_device::cmpi_w_imm16_ds_ipm, - &m68000_device::cmpi_w_imm16_ais_ipm, - &m68000_device::cmpi_w_imm16_aips_ipm, - &m68000_device::cmpi_w_imm16_pais_ipm, - &m68000_device::cmpi_w_imm16_das_ipm, - &m68000_device::cmpi_w_imm16_dais_ipm, - &m68000_device::cmpi_w_imm16_adr16_ipm, - &m68000_device::cmpi_w_imm16_adr32_ipm, - &m68000_device::cmpi_l_imm32_ds_ipm, - &m68000_device::cmpi_l_imm32_ais_ipm, - &m68000_device::cmpi_l_imm32_aips_ipm, - &m68000_device::cmpi_l_imm32_pais_ipm, - &m68000_device::cmpi_l_imm32_das_ipm, - &m68000_device::cmpi_l_imm32_dais_ipm, - &m68000_device::cmpi_l_imm32_adr16_ipm, - &m68000_device::cmpi_l_imm32_adr32_ipm, - &m68000_device::move_b_ds_dd_ipm, - &m68000_device::move_b_ais_dd_ipm, - &m68000_device::move_b_aips_dd_ipm, - &m68000_device::move_b_pais_dd_ipm, - &m68000_device::move_b_das_dd_ipm, - &m68000_device::move_b_dais_dd_ipm, - &m68000_device::move_b_adr16_dd_ipm, - &m68000_device::move_b_adr32_dd_ipm, - &m68000_device::move_b_dpc_dd_ipm, - &m68000_device::move_b_dpci_dd_ipm, - &m68000_device::move_b_imm8_dd_ipm, - &m68000_device::move_b_ds_aid_ipm, - &m68000_device::move_b_ais_aid_ipm, - &m68000_device::move_b_aips_aid_ipm, - &m68000_device::move_b_pais_aid_ipm, - &m68000_device::move_b_das_aid_ipm, - &m68000_device::move_b_dais_aid_ipm, - &m68000_device::move_b_adr16_aid_ipm, - &m68000_device::move_b_adr32_aid_ipm, - &m68000_device::move_b_dpc_aid_ipm, - &m68000_device::move_b_dpci_aid_ipm, - &m68000_device::move_b_imm8_aid_ipm, - &m68000_device::move_b_ds_aipd_ipm, - &m68000_device::move_b_ais_aipd_ipm, - &m68000_device::move_b_aips_aipd_ipm, - &m68000_device::move_b_pais_aipd_ipm, - &m68000_device::move_b_das_aipd_ipm, - &m68000_device::move_b_dais_aipd_ipm, - &m68000_device::move_b_adr16_aipd_ipm, - &m68000_device::move_b_adr32_aipd_ipm, - &m68000_device::move_b_dpc_aipd_ipm, - &m68000_device::move_b_dpci_aipd_ipm, - &m68000_device::move_b_imm8_aipd_ipm, - &m68000_device::move_b_ds_paid_ipm, - &m68000_device::move_b_ais_paid_ipm, - &m68000_device::move_b_aips_paid_ipm, - &m68000_device::move_b_pais_paid_ipm, - &m68000_device::move_b_das_paid_ipm, - &m68000_device::move_b_dais_paid_ipm, - &m68000_device::move_b_adr16_paid_ipm, - &m68000_device::move_b_adr32_paid_ipm, - &m68000_device::move_b_dpc_paid_ipm, - &m68000_device::move_b_dpci_paid_ipm, - &m68000_device::move_b_imm8_paid_ipm, - &m68000_device::move_b_ds_dad_ipm, - &m68000_device::move_b_ais_dad_ipm, - &m68000_device::move_b_aips_dad_ipm, - &m68000_device::move_b_pais_dad_ipm, - &m68000_device::move_b_das_dad_ipm, - &m68000_device::move_b_dais_dad_ipm, - &m68000_device::move_b_adr16_dad_ipm, - &m68000_device::move_b_adr32_dad_ipm, - &m68000_device::move_b_dpc_dad_ipm, - &m68000_device::move_b_dpci_dad_ipm, - &m68000_device::move_b_imm8_dad_ipm, - &m68000_device::move_b_ds_daid_ipm, - &m68000_device::move_b_ais_daid_ipm, - &m68000_device::move_b_aips_daid_ipm, - &m68000_device::move_b_pais_daid_ipm, - &m68000_device::move_b_das_daid_ipm, - &m68000_device::move_b_dais_daid_ipm, - &m68000_device::move_b_adr16_daid_ipm, - &m68000_device::move_b_adr32_daid_ipm, - &m68000_device::move_b_dpc_daid_ipm, - &m68000_device::move_b_dpci_daid_ipm, - &m68000_device::move_b_imm8_daid_ipm, - &m68000_device::move_b_ds_adr16_ipm, - &m68000_device::move_b_ais_adr16_ipm, - &m68000_device::move_b_aips_adr16_ipm, - &m68000_device::move_b_pais_adr16_ipm, - &m68000_device::move_b_das_adr16_ipm, - &m68000_device::move_b_dais_adr16_ipm, - &m68000_device::move_b_adr16_adr16_ipm, - &m68000_device::move_b_adr32_adr16_ipm, - &m68000_device::move_b_dpc_adr16_ipm, - &m68000_device::move_b_dpci_adr16_ipm, - &m68000_device::move_b_imm8_adr16_ipm, - &m68000_device::move_b_ds_adr32_ipm, - &m68000_device::move_b_ais_adr32_ipm, - &m68000_device::move_b_aips_adr32_ipm, - &m68000_device::move_b_pais_adr32_ipm, - &m68000_device::move_b_das_adr32_ipm, - &m68000_device::move_b_dais_adr32_ipm, - &m68000_device::move_b_adr16_adr32_ipm, - &m68000_device::move_b_adr32_adr32_ipm, - &m68000_device::move_b_dpc_adr32_ipm, - &m68000_device::move_b_dpci_adr32_ipm, - &m68000_device::move_b_imm8_adr32_ipm, - &m68000_device::move_l_ds_dd_ipm, - &m68000_device::move_l_as_dd_ipm, - &m68000_device::move_l_ais_dd_ipm, - &m68000_device::move_l_aips_dd_ipm, - &m68000_device::move_l_pais_dd_ipm, - &m68000_device::move_l_das_dd_ipm, - &m68000_device::move_l_dais_dd_ipm, - &m68000_device::move_l_adr16_dd_ipm, - &m68000_device::move_l_adr32_dd_ipm, - &m68000_device::move_l_dpc_dd_ipm, - &m68000_device::move_l_dpci_dd_ipm, - &m68000_device::move_l_imm32_dd_ipm, - &m68000_device::movea_l_ds_ad_ipm, - &m68000_device::movea_l_as_ad_ipm, - &m68000_device::movea_l_ais_ad_ipm, - &m68000_device::movea_l_aips_ad_ipm, - &m68000_device::movea_l_pais_ad_ipm, - &m68000_device::movea_l_das_ad_ipm, - &m68000_device::movea_l_dais_ad_ipm, - &m68000_device::movea_l_adr16_ad_ipm, - &m68000_device::movea_l_adr32_ad_ipm, - &m68000_device::movea_l_dpc_ad_ipm, - &m68000_device::movea_l_dpci_ad_ipm, - &m68000_device::movea_l_imm32_ad_ipm, - &m68000_device::move_l_ds_aid_ipm, - &m68000_device::move_l_as_aid_ipm, - &m68000_device::move_l_ais_aid_ipm, - &m68000_device::move_l_aips_aid_ipm, - &m68000_device::move_l_pais_aid_ipm, - &m68000_device::move_l_das_aid_ipm, - &m68000_device::move_l_dais_aid_ipm, - &m68000_device::move_l_adr16_aid_ipm, - &m68000_device::move_l_adr32_aid_ipm, - &m68000_device::move_l_dpc_aid_ipm, - &m68000_device::move_l_dpci_aid_ipm, - &m68000_device::move_l_imm32_aid_ipm, - &m68000_device::move_l_ds_aipd_ipm, - &m68000_device::move_l_as_aipd_ipm, - &m68000_device::move_l_ais_aipd_ipm, - &m68000_device::move_l_aips_aipd_ipm, - &m68000_device::move_l_pais_aipd_ipm, - &m68000_device::move_l_das_aipd_ipm, - &m68000_device::move_l_dais_aipd_ipm, - &m68000_device::move_l_adr16_aipd_ipm, - &m68000_device::move_l_adr32_aipd_ipm, - &m68000_device::move_l_dpc_aipd_ipm, - &m68000_device::move_l_dpci_aipd_ipm, - &m68000_device::move_l_imm32_aipd_ipm, - &m68000_device::move_l_ds_paid_ipm, - &m68000_device::move_l_as_paid_ipm, - &m68000_device::move_l_ais_paid_ipm, - &m68000_device::move_l_aips_paid_ipm, - &m68000_device::move_l_pais_paid_ipm, - &m68000_device::move_l_das_paid_ipm, - &m68000_device::move_l_dais_paid_ipm, - &m68000_device::move_l_adr16_paid_ipm, - &m68000_device::move_l_adr32_paid_ipm, - &m68000_device::move_l_dpc_paid_ipm, - &m68000_device::move_l_dpci_paid_ipm, - &m68000_device::move_l_imm32_paid_ipm, - &m68000_device::move_l_ds_dad_ipm, - &m68000_device::move_l_as_dad_ipm, - &m68000_device::move_l_ais_dad_ipm, - &m68000_device::move_l_aips_dad_ipm, - &m68000_device::move_l_pais_dad_ipm, - &m68000_device::move_l_das_dad_ipm, - &m68000_device::move_l_dais_dad_ipm, - &m68000_device::move_l_adr16_dad_ipm, - &m68000_device::move_l_adr32_dad_ipm, - &m68000_device::move_l_dpc_dad_ipm, - &m68000_device::move_l_dpci_dad_ipm, - &m68000_device::move_l_imm32_dad_ipm, - &m68000_device::move_l_ds_daid_ipm, - &m68000_device::move_l_as_daid_ipm, - &m68000_device::move_l_ais_daid_ipm, - &m68000_device::move_l_aips_daid_ipm, - &m68000_device::move_l_pais_daid_ipm, - &m68000_device::move_l_das_daid_ipm, - &m68000_device::move_l_dais_daid_ipm, - &m68000_device::move_l_adr16_daid_ipm, - &m68000_device::move_l_adr32_daid_ipm, - &m68000_device::move_l_dpc_daid_ipm, - &m68000_device::move_l_dpci_daid_ipm, - &m68000_device::move_l_imm32_daid_ipm, - &m68000_device::move_l_ds_adr16_ipm, - &m68000_device::move_l_as_adr16_ipm, - &m68000_device::move_l_ais_adr16_ipm, - &m68000_device::move_l_aips_adr16_ipm, - &m68000_device::move_l_pais_adr16_ipm, - &m68000_device::move_l_das_adr16_ipm, - &m68000_device::move_l_dais_adr16_ipm, - &m68000_device::move_l_adr16_adr16_ipm, - &m68000_device::move_l_adr32_adr16_ipm, - &m68000_device::move_l_dpc_adr16_ipm, - &m68000_device::move_l_dpci_adr16_ipm, - &m68000_device::move_l_imm32_adr16_ipm, - &m68000_device::move_l_ds_adr32_ipm, - &m68000_device::move_l_as_adr32_ipm, - &m68000_device::move_l_ais_adr32_ipm, - &m68000_device::move_l_aips_adr32_ipm, - &m68000_device::move_l_pais_adr32_ipm, - &m68000_device::move_l_das_adr32_ipm, - &m68000_device::move_l_dais_adr32_ipm, - &m68000_device::move_l_adr16_adr32_ipm, - &m68000_device::move_l_adr32_adr32_ipm, - &m68000_device::move_l_dpc_adr32_ipm, - &m68000_device::move_l_dpci_adr32_ipm, - &m68000_device::move_l_imm32_adr32_ipm, - &m68000_device::move_w_ds_dd_ipm, - &m68000_device::move_w_as_dd_ipm, - &m68000_device::move_w_ais_dd_ipm, - &m68000_device::move_w_aips_dd_ipm, - &m68000_device::move_w_pais_dd_ipm, - &m68000_device::move_w_das_dd_ipm, - &m68000_device::move_w_dais_dd_ipm, - &m68000_device::move_w_adr16_dd_ipm, - &m68000_device::move_w_adr32_dd_ipm, - &m68000_device::move_w_dpc_dd_ipm, - &m68000_device::move_w_dpci_dd_ipm, - &m68000_device::move_w_imm16_dd_ipm, - &m68000_device::movea_w_ds_ad_ipm, - &m68000_device::movea_w_as_ad_ipm, - &m68000_device::movea_w_ais_ad_ipm, - &m68000_device::movea_w_aips_ad_ipm, - &m68000_device::movea_w_pais_ad_ipm, - &m68000_device::movea_w_das_ad_ipm, - &m68000_device::movea_w_dais_ad_ipm, - &m68000_device::movea_w_adr16_ad_ipm, - &m68000_device::movea_w_adr32_ad_ipm, - &m68000_device::movea_w_dpc_ad_ipm, - &m68000_device::movea_w_dpci_ad_ipm, - &m68000_device::movea_w_imm16_ad_ipm, - &m68000_device::move_w_ds_aid_ipm, - &m68000_device::move_w_as_aid_ipm, - &m68000_device::move_w_ais_aid_ipm, - &m68000_device::move_w_aips_aid_ipm, - &m68000_device::move_w_pais_aid_ipm, - &m68000_device::move_w_das_aid_ipm, - &m68000_device::move_w_dais_aid_ipm, - &m68000_device::move_w_adr16_aid_ipm, - &m68000_device::move_w_adr32_aid_ipm, - &m68000_device::move_w_dpc_aid_ipm, - &m68000_device::move_w_dpci_aid_ipm, - &m68000_device::move_w_imm16_aid_ipm, - &m68000_device::move_w_ds_aipd_ipm, - &m68000_device::move_w_as_aipd_ipm, - &m68000_device::move_w_ais_aipd_ipm, - &m68000_device::move_w_aips_aipd_ipm, - &m68000_device::move_w_pais_aipd_ipm, - &m68000_device::move_w_das_aipd_ipm, - &m68000_device::move_w_dais_aipd_ipm, - &m68000_device::move_w_adr16_aipd_ipm, - &m68000_device::move_w_adr32_aipd_ipm, - &m68000_device::move_w_dpc_aipd_ipm, - &m68000_device::move_w_dpci_aipd_ipm, - &m68000_device::move_w_imm16_aipd_ipm, - &m68000_device::move_w_ds_paid_ipm, - &m68000_device::move_w_as_paid_ipm, - &m68000_device::move_w_ais_paid_ipm, - &m68000_device::move_w_aips_paid_ipm, - &m68000_device::move_w_pais_paid_ipm, - &m68000_device::move_w_das_paid_ipm, - &m68000_device::move_w_dais_paid_ipm, - &m68000_device::move_w_adr16_paid_ipm, - &m68000_device::move_w_adr32_paid_ipm, - &m68000_device::move_w_dpc_paid_ipm, - &m68000_device::move_w_dpci_paid_ipm, - &m68000_device::move_w_imm16_paid_ipm, - &m68000_device::move_w_ds_dad_ipm, - &m68000_device::move_w_as_dad_ipm, - &m68000_device::move_w_ais_dad_ipm, - &m68000_device::move_w_aips_dad_ipm, - &m68000_device::move_w_pais_dad_ipm, - &m68000_device::move_w_das_dad_ipm, - &m68000_device::move_w_dais_dad_ipm, - &m68000_device::move_w_adr16_dad_ipm, - &m68000_device::move_w_adr32_dad_ipm, - &m68000_device::move_w_dpc_dad_ipm, - &m68000_device::move_w_dpci_dad_ipm, - &m68000_device::move_w_imm16_dad_ipm, - &m68000_device::move_w_ds_daid_ipm, - &m68000_device::move_w_as_daid_ipm, - &m68000_device::move_w_ais_daid_ipm, - &m68000_device::move_w_aips_daid_ipm, - &m68000_device::move_w_pais_daid_ipm, - &m68000_device::move_w_das_daid_ipm, - &m68000_device::move_w_dais_daid_ipm, - &m68000_device::move_w_adr16_daid_ipm, - &m68000_device::move_w_adr32_daid_ipm, - &m68000_device::move_w_dpc_daid_ipm, - &m68000_device::move_w_dpci_daid_ipm, - &m68000_device::move_w_imm16_daid_ipm, - &m68000_device::move_w_ds_adr16_ipm, - &m68000_device::move_w_as_adr16_ipm, - &m68000_device::move_w_ais_adr16_ipm, - &m68000_device::move_w_aips_adr16_ipm, - &m68000_device::move_w_pais_adr16_ipm, - &m68000_device::move_w_das_adr16_ipm, - &m68000_device::move_w_dais_adr16_ipm, - &m68000_device::move_w_adr16_adr16_ipm, - &m68000_device::move_w_adr32_adr16_ipm, - &m68000_device::move_w_dpc_adr16_ipm, - &m68000_device::move_w_dpci_adr16_ipm, - &m68000_device::move_w_imm16_adr16_ipm, - &m68000_device::move_w_ds_adr32_ipm, - &m68000_device::move_w_as_adr32_ipm, - &m68000_device::move_w_ais_adr32_ipm, - &m68000_device::move_w_aips_adr32_ipm, - &m68000_device::move_w_pais_adr32_ipm, - &m68000_device::move_w_das_adr32_ipm, - &m68000_device::move_w_dais_adr32_ipm, - &m68000_device::move_w_adr16_adr32_ipm, - &m68000_device::move_w_adr32_adr32_ipm, - &m68000_device::move_w_dpc_adr32_ipm, - &m68000_device::move_w_dpci_adr32_ipm, - &m68000_device::move_w_imm16_adr32_ipm, - &m68000_device::negx_b_ds_ipm, - &m68000_device::negx_b_ais_ipm, - &m68000_device::negx_b_aips_ipm, - &m68000_device::negx_b_pais_ipm, - &m68000_device::negx_b_das_ipm, - &m68000_device::negx_b_dais_ipm, - &m68000_device::negx_b_adr16_ipm, - &m68000_device::negx_b_adr32_ipm, - &m68000_device::negx_w_ds_ipm, - &m68000_device::negx_w_ais_ipm, - &m68000_device::negx_w_aips_ipm, - &m68000_device::negx_w_pais_ipm, - &m68000_device::negx_w_das_ipm, - &m68000_device::negx_w_dais_ipm, - &m68000_device::negx_w_adr16_ipm, - &m68000_device::negx_w_adr32_ipm, - &m68000_device::negx_l_ds_ipm, - &m68000_device::negx_l_ais_ipm, - &m68000_device::negx_l_aips_ipm, - &m68000_device::negx_l_pais_ipm, - &m68000_device::negx_l_das_ipm, - &m68000_device::negx_l_dais_ipm, - &m68000_device::negx_l_adr16_ipm, - &m68000_device::negx_l_adr32_ipm, - &m68000_device::move_sr_ds_ipm, - &m68000_device::move_sr_ais_ipm, - &m68000_device::move_sr_aips_ipm, - &m68000_device::move_sr_pais_ipm, - &m68000_device::move_sr_das_ipm, - &m68000_device::move_sr_dais_ipm, - &m68000_device::move_sr_adr16_ipm, - &m68000_device::move_sr_adr32_ipm, - &m68000_device::chk_w_ds_dd_ipm, - &m68000_device::chk_w_ais_dd_ipm, - &m68000_device::chk_w_aips_dd_ipm, - &m68000_device::chk_w_pais_dd_ipm, - &m68000_device::chk_w_das_dd_ipm, - &m68000_device::chk_w_dais_dd_ipm, - &m68000_device::chk_w_adr16_dd_ipm, - &m68000_device::chk_w_adr32_dd_ipm, - &m68000_device::chk_w_dpc_dd_ipm, - &m68000_device::chk_w_dpci_dd_ipm, - &m68000_device::chk_w_imm16_dd_ipm, - &m68000_device::lea_ais_ad_ipm, - &m68000_device::lea_das_ad_ipm, - &m68000_device::lea_dais_ad_ipm, - &m68000_device::lea_adr16_ad_ipm, - &m68000_device::lea_adr32_ad_ipm, - &m68000_device::lea_dpc_ad_ipm, - &m68000_device::lea_dpci_ad_ipm, - &m68000_device::clr_b_ds_ipm, - &m68000_device::clr_b_ais_ipm, - &m68000_device::clr_b_aips_ipm, - &m68000_device::clr_b_pais_ipm, - &m68000_device::clr_b_das_ipm, - &m68000_device::clr_b_dais_ipm, - &m68000_device::clr_b_adr16_ipm, - &m68000_device::clr_b_adr32_ipm, - &m68000_device::clr_w_ds_ipm, - &m68000_device::clr_w_ais_ipm, - &m68000_device::clr_w_aips_ipm, - &m68000_device::clr_w_pais_ipm, - &m68000_device::clr_w_das_ipm, - &m68000_device::clr_w_dais_ipm, - &m68000_device::clr_w_adr16_ipm, - &m68000_device::clr_w_adr32_ipm, - &m68000_device::clr_l_ds_ipm, - &m68000_device::clr_l_ais_ipm, - &m68000_device::clr_l_aips_ipm, - &m68000_device::clr_l_pais_ipm, - &m68000_device::clr_l_das_ipm, - &m68000_device::clr_l_dais_ipm, - &m68000_device::clr_l_adr16_ipm, - &m68000_device::clr_l_adr32_ipm, - &m68000_device::neg_b_ds_ipm, - &m68000_device::neg_b_ais_ipm, - &m68000_device::neg_b_aips_ipm, - &m68000_device::neg_b_pais_ipm, - &m68000_device::neg_b_das_ipm, - &m68000_device::neg_b_dais_ipm, - &m68000_device::neg_b_adr16_ipm, - &m68000_device::neg_b_adr32_ipm, - &m68000_device::neg_w_ds_ipm, - &m68000_device::neg_w_ais_ipm, - &m68000_device::neg_w_aips_ipm, - &m68000_device::neg_w_pais_ipm, - &m68000_device::neg_w_das_ipm, - &m68000_device::neg_w_dais_ipm, - &m68000_device::neg_w_adr16_ipm, - &m68000_device::neg_w_adr32_ipm, - &m68000_device::neg_l_ds_ipm, - &m68000_device::neg_l_ais_ipm, - &m68000_device::neg_l_aips_ipm, - &m68000_device::neg_l_pais_ipm, - &m68000_device::neg_l_das_ipm, - &m68000_device::neg_l_dais_ipm, - &m68000_device::neg_l_adr16_ipm, - &m68000_device::neg_l_adr32_ipm, - &m68000_device::move_ds_ccr_ipm, - &m68000_device::move_ais_ccr_ipm, - &m68000_device::move_aips_ccr_ipm, - &m68000_device::move_pais_ccr_ipm, - &m68000_device::move_das_ccr_ipm, - &m68000_device::move_dais_ccr_ipm, - &m68000_device::move_adr16_ccr_ipm, - &m68000_device::move_adr32_ccr_ipm, - &m68000_device::move_dpc_ccr_ipm, - &m68000_device::move_dpci_ccr_ipm, - &m68000_device::move_imm8_ccr_ipm, - &m68000_device::not_b_ds_ipm, - &m68000_device::not_b_ais_ipm, - &m68000_device::not_b_aips_ipm, - &m68000_device::not_b_pais_ipm, - &m68000_device::not_b_das_ipm, - &m68000_device::not_b_dais_ipm, - &m68000_device::not_b_adr16_ipm, - &m68000_device::not_b_adr32_ipm, - &m68000_device::not_w_ds_ipm, - &m68000_device::not_w_ais_ipm, - &m68000_device::not_w_aips_ipm, - &m68000_device::not_w_pais_ipm, - &m68000_device::not_w_das_ipm, - &m68000_device::not_w_dais_ipm, - &m68000_device::not_w_adr16_ipm, - &m68000_device::not_w_adr32_ipm, - &m68000_device::not_l_ds_ipm, - &m68000_device::not_l_ais_ipm, - &m68000_device::not_l_aips_ipm, - &m68000_device::not_l_pais_ipm, - &m68000_device::not_l_das_ipm, - &m68000_device::not_l_dais_ipm, - &m68000_device::not_l_adr16_ipm, - &m68000_device::not_l_adr32_ipm, - &m68000_device::move_ds_sr_ipm, - &m68000_device::move_ais_sr_ipm, - &m68000_device::move_aips_sr_ipm, - &m68000_device::move_pais_sr_ipm, - &m68000_device::move_das_sr_ipm, - &m68000_device::move_dais_sr_ipm, - &m68000_device::move_adr16_sr_ipm, - &m68000_device::move_adr32_sr_ipm, - &m68000_device::move_dpc_sr_ipm, - &m68000_device::move_dpci_sr_ipm, - &m68000_device::move_i16u_sr_ipm, - &m68000_device::nbcd_b_ds_ipm, - &m68000_device::nbcd_b_ais_ipm, - &m68000_device::nbcd_b_aips_ipm, - &m68000_device::nbcd_b_pais_ipm, - &m68000_device::nbcd_b_das_ipm, - &m68000_device::nbcd_b_dais_ipm, - &m68000_device::nbcd_b_adr16_ipm, - &m68000_device::nbcd_b_adr32_ipm, - &m68000_device::swap_ds_ipm, - &m68000_device::pea_ais_ipm, - &m68000_device::pea_das_ipm, - &m68000_device::pea_dais_ipm, - &m68000_device::pea_adr16_ipm, - &m68000_device::pea_adr32_ipm, - &m68000_device::pea_dpc_ipm, - &m68000_device::pea_dpci_ipm, - &m68000_device::ext_w_ds_ipm, - &m68000_device::movem_w_list_ais_ipm, - &m68000_device::movem_w_listp_pais_ipm, - &m68000_device::movem_w_list_das_ipm, - &m68000_device::movem_w_list_dais_ipm, - &m68000_device::movem_w_list_adr16_ipm, - &m68000_device::movem_w_list_adr32_ipm, - &m68000_device::ext_l_ds_ipm, - &m68000_device::movem_l_list_ais_ipm, - &m68000_device::movem_l_listp_pais_ipm, - &m68000_device::movem_l_list_das_ipm, - &m68000_device::movem_l_list_dais_ipm, - &m68000_device::movem_l_list_adr16_ipm, - &m68000_device::movem_l_list_adr32_ipm, - &m68000_device::tst_b_ds_ipm, - &m68000_device::tst_b_ais_ipm, - &m68000_device::tst_b_aips_ipm, - &m68000_device::tst_b_pais_ipm, - &m68000_device::tst_b_das_ipm, - &m68000_device::tst_b_dais_ipm, - &m68000_device::tst_b_adr16_ipm, - &m68000_device::tst_b_adr32_ipm, - &m68000_device::tst_w_ds_ipm, - &m68000_device::tst_w_ais_ipm, - &m68000_device::tst_w_aips_ipm, - &m68000_device::tst_w_pais_ipm, - &m68000_device::tst_w_das_ipm, - &m68000_device::tst_w_dais_ipm, - &m68000_device::tst_w_adr16_ipm, - &m68000_device::tst_w_adr32_ipm, - &m68000_device::tst_l_ds_ipm, - &m68000_device::tst_l_ais_ipm, - &m68000_device::tst_l_aips_ipm, - &m68000_device::tst_l_pais_ipm, - &m68000_device::tst_l_das_ipm, - &m68000_device::tst_l_dais_ipm, - &m68000_device::tst_l_adr16_ipm, - &m68000_device::tst_l_adr32_ipm, - &m68000_device::tas_ds_ipm, - &m68000_device::tas_ais_ipm, - &m68000_device::tas_aips_ipm, - &m68000_device::tas_pais_ipm, - &m68000_device::tas_das_ipm, - &m68000_device::tas_dais_ipm, - &m68000_device::tas_adr16_ipm, - &m68000_device::tas_adr32_ipm, - &m68000_device::movem_w_ais_list_ipm, - &m68000_device::movem_w_aips_list_ipm, - &m68000_device::movem_w_das_list_ipm, - &m68000_device::movem_w_dais_list_ipm, - &m68000_device::movem_w_adr16_list_ipm, - &m68000_device::movem_w_adr32_list_ipm, - &m68000_device::movem_w_dpc_list_ipm, - &m68000_device::movem_w_dpci_list_ipm, - &m68000_device::movem_l_ais_list_ipm, - &m68000_device::movem_l_aips_list_ipm, - &m68000_device::movem_l_das_list_ipm, - &m68000_device::movem_l_dais_list_ipm, - &m68000_device::movem_l_adr16_list_ipm, - &m68000_device::movem_l_adr32_list_ipm, - &m68000_device::movem_l_dpc_list_ipm, - &m68000_device::movem_l_dpci_list_ipm, - &m68000_device::trap_imm4_ipm, - &m68000_device::link_as_imm16_ipm, - &m68000_device::unlk_as_ipm, - &m68000_device::move_as_usp_ipm, - &m68000_device::move_usp_as_ipm, - &m68000_device::reset_ipm, - &m68000_device::nop_ipm, - &m68000_device::stop_i16u_ipm, - &m68000_device::rte_ipm, - &m68000_device::rts_ipm, - &m68000_device::trapv_ipm, - &m68000_device::rtr_ipm, - &m68000_device::jsr_ais_ipm, - &m68000_device::jsr_das_ipm, - &m68000_device::jsr_dais_ipm, - &m68000_device::jsr_adr16_ipm, - &m68000_device::jsr_adr32_ipm, - &m68000_device::jsr_dpc_ipm, - &m68000_device::jsr_dpci_ipm, - &m68000_device::jmp_ais_ipm, - &m68000_device::jmp_das_ipm, - &m68000_device::jmp_dais_ipm, - &m68000_device::jmp_adr16_ipm, - &m68000_device::jmp_adr32_ipm, - &m68000_device::jmp_dpc_ipm, - &m68000_device::jmp_dpci_ipm, - &m68000_device::addq_b_imm3_ds_ipm, - &m68000_device::addq_b_imm3_ais_ipm, - &m68000_device::addq_b_imm3_aips_ipm, - &m68000_device::addq_b_imm3_pais_ipm, - &m68000_device::addq_b_imm3_das_ipm, - &m68000_device::addq_b_imm3_dais_ipm, - &m68000_device::addq_b_imm3_adr16_ipm, - &m68000_device::addq_b_imm3_adr32_ipm, - &m68000_device::addq_w_imm3_ds_ipm, - &m68000_device::addq_w_imm3_as_ipm, - &m68000_device::addq_w_imm3_ais_ipm, - &m68000_device::addq_w_imm3_aips_ipm, - &m68000_device::addq_w_imm3_pais_ipm, - &m68000_device::addq_w_imm3_das_ipm, - &m68000_device::addq_w_imm3_dais_ipm, - &m68000_device::addq_w_imm3_adr16_ipm, - &m68000_device::addq_w_imm3_adr32_ipm, - &m68000_device::addq_l_imm3_ds_ipm, - &m68000_device::addq_l_imm3_as_ipm, - &m68000_device::addq_l_imm3_ais_ipm, - &m68000_device::addq_l_imm3_aips_ipm, - &m68000_device::addq_l_imm3_pais_ipm, - &m68000_device::addq_l_imm3_das_ipm, - &m68000_device::addq_l_imm3_dais_ipm, - &m68000_device::addq_l_imm3_adr16_ipm, - &m68000_device::addq_l_imm3_adr32_ipm, - &m68000_device::st_ds_ipm, - &m68000_device::dbt_ds_rel16_ipm, - &m68000_device::st_ais_ipm, - &m68000_device::st_aips_ipm, - &m68000_device::st_pais_ipm, - &m68000_device::st_das_ipm, - &m68000_device::st_dais_ipm, - &m68000_device::st_adr16_ipm, - &m68000_device::st_adr32_ipm, - &m68000_device::subq_b_imm3_ds_ipm, - &m68000_device::subq_b_imm3_ais_ipm, - &m68000_device::subq_b_imm3_aips_ipm, - &m68000_device::subq_b_imm3_pais_ipm, - &m68000_device::subq_b_imm3_das_ipm, - &m68000_device::subq_b_imm3_dais_ipm, - &m68000_device::subq_b_imm3_adr16_ipm, - &m68000_device::subq_b_imm3_adr32_ipm, - &m68000_device::subq_w_imm3_ds_ipm, - &m68000_device::subq_w_imm3_as_ipm, - &m68000_device::subq_w_imm3_ais_ipm, - &m68000_device::subq_w_imm3_aips_ipm, - &m68000_device::subq_w_imm3_pais_ipm, - &m68000_device::subq_w_imm3_das_ipm, - &m68000_device::subq_w_imm3_dais_ipm, - &m68000_device::subq_w_imm3_adr16_ipm, - &m68000_device::subq_w_imm3_adr32_ipm, - &m68000_device::subq_l_imm3_ds_ipm, - &m68000_device::subq_l_imm3_as_ipm, - &m68000_device::subq_l_imm3_ais_ipm, - &m68000_device::subq_l_imm3_aips_ipm, - &m68000_device::subq_l_imm3_pais_ipm, - &m68000_device::subq_l_imm3_das_ipm, - &m68000_device::subq_l_imm3_dais_ipm, - &m68000_device::subq_l_imm3_adr16_ipm, - &m68000_device::subq_l_imm3_adr32_ipm, - &m68000_device::sf_ds_ipm, - &m68000_device::dbra_ds_rel16_ipm, - &m68000_device::sf_ais_ipm, - &m68000_device::sf_aips_ipm, - &m68000_device::sf_pais_ipm, - &m68000_device::sf_das_ipm, - &m68000_device::sf_dais_ipm, - &m68000_device::sf_adr16_ipm, - &m68000_device::sf_adr32_ipm, - &m68000_device::shi_ds_ipm, - &m68000_device::dbhi_ds_rel16_ipm, - &m68000_device::shi_ais_ipm, - &m68000_device::shi_aips_ipm, - &m68000_device::shi_pais_ipm, - &m68000_device::shi_das_ipm, - &m68000_device::shi_dais_ipm, - &m68000_device::shi_adr16_ipm, - &m68000_device::shi_adr32_ipm, - &m68000_device::sls_ds_ipm, - &m68000_device::dbls_ds_rel16_ipm, - &m68000_device::sls_ais_ipm, - &m68000_device::sls_aips_ipm, - &m68000_device::sls_pais_ipm, - &m68000_device::sls_das_ipm, - &m68000_device::sls_dais_ipm, - &m68000_device::sls_adr16_ipm, - &m68000_device::sls_adr32_ipm, - &m68000_device::scc_ds_ipm, - &m68000_device::dbcc_ds_rel16_ipm, - &m68000_device::scc_ais_ipm, - &m68000_device::scc_aips_ipm, - &m68000_device::scc_pais_ipm, - &m68000_device::scc_das_ipm, - &m68000_device::scc_dais_ipm, - &m68000_device::scc_adr16_ipm, - &m68000_device::scc_adr32_ipm, - &m68000_device::scs_ds_ipm, - &m68000_device::dbcs_ds_rel16_ipm, - &m68000_device::scs_ais_ipm, - &m68000_device::scs_aips_ipm, - &m68000_device::scs_pais_ipm, - &m68000_device::scs_das_ipm, - &m68000_device::scs_dais_ipm, - &m68000_device::scs_adr16_ipm, - &m68000_device::scs_adr32_ipm, - &m68000_device::sne_ds_ipm, - &m68000_device::dbne_ds_rel16_ipm, - &m68000_device::sne_ais_ipm, - &m68000_device::sne_aips_ipm, - &m68000_device::sne_pais_ipm, - &m68000_device::sne_das_ipm, - &m68000_device::sne_dais_ipm, - &m68000_device::sne_adr16_ipm, - &m68000_device::sne_adr32_ipm, - &m68000_device::seq_ds_ipm, - &m68000_device::dbeq_ds_rel16_ipm, - &m68000_device::seq_ais_ipm, - &m68000_device::seq_aips_ipm, - &m68000_device::seq_pais_ipm, - &m68000_device::seq_das_ipm, - &m68000_device::seq_dais_ipm, - &m68000_device::seq_adr16_ipm, - &m68000_device::seq_adr32_ipm, - &m68000_device::svc_ds_ipm, - &m68000_device::dbvc_ds_rel16_ipm, - &m68000_device::svc_ais_ipm, - &m68000_device::svc_aips_ipm, - &m68000_device::svc_pais_ipm, - &m68000_device::svc_das_ipm, - &m68000_device::svc_dais_ipm, - &m68000_device::svc_adr16_ipm, - &m68000_device::svc_adr32_ipm, - &m68000_device::svs_ds_ipm, - &m68000_device::dbvs_ds_rel16_ipm, - &m68000_device::svs_ais_ipm, - &m68000_device::svs_aips_ipm, - &m68000_device::svs_pais_ipm, - &m68000_device::svs_das_ipm, - &m68000_device::svs_dais_ipm, - &m68000_device::svs_adr16_ipm, - &m68000_device::svs_adr32_ipm, - &m68000_device::spl_ds_ipm, - &m68000_device::dbpl_ds_rel16_ipm, - &m68000_device::spl_ais_ipm, - &m68000_device::spl_aips_ipm, - &m68000_device::spl_pais_ipm, - &m68000_device::spl_das_ipm, - &m68000_device::spl_dais_ipm, - &m68000_device::spl_adr16_ipm, - &m68000_device::spl_adr32_ipm, - &m68000_device::smi_ds_ipm, - &m68000_device::dbmi_ds_rel16_ipm, - &m68000_device::smi_ais_ipm, - &m68000_device::smi_aips_ipm, - &m68000_device::smi_pais_ipm, - &m68000_device::smi_das_ipm, - &m68000_device::smi_dais_ipm, - &m68000_device::smi_adr16_ipm, - &m68000_device::smi_adr32_ipm, - &m68000_device::sge_ds_ipm, - &m68000_device::dbge_ds_rel16_ipm, - &m68000_device::sge_ais_ipm, - &m68000_device::sge_aips_ipm, - &m68000_device::sge_pais_ipm, - &m68000_device::sge_das_ipm, - &m68000_device::sge_dais_ipm, - &m68000_device::sge_adr16_ipm, - &m68000_device::sge_adr32_ipm, - &m68000_device::slt_ds_ipm, - &m68000_device::dblt_ds_rel16_ipm, - &m68000_device::slt_ais_ipm, - &m68000_device::slt_aips_ipm, - &m68000_device::slt_pais_ipm, - &m68000_device::slt_das_ipm, - &m68000_device::slt_dais_ipm, - &m68000_device::slt_adr16_ipm, - &m68000_device::slt_adr32_ipm, - &m68000_device::sgt_ds_ipm, - &m68000_device::dbgt_ds_rel16_ipm, - &m68000_device::sgt_ais_ipm, - &m68000_device::sgt_aips_ipm, - &m68000_device::sgt_pais_ipm, - &m68000_device::sgt_das_ipm, - &m68000_device::sgt_dais_ipm, - &m68000_device::sgt_adr16_ipm, - &m68000_device::sgt_adr32_ipm, - &m68000_device::sle_ds_ipm, - &m68000_device::dble_ds_rel16_ipm, - &m68000_device::sle_ais_ipm, - &m68000_device::sle_aips_ipm, - &m68000_device::sle_pais_ipm, - &m68000_device::sle_das_ipm, - &m68000_device::sle_dais_ipm, - &m68000_device::sle_adr16_ipm, - &m68000_device::sle_adr32_ipm, - &m68000_device::bra_rel16_ipm, - &m68000_device::bra_rel8_ipm, - &m68000_device::bsr_rel16_ipm, - &m68000_device::bsr_rel8_ipm, - &m68000_device::bhi_rel16_ipm, - &m68000_device::bhi_rel8_ipm, - &m68000_device::bls_rel16_ipm, - &m68000_device::bls_rel8_ipm, - &m68000_device::bcc_rel16_ipm, - &m68000_device::bcc_rel8_ipm, - &m68000_device::bcs_rel16_ipm, - &m68000_device::bcs_rel8_ipm, - &m68000_device::bne_rel16_ipm, - &m68000_device::bne_rel8_ipm, - &m68000_device::beq_rel16_ipm, - &m68000_device::beq_rel8_ipm, - &m68000_device::bvc_rel16_ipm, - &m68000_device::bvc_rel8_ipm, - &m68000_device::bvs_rel16_ipm, - &m68000_device::bvs_rel8_ipm, - &m68000_device::bpl_rel16_ipm, - &m68000_device::bpl_rel8_ipm, - &m68000_device::bmi_rel16_ipm, - &m68000_device::bmi_rel8_ipm, - &m68000_device::bge_rel16_ipm, - &m68000_device::bge_rel8_ipm, - &m68000_device::blt_rel16_ipm, - &m68000_device::blt_rel8_ipm, - &m68000_device::bgt_rel16_ipm, - &m68000_device::bgt_rel8_ipm, - &m68000_device::ble_rel16_ipm, - &m68000_device::ble_rel8_ipm, - &m68000_device::moveq_imm8o_dd_ipm, - &m68000_device::or_b_ds_dd_ipm, - &m68000_device::or_b_ais_dd_ipm, - &m68000_device::or_b_aips_dd_ipm, - &m68000_device::or_b_pais_dd_ipm, - &m68000_device::or_b_das_dd_ipm, - &m68000_device::or_b_dais_dd_ipm, - &m68000_device::or_b_adr16_dd_ipm, - &m68000_device::or_b_adr32_dd_ipm, - &m68000_device::or_b_dpc_dd_ipm, - &m68000_device::or_b_dpci_dd_ipm, - &m68000_device::or_b_imm8_dd_ipm, - &m68000_device::or_w_ds_dd_ipm, - &m68000_device::or_w_ais_dd_ipm, - &m68000_device::or_w_aips_dd_ipm, - &m68000_device::or_w_pais_dd_ipm, - &m68000_device::or_w_das_dd_ipm, - &m68000_device::or_w_dais_dd_ipm, - &m68000_device::or_w_adr16_dd_ipm, - &m68000_device::or_w_adr32_dd_ipm, - &m68000_device::or_w_dpc_dd_ipm, - &m68000_device::or_w_dpci_dd_ipm, - &m68000_device::or_w_imm16_dd_ipm, - &m68000_device::or_l_ds_dd_ipm, - &m68000_device::or_l_ais_dd_ipm, - &m68000_device::or_l_aips_dd_ipm, - &m68000_device::or_l_pais_dd_ipm, - &m68000_device::or_l_das_dd_ipm, - &m68000_device::or_l_dais_dd_ipm, - &m68000_device::or_l_adr16_dd_ipm, - &m68000_device::or_l_adr32_dd_ipm, - &m68000_device::or_l_dpc_dd_ipm, - &m68000_device::or_l_dpci_dd_ipm, - &m68000_device::or_l_imm32_dd_ipm, - &m68000_device::divu_w_ds_dd_ipm, - &m68000_device::divu_w_ais_dd_ipm, - &m68000_device::divu_w_aips_dd_ipm, - &m68000_device::divu_w_pais_dd_ipm, - &m68000_device::divu_w_das_dd_ipm, - &m68000_device::divu_w_dais_dd_ipm, - &m68000_device::divu_w_adr16_dd_ipm, - &m68000_device::divu_w_adr32_dd_ipm, - &m68000_device::divu_w_dpc_dd_ipm, - &m68000_device::divu_w_dpci_dd_ipm, - &m68000_device::divu_w_imm16_dd_ipm, - &m68000_device::sbcd_ds_dd_ipm, - &m68000_device::sbcd_pais_paid_ipm, - &m68000_device::or_b_dd_ais_ipm, - &m68000_device::or_b_dd_aips_ipm, - &m68000_device::or_b_dd_pais_ipm, - &m68000_device::or_b_dd_das_ipm, - &m68000_device::or_b_dd_dais_ipm, - &m68000_device::or_b_dd_adr16_ipm, - &m68000_device::or_b_dd_adr32_ipm, - &m68000_device::or_w_dd_ais_ipm, - &m68000_device::or_w_dd_aips_ipm, - &m68000_device::or_w_dd_pais_ipm, - &m68000_device::or_w_dd_das_ipm, - &m68000_device::or_w_dd_dais_ipm, - &m68000_device::or_w_dd_adr16_ipm, - &m68000_device::or_w_dd_adr32_ipm, - &m68000_device::or_l_dd_ais_ipm, - &m68000_device::or_l_dd_aips_ipm, - &m68000_device::or_l_dd_pais_ipm, - &m68000_device::or_l_dd_das_ipm, - &m68000_device::or_l_dd_dais_ipm, - &m68000_device::or_l_dd_adr16_ipm, - &m68000_device::or_l_dd_adr32_ipm, - &m68000_device::divs_w_ds_dd_ipm, - &m68000_device::divs_w_ais_dd_ipm, - &m68000_device::divs_w_aips_dd_ipm, - &m68000_device::divs_w_pais_dd_ipm, - &m68000_device::divs_w_das_dd_ipm, - &m68000_device::divs_w_dais_dd_ipm, - &m68000_device::divs_w_adr16_dd_ipm, - &m68000_device::divs_w_adr32_dd_ipm, - &m68000_device::divs_w_dpc_dd_ipm, - &m68000_device::divs_w_dpci_dd_ipm, - &m68000_device::divs_w_imm16_dd_ipm, - &m68000_device::sub_b_ds_dd_ipm, - &m68000_device::sub_b_ais_dd_ipm, - &m68000_device::sub_b_aips_dd_ipm, - &m68000_device::sub_b_pais_dd_ipm, - &m68000_device::sub_b_das_dd_ipm, - &m68000_device::sub_b_dais_dd_ipm, - &m68000_device::sub_b_adr16_dd_ipm, - &m68000_device::sub_b_adr32_dd_ipm, - &m68000_device::sub_b_dpc_dd_ipm, - &m68000_device::sub_b_dpci_dd_ipm, - &m68000_device::sub_b_imm8_dd_ipm, - &m68000_device::sub_w_ds_dd_ipm, - &m68000_device::sub_w_as_dd_ipm, - &m68000_device::sub_w_ais_dd_ipm, - &m68000_device::sub_w_aips_dd_ipm, - &m68000_device::sub_w_pais_dd_ipm, - &m68000_device::sub_w_das_dd_ipm, - &m68000_device::sub_w_dais_dd_ipm, - &m68000_device::sub_w_adr16_dd_ipm, - &m68000_device::sub_w_adr32_dd_ipm, - &m68000_device::sub_w_dpc_dd_ipm, - &m68000_device::sub_w_dpci_dd_ipm, - &m68000_device::sub_w_imm16_dd_ipm, - &m68000_device::sub_l_ds_dd_ipm, - &m68000_device::sub_l_as_dd_ipm, - &m68000_device::sub_l_ais_dd_ipm, - &m68000_device::sub_l_aips_dd_ipm, - &m68000_device::sub_l_pais_dd_ipm, - &m68000_device::sub_l_das_dd_ipm, - &m68000_device::sub_l_dais_dd_ipm, - &m68000_device::sub_l_adr16_dd_ipm, - &m68000_device::sub_l_adr32_dd_ipm, - &m68000_device::sub_l_dpc_dd_ipm, - &m68000_device::sub_l_dpci_dd_ipm, - &m68000_device::sub_l_imm32_dd_ipm, - &m68000_device::suba_w_ds_ad_ipm, - &m68000_device::suba_w_as_ad_ipm, - &m68000_device::suba_w_ais_ad_ipm, - &m68000_device::suba_w_aips_ad_ipm, - &m68000_device::suba_w_pais_ad_ipm, - &m68000_device::suba_w_das_ad_ipm, - &m68000_device::suba_w_dais_ad_ipm, - &m68000_device::suba_w_adr16_ad_ipm, - &m68000_device::suba_w_adr32_ad_ipm, - &m68000_device::suba_w_dpc_ad_ipm, - &m68000_device::suba_w_dpci_ad_ipm, - &m68000_device::suba_w_imm16_ad_ipm, - &m68000_device::subx_b_ds_dd_ipm, - &m68000_device::subx_b_pais_paid_ipm, - &m68000_device::sub_b_dd_ais_ipm, - &m68000_device::sub_b_dd_aips_ipm, - &m68000_device::sub_b_dd_pais_ipm, - &m68000_device::sub_b_dd_das_ipm, - &m68000_device::sub_b_dd_dais_ipm, - &m68000_device::sub_b_dd_adr16_ipm, - &m68000_device::sub_b_dd_adr32_ipm, - &m68000_device::subx_w_ds_dd_ipm, - &m68000_device::subx_w_pais_paid_ipm, - &m68000_device::sub_w_dd_ais_ipm, - &m68000_device::sub_w_dd_aips_ipm, - &m68000_device::sub_w_dd_pais_ipm, - &m68000_device::sub_w_dd_das_ipm, - &m68000_device::sub_w_dd_dais_ipm, - &m68000_device::sub_w_dd_adr16_ipm, - &m68000_device::sub_w_dd_adr32_ipm, - &m68000_device::subx_l_ds_dd_ipm, - &m68000_device::subx_l_pais_paid_ipm, - &m68000_device::sub_l_dd_ais_ipm, - &m68000_device::sub_l_dd_aips_ipm, - &m68000_device::sub_l_dd_pais_ipm, - &m68000_device::sub_l_dd_das_ipm, - &m68000_device::sub_l_dd_dais_ipm, - &m68000_device::sub_l_dd_adr16_ipm, - &m68000_device::sub_l_dd_adr32_ipm, - &m68000_device::suba_l_ds_ad_ipm, - &m68000_device::suba_l_as_ad_ipm, - &m68000_device::suba_l_ais_ad_ipm, - &m68000_device::suba_l_aips_ad_ipm, - &m68000_device::suba_l_pais_ad_ipm, - &m68000_device::suba_l_das_ad_ipm, - &m68000_device::suba_l_dais_ad_ipm, - &m68000_device::suba_l_adr16_ad_ipm, - &m68000_device::suba_l_adr32_ad_ipm, - &m68000_device::suba_l_dpc_ad_ipm, - &m68000_device::suba_l_dpci_ad_ipm, - &m68000_device::suba_l_imm32_ad_ipm, - &m68000_device::cmp_b_ds_dd_ipm, - &m68000_device::cmp_b_ais_dd_ipm, - &m68000_device::cmp_b_aips_dd_ipm, - &m68000_device::cmp_b_pais_dd_ipm, - &m68000_device::cmp_b_das_dd_ipm, - &m68000_device::cmp_b_dais_dd_ipm, - &m68000_device::cmp_b_adr16_dd_ipm, - &m68000_device::cmp_b_adr32_dd_ipm, - &m68000_device::cmp_b_dpc_dd_ipm, - &m68000_device::cmp_b_dpci_dd_ipm, - &m68000_device::cmp_b_imm8_dd_ipm, - &m68000_device::cmp_w_ds_dd_ipm, - &m68000_device::cmp_w_as_dd_ipm, - &m68000_device::cmp_w_ais_dd_ipm, - &m68000_device::cmp_w_aips_dd_ipm, - &m68000_device::cmp_w_pais_dd_ipm, - &m68000_device::cmp_w_das_dd_ipm, - &m68000_device::cmp_w_dais_dd_ipm, - &m68000_device::cmp_w_adr16_dd_ipm, - &m68000_device::cmp_w_adr32_dd_ipm, - &m68000_device::cmp_w_dpc_dd_ipm, - &m68000_device::cmp_w_dpci_dd_ipm, - &m68000_device::cmp_w_imm16_dd_ipm, - &m68000_device::cmp_l_ds_dd_ipm, - &m68000_device::cmp_l_as_dd_ipm, - &m68000_device::cmp_l_ais_dd_ipm, - &m68000_device::cmp_l_aips_dd_ipm, - &m68000_device::cmp_l_pais_dd_ipm, - &m68000_device::cmp_l_das_dd_ipm, - &m68000_device::cmp_l_dais_dd_ipm, - &m68000_device::cmp_l_adr16_dd_ipm, - &m68000_device::cmp_l_adr32_dd_ipm, - &m68000_device::cmp_l_dpc_dd_ipm, - &m68000_device::cmp_l_dpci_dd_ipm, - &m68000_device::cmp_l_imm32_dd_ipm, - &m68000_device::cmpa_w_ds_ad_ipm, - &m68000_device::cmpa_w_as_ad_ipm, - &m68000_device::cmpa_w_ais_ad_ipm, - &m68000_device::cmpa_w_aips_ad_ipm, - &m68000_device::cmpa_w_pais_ad_ipm, - &m68000_device::cmpa_w_das_ad_ipm, - &m68000_device::cmpa_w_dais_ad_ipm, - &m68000_device::cmpa_w_adr16_ad_ipm, - &m68000_device::cmpa_w_adr32_ad_ipm, - &m68000_device::cmpa_w_dpc_ad_ipm, - &m68000_device::cmpa_w_dpci_ad_ipm, - &m68000_device::cmpa_w_imm16_ad_ipm, - &m68000_device::eor_b_dd_ds_ipm, - &m68000_device::cmpm_b_aips_aipd_ipm, - &m68000_device::eor_b_dd_ais_ipm, - &m68000_device::eor_b_dd_aips_ipm, - &m68000_device::eor_b_dd_pais_ipm, - &m68000_device::eor_b_dd_das_ipm, - &m68000_device::eor_b_dd_dais_ipm, - &m68000_device::eor_b_dd_adr16_ipm, - &m68000_device::eor_b_dd_adr32_ipm, - &m68000_device::eor_w_dd_ds_ipm, - &m68000_device::cmpm_w_aips_aipd_ipm, - &m68000_device::eor_w_dd_ais_ipm, - &m68000_device::eor_w_dd_aips_ipm, - &m68000_device::eor_w_dd_pais_ipm, - &m68000_device::eor_w_dd_das_ipm, - &m68000_device::eor_w_dd_dais_ipm, - &m68000_device::eor_w_dd_adr16_ipm, - &m68000_device::eor_w_dd_adr32_ipm, - &m68000_device::eor_l_dd_ds_ipm, - &m68000_device::cmpm_l_aips_aipd_ipm, - &m68000_device::eor_l_dd_ais_ipm, - &m68000_device::eor_l_dd_aips_ipm, - &m68000_device::eor_l_dd_pais_ipm, - &m68000_device::eor_l_dd_das_ipm, - &m68000_device::eor_l_dd_dais_ipm, - &m68000_device::eor_l_dd_adr16_ipm, - &m68000_device::eor_l_dd_adr32_ipm, - &m68000_device::cmpa_l_ds_ad_ipm, - &m68000_device::cmpa_l_as_ad_ipm, - &m68000_device::cmpa_l_ais_ad_ipm, - &m68000_device::cmpa_l_aips_ad_ipm, - &m68000_device::cmpa_l_pais_ad_ipm, - &m68000_device::cmpa_l_das_ad_ipm, - &m68000_device::cmpa_l_dais_ad_ipm, - &m68000_device::cmpa_l_adr16_ad_ipm, - &m68000_device::cmpa_l_adr32_ad_ipm, - &m68000_device::cmpa_l_dpc_ad_ipm, - &m68000_device::cmpa_l_dpci_ad_ipm, - &m68000_device::cmpa_l_imm32_ad_ipm, - &m68000_device::and_b_ds_dd_ipm, - &m68000_device::and_b_ais_dd_ipm, - &m68000_device::and_b_aips_dd_ipm, - &m68000_device::and_b_pais_dd_ipm, - &m68000_device::and_b_das_dd_ipm, - &m68000_device::and_b_dais_dd_ipm, - &m68000_device::and_b_adr16_dd_ipm, - &m68000_device::and_b_adr32_dd_ipm, - &m68000_device::and_b_dpc_dd_ipm, - &m68000_device::and_b_dpci_dd_ipm, - &m68000_device::and_b_imm8_dd_ipm, - &m68000_device::and_w_ds_dd_ipm, - &m68000_device::and_w_ais_dd_ipm, - &m68000_device::and_w_aips_dd_ipm, - &m68000_device::and_w_pais_dd_ipm, - &m68000_device::and_w_das_dd_ipm, - &m68000_device::and_w_dais_dd_ipm, - &m68000_device::and_w_adr16_dd_ipm, - &m68000_device::and_w_adr32_dd_ipm, - &m68000_device::and_w_dpc_dd_ipm, - &m68000_device::and_w_dpci_dd_ipm, - &m68000_device::and_w_imm16_dd_ipm, - &m68000_device::and_l_ds_dd_ipm, - &m68000_device::and_l_ais_dd_ipm, - &m68000_device::and_l_aips_dd_ipm, - &m68000_device::and_l_pais_dd_ipm, - &m68000_device::and_l_das_dd_ipm, - &m68000_device::and_l_dais_dd_ipm, - &m68000_device::and_l_adr16_dd_ipm, - &m68000_device::and_l_adr32_dd_ipm, - &m68000_device::and_l_dpc_dd_ipm, - &m68000_device::and_l_dpci_dd_ipm, - &m68000_device::and_l_imm32_dd_ipm, - &m68000_device::mulu_w_ds_dd_ipm, - &m68000_device::mulu_w_ais_dd_ipm, - &m68000_device::mulu_w_aips_dd_ipm, - &m68000_device::mulu_w_pais_dd_ipm, - &m68000_device::mulu_w_das_dd_ipm, - &m68000_device::mulu_w_dais_dd_ipm, - &m68000_device::mulu_w_adr16_dd_ipm, - &m68000_device::mulu_w_adr32_dd_ipm, - &m68000_device::mulu_w_dpc_dd_ipm, - &m68000_device::mulu_w_dpci_dd_ipm, - &m68000_device::mulu_w_imm16_dd_ipm, - &m68000_device::abcd_ds_dd_ipm, - &m68000_device::abcd_pais_paid_ipm, - &m68000_device::and_b_dd_ais_ipm, - &m68000_device::and_b_dd_aips_ipm, - &m68000_device::and_b_dd_pais_ipm, - &m68000_device::and_b_dd_das_ipm, - &m68000_device::and_b_dd_dais_ipm, - &m68000_device::and_b_dd_adr16_ipm, - &m68000_device::and_b_dd_adr32_ipm, - &m68000_device::exg_dd_ds_ipm, - &m68000_device::exg_ad_as_ipm, - &m68000_device::and_w_dd_ais_ipm, - &m68000_device::and_w_dd_aips_ipm, - &m68000_device::and_w_dd_pais_ipm, - &m68000_device::and_w_dd_das_ipm, - &m68000_device::and_w_dd_dais_ipm, - &m68000_device::and_w_dd_adr16_ipm, - &m68000_device::and_w_dd_adr32_ipm, - &m68000_device::exg_dd_as_ipm, - &m68000_device::and_l_dd_ais_ipm, - &m68000_device::and_l_dd_aips_ipm, - &m68000_device::and_l_dd_pais_ipm, - &m68000_device::and_l_dd_das_ipm, - &m68000_device::and_l_dd_dais_ipm, - &m68000_device::and_l_dd_adr16_ipm, - &m68000_device::and_l_dd_adr32_ipm, - &m68000_device::muls_w_ds_dd_ipm, - &m68000_device::muls_w_ais_dd_ipm, - &m68000_device::muls_w_aips_dd_ipm, - &m68000_device::muls_w_pais_dd_ipm, - &m68000_device::muls_w_das_dd_ipm, - &m68000_device::muls_w_dais_dd_ipm, - &m68000_device::muls_w_adr16_dd_ipm, - &m68000_device::muls_w_adr32_dd_ipm, - &m68000_device::muls_w_dpc_dd_ipm, - &m68000_device::muls_w_dpci_dd_ipm, - &m68000_device::muls_w_imm16_dd_ipm, - &m68000_device::add_b_ds_dd_ipm, - &m68000_device::add_b_ais_dd_ipm, - &m68000_device::add_b_aips_dd_ipm, - &m68000_device::add_b_pais_dd_ipm, - &m68000_device::add_b_das_dd_ipm, - &m68000_device::add_b_dais_dd_ipm, - &m68000_device::add_b_adr16_dd_ipm, - &m68000_device::add_b_adr32_dd_ipm, - &m68000_device::add_b_dpc_dd_ipm, - &m68000_device::add_b_dpci_dd_ipm, - &m68000_device::add_b_imm8_dd_ipm, - &m68000_device::add_w_ds_dd_ipm, - &m68000_device::add_w_as_dd_ipm, - &m68000_device::add_w_ais_dd_ipm, - &m68000_device::add_w_aips_dd_ipm, - &m68000_device::add_w_pais_dd_ipm, - &m68000_device::add_w_das_dd_ipm, - &m68000_device::add_w_dais_dd_ipm, - &m68000_device::add_w_adr16_dd_ipm, - &m68000_device::add_w_adr32_dd_ipm, - &m68000_device::add_w_dpc_dd_ipm, - &m68000_device::add_w_dpci_dd_ipm, - &m68000_device::add_w_imm16_dd_ipm, - &m68000_device::add_l_ds_dd_ipm, - &m68000_device::add_l_as_dd_ipm, - &m68000_device::add_l_ais_dd_ipm, - &m68000_device::add_l_aips_dd_ipm, - &m68000_device::add_l_pais_dd_ipm, - &m68000_device::add_l_das_dd_ipm, - &m68000_device::add_l_dais_dd_ipm, - &m68000_device::add_l_adr16_dd_ipm, - &m68000_device::add_l_adr32_dd_ipm, - &m68000_device::add_l_dpc_dd_ipm, - &m68000_device::add_l_dpci_dd_ipm, - &m68000_device::add_l_imm32_dd_ipm, - &m68000_device::adda_w_ds_ad_ipm, - &m68000_device::adda_w_as_ad_ipm, - &m68000_device::adda_w_ais_ad_ipm, - &m68000_device::adda_w_aips_ad_ipm, - &m68000_device::adda_w_pais_ad_ipm, - &m68000_device::adda_w_das_ad_ipm, - &m68000_device::adda_w_dais_ad_ipm, - &m68000_device::adda_w_adr16_ad_ipm, - &m68000_device::adda_w_adr32_ad_ipm, - &m68000_device::adda_w_dpc_ad_ipm, - &m68000_device::adda_w_dpci_ad_ipm, - &m68000_device::adda_w_imm16_ad_ipm, - &m68000_device::addx_b_ds_dd_ipm, - &m68000_device::addx_b_pais_paid_ipm, - &m68000_device::add_b_dd_ais_ipm, - &m68000_device::add_b_dd_aips_ipm, - &m68000_device::add_b_dd_pais_ipm, - &m68000_device::add_b_dd_das_ipm, - &m68000_device::add_b_dd_dais_ipm, - &m68000_device::add_b_dd_adr16_ipm, - &m68000_device::add_b_dd_adr32_ipm, - &m68000_device::addx_w_ds_dd_ipm, - &m68000_device::addx_w_pais_paid_ipm, - &m68000_device::add_w_dd_ais_ipm, - &m68000_device::add_w_dd_aips_ipm, - &m68000_device::add_w_dd_pais_ipm, - &m68000_device::add_w_dd_das_ipm, - &m68000_device::add_w_dd_dais_ipm, - &m68000_device::add_w_dd_adr16_ipm, - &m68000_device::add_w_dd_adr32_ipm, - &m68000_device::addx_l_ds_dd_ipm, - &m68000_device::addx_l_pais_paid_ipm, - &m68000_device::add_l_dd_ais_ipm, - &m68000_device::add_l_dd_aips_ipm, - &m68000_device::add_l_dd_pais_ipm, - &m68000_device::add_l_dd_das_ipm, - &m68000_device::add_l_dd_dais_ipm, - &m68000_device::add_l_dd_adr16_ipm, - &m68000_device::add_l_dd_adr32_ipm, - &m68000_device::adda_l_ds_ad_ipm, - &m68000_device::adda_l_as_ad_ipm, - &m68000_device::adda_l_ais_ad_ipm, - &m68000_device::adda_l_aips_ad_ipm, - &m68000_device::adda_l_pais_ad_ipm, - &m68000_device::adda_l_das_ad_ipm, - &m68000_device::adda_l_dais_ad_ipm, - &m68000_device::adda_l_adr16_ad_ipm, - &m68000_device::adda_l_adr32_ad_ipm, - &m68000_device::adda_l_dpc_ad_ipm, - &m68000_device::adda_l_dpci_ad_ipm, - &m68000_device::adda_l_imm32_ad_ipm, - &m68000_device::asr_b_imm3_ds_ipm, - &m68000_device::lsr_b_imm3_ds_ipm, - &m68000_device::roxr_b_imm3_ds_ipm, - &m68000_device::ror_b_imm3_ds_ipm, - &m68000_device::asr_b_dd_ds_ipm, - &m68000_device::lsr_b_dd_ds_ipm, - &m68000_device::roxr_b_dd_ds_ipm, - &m68000_device::ror_b_dd_ds_ipm, - &m68000_device::asr_w_imm3_ds_ipm, - &m68000_device::lsr_w_imm3_ds_ipm, - &m68000_device::roxr_w_imm3_ds_ipm, - &m68000_device::ror_w_imm3_ds_ipm, - &m68000_device::asr_w_dd_ds_ipm, - &m68000_device::lsr_w_dd_ds_ipm, - &m68000_device::roxr_w_dd_ds_ipm, - &m68000_device::ror_w_dd_ds_ipm, - &m68000_device::asr_l_imm3_ds_ipm, - &m68000_device::lsr_l_imm3_ds_ipm, - &m68000_device::roxr_l_imm3_ds_ipm, - &m68000_device::ror_l_imm3_ds_ipm, - &m68000_device::asr_l_dd_ds_ipm, - &m68000_device::lsr_l_dd_ds_ipm, - &m68000_device::roxr_l_dd_ds_ipm, - &m68000_device::ror_l_dd_ds_ipm, - &m68000_device::asr_ais_ipm, - &m68000_device::asr_aips_ipm, - &m68000_device::asr_pais_ipm, - &m68000_device::asr_das_ipm, - &m68000_device::asr_dais_ipm, - &m68000_device::asr_adr16_ipm, - &m68000_device::asr_adr32_ipm, - &m68000_device::asl_b_imm3_ds_ipm, - &m68000_device::lsl_b_imm3_ds_ipm, - &m68000_device::roxl_b_imm3_ds_ipm, - &m68000_device::rol_b_imm3_ds_ipm, - &m68000_device::asl_b_dd_ds_ipm, - &m68000_device::lsl_b_dd_ds_ipm, - &m68000_device::roxl_b_dd_ds_ipm, - &m68000_device::rol_b_dd_ds_ipm, - &m68000_device::asl_w_imm3_ds_ipm, - &m68000_device::lsl_w_imm3_ds_ipm, - &m68000_device::roxl_w_imm3_ds_ipm, - &m68000_device::rol_w_imm3_ds_ipm, - &m68000_device::asl_w_dd_ds_ipm, - &m68000_device::lsl_w_dd_ds_ipm, - &m68000_device::roxl_w_dd_ds_ipm, - &m68000_device::rol_w_dd_ds_ipm, - &m68000_device::asl_l_imm3_ds_ipm, - &m68000_device::lsl_l_imm3_ds_ipm, - &m68000_device::roxl_l_imm3_ds_ipm, - &m68000_device::rol_l_imm3_ds_ipm, - &m68000_device::asl_l_dd_ds_ipm, - &m68000_device::lsl_l_dd_ds_ipm, - &m68000_device::roxl_l_dd_ds_ipm, - &m68000_device::rol_l_dd_ds_ipm, - &m68000_device::asl_ais_ipm, - &m68000_device::asl_aips_ipm, - &m68000_device::asl_pais_ipm, - &m68000_device::asl_das_ipm, - &m68000_device::asl_dais_ipm, - &m68000_device::asl_adr16_ipm, - &m68000_device::asl_adr32_ipm, - &m68000_device::lsr_ais_ipm, - &m68000_device::lsr_aips_ipm, - &m68000_device::lsr_pais_ipm, - &m68000_device::lsr_das_ipm, - &m68000_device::lsr_dais_ipm, - &m68000_device::lsr_adr16_ipm, - &m68000_device::lsr_adr32_ipm, - &m68000_device::lsl_ais_ipm, - &m68000_device::lsl_aips_ipm, - &m68000_device::lsl_pais_ipm, - &m68000_device::lsl_das_ipm, - &m68000_device::lsl_dais_ipm, - &m68000_device::lsl_adr16_ipm, - &m68000_device::lsl_adr32_ipm, - &m68000_device::roxr_ais_ipm, - &m68000_device::roxr_aips_ipm, - &m68000_device::roxr_pais_ipm, - &m68000_device::roxr_das_ipm, - &m68000_device::roxr_dais_ipm, - &m68000_device::roxr_adr16_ipm, - &m68000_device::roxr_adr32_ipm, - &m68000_device::roxl_ais_ipm, - &m68000_device::roxl_aips_ipm, - &m68000_device::roxl_pais_ipm, - &m68000_device::roxl_das_ipm, - &m68000_device::roxl_dais_ipm, - &m68000_device::roxl_adr16_ipm, - &m68000_device::roxl_adr32_ipm, - &m68000_device::ror_ais_ipm, - &m68000_device::ror_aips_ipm, - &m68000_device::ror_pais_ipm, - &m68000_device::ror_das_ipm, - &m68000_device::ror_dais_ipm, - &m68000_device::ror_adr16_ipm, - &m68000_device::ror_adr32_ipm, - &m68000_device::rol_ais_ipm, - &m68000_device::rol_aips_ipm, - &m68000_device::rol_pais_ipm, - &m68000_device::rol_das_ipm, - &m68000_device::rol_dais_ipm, - &m68000_device::rol_adr16_ipm, - &m68000_device::rol_adr32_ipm, +const m68000_mcu_device::handlerm m68000_mcu_device::s_handlers_ipm[] = { + &m68000_mcu_device::state_reset_ipm, + &m68000_mcu_device::state_bus_error_ipm, + &m68000_mcu_device::state_address_error_ipm, + &m68000_mcu_device::state_double_fault_ipm, + &m68000_mcu_device::state_interrupt_ipm, + &m68000_mcu_device::state_trace_ipm, + &m68000_mcu_device::state_illegal_ipm, + &m68000_mcu_device::state_priviledge_ipm, + &m68000_mcu_device::state_linea_ipm, + &m68000_mcu_device::state_linef_ipm, + &m68000_mcu_device::ori_b_imm8_ds_ipm, + &m68000_mcu_device::ori_b_imm8_ais_ipm, + &m68000_mcu_device::ori_b_imm8_aips_ipm, + &m68000_mcu_device::ori_b_imm8_pais_ipm, + &m68000_mcu_device::ori_b_imm8_das_ipm, + &m68000_mcu_device::ori_b_imm8_dais_ipm, + &m68000_mcu_device::ori_b_imm8_adr16_ipm, + &m68000_mcu_device::ori_b_imm8_adr32_ipm, + &m68000_mcu_device::ori_imm8_ccr_ipm, + &m68000_mcu_device::ori_w_imm16_ds_ipm, + &m68000_mcu_device::ori_w_imm16_ais_ipm, + &m68000_mcu_device::ori_w_imm16_aips_ipm, + &m68000_mcu_device::ori_w_imm16_pais_ipm, + &m68000_mcu_device::ori_w_imm16_das_ipm, + &m68000_mcu_device::ori_w_imm16_dais_ipm, + &m68000_mcu_device::ori_w_imm16_adr16_ipm, + &m68000_mcu_device::ori_w_imm16_adr32_ipm, + &m68000_mcu_device::ori_i16u_sr_ipm, + &m68000_mcu_device::ori_l_imm32_ds_ipm, + &m68000_mcu_device::ori_l_imm32_ais_ipm, + &m68000_mcu_device::ori_l_imm32_aips_ipm, + &m68000_mcu_device::ori_l_imm32_pais_ipm, + &m68000_mcu_device::ori_l_imm32_das_ipm, + &m68000_mcu_device::ori_l_imm32_dais_ipm, + &m68000_mcu_device::ori_l_imm32_adr16_ipm, + &m68000_mcu_device::ori_l_imm32_adr32_ipm, + &m68000_mcu_device::btst_dd_ds_ipm, + &m68000_mcu_device::movep_w_das_dd_ipm, + &m68000_mcu_device::btst_dd_ais_ipm, + &m68000_mcu_device::btst_dd_aips_ipm, + &m68000_mcu_device::btst_dd_pais_ipm, + &m68000_mcu_device::btst_dd_das_ipm, + &m68000_mcu_device::btst_dd_dais_ipm, + &m68000_mcu_device::btst_dd_adr16_ipm, + &m68000_mcu_device::btst_dd_adr32_ipm, + &m68000_mcu_device::btst_dd_dpc_ipm, + &m68000_mcu_device::btst_dd_dpci_ipm, + &m68000_mcu_device::btst_dd_imm_ipm, + &m68000_mcu_device::bchg_dd_ds_ipm, + &m68000_mcu_device::movep_l_das_dd_ipm, + &m68000_mcu_device::bchg_dd_ais_ipm, + &m68000_mcu_device::bchg_dd_aips_ipm, + &m68000_mcu_device::bchg_dd_pais_ipm, + &m68000_mcu_device::bchg_dd_das_ipm, + &m68000_mcu_device::bchg_dd_dais_ipm, + &m68000_mcu_device::bchg_dd_adr16_ipm, + &m68000_mcu_device::bchg_dd_adr32_ipm, + &m68000_mcu_device::bclr_dd_ds_ipm, + &m68000_mcu_device::movep_w_dd_das_ipm, + &m68000_mcu_device::bclr_dd_ais_ipm, + &m68000_mcu_device::bclr_dd_aips_ipm, + &m68000_mcu_device::bclr_dd_pais_ipm, + &m68000_mcu_device::bclr_dd_das_ipm, + &m68000_mcu_device::bclr_dd_dais_ipm, + &m68000_mcu_device::bclr_dd_adr16_ipm, + &m68000_mcu_device::bclr_dd_adr32_ipm, + &m68000_mcu_device::bset_dd_ds_ipm, + &m68000_mcu_device::movep_l_dd_das_ipm, + &m68000_mcu_device::bset_dd_ais_ipm, + &m68000_mcu_device::bset_dd_aips_ipm, + &m68000_mcu_device::bset_dd_pais_ipm, + &m68000_mcu_device::bset_dd_das_ipm, + &m68000_mcu_device::bset_dd_dais_ipm, + &m68000_mcu_device::bset_dd_adr16_ipm, + &m68000_mcu_device::bset_dd_adr32_ipm, + &m68000_mcu_device::andi_b_imm8_ds_ipm, + &m68000_mcu_device::andi_b_imm8_ais_ipm, + &m68000_mcu_device::andi_b_imm8_aips_ipm, + &m68000_mcu_device::andi_b_imm8_pais_ipm, + &m68000_mcu_device::andi_b_imm8_das_ipm, + &m68000_mcu_device::andi_b_imm8_dais_ipm, + &m68000_mcu_device::andi_b_imm8_adr16_ipm, + &m68000_mcu_device::andi_b_imm8_adr32_ipm, + &m68000_mcu_device::andi_imm8_ccr_ipm, + &m68000_mcu_device::andi_w_imm16_ds_ipm, + &m68000_mcu_device::andi_w_imm16_ais_ipm, + &m68000_mcu_device::andi_w_imm16_aips_ipm, + &m68000_mcu_device::andi_w_imm16_pais_ipm, + &m68000_mcu_device::andi_w_imm16_das_ipm, + &m68000_mcu_device::andi_w_imm16_dais_ipm, + &m68000_mcu_device::andi_w_imm16_adr16_ipm, + &m68000_mcu_device::andi_w_imm16_adr32_ipm, + &m68000_mcu_device::andi_i16u_sr_ipm, + &m68000_mcu_device::andi_l_imm32_ds_ipm, + &m68000_mcu_device::andi_l_imm32_ais_ipm, + &m68000_mcu_device::andi_l_imm32_aips_ipm, + &m68000_mcu_device::andi_l_imm32_pais_ipm, + &m68000_mcu_device::andi_l_imm32_das_ipm, + &m68000_mcu_device::andi_l_imm32_dais_ipm, + &m68000_mcu_device::andi_l_imm32_adr16_ipm, + &m68000_mcu_device::andi_l_imm32_adr32_ipm, + &m68000_mcu_device::subi_b_imm8_ds_ipm, + &m68000_mcu_device::subi_b_imm8_ais_ipm, + &m68000_mcu_device::subi_b_imm8_aips_ipm, + &m68000_mcu_device::subi_b_imm8_pais_ipm, + &m68000_mcu_device::subi_b_imm8_das_ipm, + &m68000_mcu_device::subi_b_imm8_dais_ipm, + &m68000_mcu_device::subi_b_imm8_adr16_ipm, + &m68000_mcu_device::subi_b_imm8_adr32_ipm, + &m68000_mcu_device::subi_w_imm16_ds_ipm, + &m68000_mcu_device::subi_w_imm16_ais_ipm, + &m68000_mcu_device::subi_w_imm16_aips_ipm, + &m68000_mcu_device::subi_w_imm16_pais_ipm, + &m68000_mcu_device::subi_w_imm16_das_ipm, + &m68000_mcu_device::subi_w_imm16_dais_ipm, + &m68000_mcu_device::subi_w_imm16_adr16_ipm, + &m68000_mcu_device::subi_w_imm16_adr32_ipm, + &m68000_mcu_device::subi_l_imm32_ds_ipm, + &m68000_mcu_device::subi_l_imm32_ais_ipm, + &m68000_mcu_device::subi_l_imm32_aips_ipm, + &m68000_mcu_device::subi_l_imm32_pais_ipm, + &m68000_mcu_device::subi_l_imm32_das_ipm, + &m68000_mcu_device::subi_l_imm32_dais_ipm, + &m68000_mcu_device::subi_l_imm32_adr16_ipm, + &m68000_mcu_device::subi_l_imm32_adr32_ipm, + &m68000_mcu_device::addi_b_imm8_ds_ipm, + &m68000_mcu_device::addi_b_imm8_ais_ipm, + &m68000_mcu_device::addi_b_imm8_aips_ipm, + &m68000_mcu_device::addi_b_imm8_pais_ipm, + &m68000_mcu_device::addi_b_imm8_das_ipm, + &m68000_mcu_device::addi_b_imm8_dais_ipm, + &m68000_mcu_device::addi_b_imm8_adr16_ipm, + &m68000_mcu_device::addi_b_imm8_adr32_ipm, + &m68000_mcu_device::addi_w_imm16_ds_ipm, + &m68000_mcu_device::addi_w_imm16_ais_ipm, + &m68000_mcu_device::addi_w_imm16_aips_ipm, + &m68000_mcu_device::addi_w_imm16_pais_ipm, + &m68000_mcu_device::addi_w_imm16_das_ipm, + &m68000_mcu_device::addi_w_imm16_dais_ipm, + &m68000_mcu_device::addi_w_imm16_adr16_ipm, + &m68000_mcu_device::addi_w_imm16_adr32_ipm, + &m68000_mcu_device::addi_l_imm32_ds_ipm, + &m68000_mcu_device::addi_l_imm32_ais_ipm, + &m68000_mcu_device::addi_l_imm32_aips_ipm, + &m68000_mcu_device::addi_l_imm32_pais_ipm, + &m68000_mcu_device::addi_l_imm32_das_ipm, + &m68000_mcu_device::addi_l_imm32_dais_ipm, + &m68000_mcu_device::addi_l_imm32_adr16_ipm, + &m68000_mcu_device::addi_l_imm32_adr32_ipm, + &m68000_mcu_device::btst_imm8_ds_ipm, + &m68000_mcu_device::btst_imm8_ais_ipm, + &m68000_mcu_device::btst_imm8_aips_ipm, + &m68000_mcu_device::btst_imm8_pais_ipm, + &m68000_mcu_device::btst_imm8_das_ipm, + &m68000_mcu_device::btst_imm8_dais_ipm, + &m68000_mcu_device::btst_imm8_adr16_ipm, + &m68000_mcu_device::btst_imm8_adr32_ipm, + &m68000_mcu_device::btst_imm8_dpc_ipm, + &m68000_mcu_device::btst_imm8_dpci_ipm, + &m68000_mcu_device::bchg_imm8_ds_ipm, + &m68000_mcu_device::bchg_imm8_ais_ipm, + &m68000_mcu_device::bchg_imm8_aips_ipm, + &m68000_mcu_device::bchg_imm8_pais_ipm, + &m68000_mcu_device::bchg_imm8_das_ipm, + &m68000_mcu_device::bchg_imm8_dais_ipm, + &m68000_mcu_device::bchg_imm8_adr16_ipm, + &m68000_mcu_device::bchg_imm8_adr32_ipm, + &m68000_mcu_device::bclr_imm8_ds_ipm, + &m68000_mcu_device::bclr_imm8_ais_ipm, + &m68000_mcu_device::bclr_imm8_aips_ipm, + &m68000_mcu_device::bclr_imm8_pais_ipm, + &m68000_mcu_device::bclr_imm8_das_ipm, + &m68000_mcu_device::bclr_imm8_dais_ipm, + &m68000_mcu_device::bclr_imm8_adr16_ipm, + &m68000_mcu_device::bclr_imm8_adr32_ipm, + &m68000_mcu_device::bset_imm8_ds_ipm, + &m68000_mcu_device::bset_imm8_ais_ipm, + &m68000_mcu_device::bset_imm8_aips_ipm, + &m68000_mcu_device::bset_imm8_pais_ipm, + &m68000_mcu_device::bset_imm8_das_ipm, + &m68000_mcu_device::bset_imm8_dais_ipm, + &m68000_mcu_device::bset_imm8_adr16_ipm, + &m68000_mcu_device::bset_imm8_adr32_ipm, + &m68000_mcu_device::eori_b_imm8_ds_ipm, + &m68000_mcu_device::eori_b_imm8_ais_ipm, + &m68000_mcu_device::eori_b_imm8_aips_ipm, + &m68000_mcu_device::eori_b_imm8_pais_ipm, + &m68000_mcu_device::eori_b_imm8_das_ipm, + &m68000_mcu_device::eori_b_imm8_dais_ipm, + &m68000_mcu_device::eori_b_imm8_adr16_ipm, + &m68000_mcu_device::eori_b_imm8_adr32_ipm, + &m68000_mcu_device::eori_imm8_ccr_ipm, + &m68000_mcu_device::eori_w_imm16_ds_ipm, + &m68000_mcu_device::eori_w_imm16_ais_ipm, + &m68000_mcu_device::eori_w_imm16_aips_ipm, + &m68000_mcu_device::eori_w_imm16_pais_ipm, + &m68000_mcu_device::eori_w_imm16_das_ipm, + &m68000_mcu_device::eori_w_imm16_dais_ipm, + &m68000_mcu_device::eori_w_imm16_adr16_ipm, + &m68000_mcu_device::eori_w_imm16_adr32_ipm, + &m68000_mcu_device::eori_i16u_sr_ipm, + &m68000_mcu_device::eori_l_imm32_ds_ipm, + &m68000_mcu_device::eori_l_imm32_ais_ipm, + &m68000_mcu_device::eori_l_imm32_aips_ipm, + &m68000_mcu_device::eori_l_imm32_pais_ipm, + &m68000_mcu_device::eori_l_imm32_das_ipm, + &m68000_mcu_device::eori_l_imm32_dais_ipm, + &m68000_mcu_device::eori_l_imm32_adr16_ipm, + &m68000_mcu_device::eori_l_imm32_adr32_ipm, + &m68000_mcu_device::cmpi_b_imm8_ds_ipm, + &m68000_mcu_device::cmpi_b_imm8_ais_ipm, + &m68000_mcu_device::cmpi_b_imm8_aips_ipm, + &m68000_mcu_device::cmpi_b_imm8_pais_ipm, + &m68000_mcu_device::cmpi_b_imm8_das_ipm, + &m68000_mcu_device::cmpi_b_imm8_dais_ipm, + &m68000_mcu_device::cmpi_b_imm8_adr16_ipm, + &m68000_mcu_device::cmpi_b_imm8_adr32_ipm, + &m68000_mcu_device::cmpi_w_imm16_ds_ipm, + &m68000_mcu_device::cmpi_w_imm16_ais_ipm, + &m68000_mcu_device::cmpi_w_imm16_aips_ipm, + &m68000_mcu_device::cmpi_w_imm16_pais_ipm, + &m68000_mcu_device::cmpi_w_imm16_das_ipm, + &m68000_mcu_device::cmpi_w_imm16_dais_ipm, + &m68000_mcu_device::cmpi_w_imm16_adr16_ipm, + &m68000_mcu_device::cmpi_w_imm16_adr32_ipm, + &m68000_mcu_device::cmpi_l_imm32_ds_ipm, + &m68000_mcu_device::cmpi_l_imm32_ais_ipm, + &m68000_mcu_device::cmpi_l_imm32_aips_ipm, + &m68000_mcu_device::cmpi_l_imm32_pais_ipm, + &m68000_mcu_device::cmpi_l_imm32_das_ipm, + &m68000_mcu_device::cmpi_l_imm32_dais_ipm, + &m68000_mcu_device::cmpi_l_imm32_adr16_ipm, + &m68000_mcu_device::cmpi_l_imm32_adr32_ipm, + &m68000_mcu_device::move_b_ds_dd_ipm, + &m68000_mcu_device::move_b_ais_dd_ipm, + &m68000_mcu_device::move_b_aips_dd_ipm, + &m68000_mcu_device::move_b_pais_dd_ipm, + &m68000_mcu_device::move_b_das_dd_ipm, + &m68000_mcu_device::move_b_dais_dd_ipm, + &m68000_mcu_device::move_b_adr16_dd_ipm, + &m68000_mcu_device::move_b_adr32_dd_ipm, + &m68000_mcu_device::move_b_dpc_dd_ipm, + &m68000_mcu_device::move_b_dpci_dd_ipm, + &m68000_mcu_device::move_b_imm8_dd_ipm, + &m68000_mcu_device::move_b_ds_aid_ipm, + &m68000_mcu_device::move_b_ais_aid_ipm, + &m68000_mcu_device::move_b_aips_aid_ipm, + &m68000_mcu_device::move_b_pais_aid_ipm, + &m68000_mcu_device::move_b_das_aid_ipm, + &m68000_mcu_device::move_b_dais_aid_ipm, + &m68000_mcu_device::move_b_adr16_aid_ipm, + &m68000_mcu_device::move_b_adr32_aid_ipm, + &m68000_mcu_device::move_b_dpc_aid_ipm, + &m68000_mcu_device::move_b_dpci_aid_ipm, + &m68000_mcu_device::move_b_imm8_aid_ipm, + &m68000_mcu_device::move_b_ds_aipd_ipm, + &m68000_mcu_device::move_b_ais_aipd_ipm, + &m68000_mcu_device::move_b_aips_aipd_ipm, + &m68000_mcu_device::move_b_pais_aipd_ipm, + &m68000_mcu_device::move_b_das_aipd_ipm, + &m68000_mcu_device::move_b_dais_aipd_ipm, + &m68000_mcu_device::move_b_adr16_aipd_ipm, + &m68000_mcu_device::move_b_adr32_aipd_ipm, + &m68000_mcu_device::move_b_dpc_aipd_ipm, + &m68000_mcu_device::move_b_dpci_aipd_ipm, + &m68000_mcu_device::move_b_imm8_aipd_ipm, + &m68000_mcu_device::move_b_ds_paid_ipm, + &m68000_mcu_device::move_b_ais_paid_ipm, + &m68000_mcu_device::move_b_aips_paid_ipm, + &m68000_mcu_device::move_b_pais_paid_ipm, + &m68000_mcu_device::move_b_das_paid_ipm, + &m68000_mcu_device::move_b_dais_paid_ipm, + &m68000_mcu_device::move_b_adr16_paid_ipm, + &m68000_mcu_device::move_b_adr32_paid_ipm, + &m68000_mcu_device::move_b_dpc_paid_ipm, + &m68000_mcu_device::move_b_dpci_paid_ipm, + &m68000_mcu_device::move_b_imm8_paid_ipm, + &m68000_mcu_device::move_b_ds_dad_ipm, + &m68000_mcu_device::move_b_ais_dad_ipm, + &m68000_mcu_device::move_b_aips_dad_ipm, + &m68000_mcu_device::move_b_pais_dad_ipm, + &m68000_mcu_device::move_b_das_dad_ipm, + &m68000_mcu_device::move_b_dais_dad_ipm, + &m68000_mcu_device::move_b_adr16_dad_ipm, + &m68000_mcu_device::move_b_adr32_dad_ipm, + &m68000_mcu_device::move_b_dpc_dad_ipm, + &m68000_mcu_device::move_b_dpci_dad_ipm, + &m68000_mcu_device::move_b_imm8_dad_ipm, + &m68000_mcu_device::move_b_ds_daid_ipm, + &m68000_mcu_device::move_b_ais_daid_ipm, + &m68000_mcu_device::move_b_aips_daid_ipm, + &m68000_mcu_device::move_b_pais_daid_ipm, + &m68000_mcu_device::move_b_das_daid_ipm, + &m68000_mcu_device::move_b_dais_daid_ipm, + &m68000_mcu_device::move_b_adr16_daid_ipm, + &m68000_mcu_device::move_b_adr32_daid_ipm, + &m68000_mcu_device::move_b_dpc_daid_ipm, + &m68000_mcu_device::move_b_dpci_daid_ipm, + &m68000_mcu_device::move_b_imm8_daid_ipm, + &m68000_mcu_device::move_b_ds_adr16_ipm, + &m68000_mcu_device::move_b_ais_adr16_ipm, + &m68000_mcu_device::move_b_aips_adr16_ipm, + &m68000_mcu_device::move_b_pais_adr16_ipm, + &m68000_mcu_device::move_b_das_adr16_ipm, + &m68000_mcu_device::move_b_dais_adr16_ipm, + &m68000_mcu_device::move_b_adr16_adr16_ipm, + &m68000_mcu_device::move_b_adr32_adr16_ipm, + &m68000_mcu_device::move_b_dpc_adr16_ipm, + &m68000_mcu_device::move_b_dpci_adr16_ipm, + &m68000_mcu_device::move_b_imm8_adr16_ipm, + &m68000_mcu_device::move_b_ds_adr32_ipm, + &m68000_mcu_device::move_b_ais_adr32_ipm, + &m68000_mcu_device::move_b_aips_adr32_ipm, + &m68000_mcu_device::move_b_pais_adr32_ipm, + &m68000_mcu_device::move_b_das_adr32_ipm, + &m68000_mcu_device::move_b_dais_adr32_ipm, + &m68000_mcu_device::move_b_adr16_adr32_ipm, + &m68000_mcu_device::move_b_adr32_adr32_ipm, + &m68000_mcu_device::move_b_dpc_adr32_ipm, + &m68000_mcu_device::move_b_dpci_adr32_ipm, + &m68000_mcu_device::move_b_imm8_adr32_ipm, + &m68000_mcu_device::move_l_ds_dd_ipm, + &m68000_mcu_device::move_l_as_dd_ipm, + &m68000_mcu_device::move_l_ais_dd_ipm, + &m68000_mcu_device::move_l_aips_dd_ipm, + &m68000_mcu_device::move_l_pais_dd_ipm, + &m68000_mcu_device::move_l_das_dd_ipm, + &m68000_mcu_device::move_l_dais_dd_ipm, + &m68000_mcu_device::move_l_adr16_dd_ipm, + &m68000_mcu_device::move_l_adr32_dd_ipm, + &m68000_mcu_device::move_l_dpc_dd_ipm, + &m68000_mcu_device::move_l_dpci_dd_ipm, + &m68000_mcu_device::move_l_imm32_dd_ipm, + &m68000_mcu_device::movea_l_ds_ad_ipm, + &m68000_mcu_device::movea_l_as_ad_ipm, + &m68000_mcu_device::movea_l_ais_ad_ipm, + &m68000_mcu_device::movea_l_aips_ad_ipm, + &m68000_mcu_device::movea_l_pais_ad_ipm, + &m68000_mcu_device::movea_l_das_ad_ipm, + &m68000_mcu_device::movea_l_dais_ad_ipm, + &m68000_mcu_device::movea_l_adr16_ad_ipm, + &m68000_mcu_device::movea_l_adr32_ad_ipm, + &m68000_mcu_device::movea_l_dpc_ad_ipm, + &m68000_mcu_device::movea_l_dpci_ad_ipm, + &m68000_mcu_device::movea_l_imm32_ad_ipm, + &m68000_mcu_device::move_l_ds_aid_ipm, + &m68000_mcu_device::move_l_as_aid_ipm, + &m68000_mcu_device::move_l_ais_aid_ipm, + &m68000_mcu_device::move_l_aips_aid_ipm, + &m68000_mcu_device::move_l_pais_aid_ipm, + &m68000_mcu_device::move_l_das_aid_ipm, + &m68000_mcu_device::move_l_dais_aid_ipm, + &m68000_mcu_device::move_l_adr16_aid_ipm, + &m68000_mcu_device::move_l_adr32_aid_ipm, + &m68000_mcu_device::move_l_dpc_aid_ipm, + &m68000_mcu_device::move_l_dpci_aid_ipm, + &m68000_mcu_device::move_l_imm32_aid_ipm, + &m68000_mcu_device::move_l_ds_aipd_ipm, + &m68000_mcu_device::move_l_as_aipd_ipm, + &m68000_mcu_device::move_l_ais_aipd_ipm, + &m68000_mcu_device::move_l_aips_aipd_ipm, + &m68000_mcu_device::move_l_pais_aipd_ipm, + &m68000_mcu_device::move_l_das_aipd_ipm, + &m68000_mcu_device::move_l_dais_aipd_ipm, + &m68000_mcu_device::move_l_adr16_aipd_ipm, + &m68000_mcu_device::move_l_adr32_aipd_ipm, + &m68000_mcu_device::move_l_dpc_aipd_ipm, + &m68000_mcu_device::move_l_dpci_aipd_ipm, + &m68000_mcu_device::move_l_imm32_aipd_ipm, + &m68000_mcu_device::move_l_ds_paid_ipm, + &m68000_mcu_device::move_l_as_paid_ipm, + &m68000_mcu_device::move_l_ais_paid_ipm, + &m68000_mcu_device::move_l_aips_paid_ipm, + &m68000_mcu_device::move_l_pais_paid_ipm, + &m68000_mcu_device::move_l_das_paid_ipm, + &m68000_mcu_device::move_l_dais_paid_ipm, + &m68000_mcu_device::move_l_adr16_paid_ipm, + &m68000_mcu_device::move_l_adr32_paid_ipm, + &m68000_mcu_device::move_l_dpc_paid_ipm, + &m68000_mcu_device::move_l_dpci_paid_ipm, + &m68000_mcu_device::move_l_imm32_paid_ipm, + &m68000_mcu_device::move_l_ds_dad_ipm, + &m68000_mcu_device::move_l_as_dad_ipm, + &m68000_mcu_device::move_l_ais_dad_ipm, + &m68000_mcu_device::move_l_aips_dad_ipm, + &m68000_mcu_device::move_l_pais_dad_ipm, + &m68000_mcu_device::move_l_das_dad_ipm, + &m68000_mcu_device::move_l_dais_dad_ipm, + &m68000_mcu_device::move_l_adr16_dad_ipm, + &m68000_mcu_device::move_l_adr32_dad_ipm, + &m68000_mcu_device::move_l_dpc_dad_ipm, + &m68000_mcu_device::move_l_dpci_dad_ipm, + &m68000_mcu_device::move_l_imm32_dad_ipm, + &m68000_mcu_device::move_l_ds_daid_ipm, + &m68000_mcu_device::move_l_as_daid_ipm, + &m68000_mcu_device::move_l_ais_daid_ipm, + &m68000_mcu_device::move_l_aips_daid_ipm, + &m68000_mcu_device::move_l_pais_daid_ipm, + &m68000_mcu_device::move_l_das_daid_ipm, + &m68000_mcu_device::move_l_dais_daid_ipm, + &m68000_mcu_device::move_l_adr16_daid_ipm, + &m68000_mcu_device::move_l_adr32_daid_ipm, + &m68000_mcu_device::move_l_dpc_daid_ipm, + &m68000_mcu_device::move_l_dpci_daid_ipm, + &m68000_mcu_device::move_l_imm32_daid_ipm, + &m68000_mcu_device::move_l_ds_adr16_ipm, + &m68000_mcu_device::move_l_as_adr16_ipm, + &m68000_mcu_device::move_l_ais_adr16_ipm, + &m68000_mcu_device::move_l_aips_adr16_ipm, + &m68000_mcu_device::move_l_pais_adr16_ipm, + &m68000_mcu_device::move_l_das_adr16_ipm, + &m68000_mcu_device::move_l_dais_adr16_ipm, + &m68000_mcu_device::move_l_adr16_adr16_ipm, + &m68000_mcu_device::move_l_adr32_adr16_ipm, + &m68000_mcu_device::move_l_dpc_adr16_ipm, + &m68000_mcu_device::move_l_dpci_adr16_ipm, + &m68000_mcu_device::move_l_imm32_adr16_ipm, + &m68000_mcu_device::move_l_ds_adr32_ipm, + &m68000_mcu_device::move_l_as_adr32_ipm, + &m68000_mcu_device::move_l_ais_adr32_ipm, + &m68000_mcu_device::move_l_aips_adr32_ipm, + &m68000_mcu_device::move_l_pais_adr32_ipm, + &m68000_mcu_device::move_l_das_adr32_ipm, + &m68000_mcu_device::move_l_dais_adr32_ipm, + &m68000_mcu_device::move_l_adr16_adr32_ipm, + &m68000_mcu_device::move_l_adr32_adr32_ipm, + &m68000_mcu_device::move_l_dpc_adr32_ipm, + &m68000_mcu_device::move_l_dpci_adr32_ipm, + &m68000_mcu_device::move_l_imm32_adr32_ipm, + &m68000_mcu_device::move_w_ds_dd_ipm, + &m68000_mcu_device::move_w_as_dd_ipm, + &m68000_mcu_device::move_w_ais_dd_ipm, + &m68000_mcu_device::move_w_aips_dd_ipm, + &m68000_mcu_device::move_w_pais_dd_ipm, + &m68000_mcu_device::move_w_das_dd_ipm, + &m68000_mcu_device::move_w_dais_dd_ipm, + &m68000_mcu_device::move_w_adr16_dd_ipm, + &m68000_mcu_device::move_w_adr32_dd_ipm, + &m68000_mcu_device::move_w_dpc_dd_ipm, + &m68000_mcu_device::move_w_dpci_dd_ipm, + &m68000_mcu_device::move_w_imm16_dd_ipm, + &m68000_mcu_device::movea_w_ds_ad_ipm, + &m68000_mcu_device::movea_w_as_ad_ipm, + &m68000_mcu_device::movea_w_ais_ad_ipm, + &m68000_mcu_device::movea_w_aips_ad_ipm, + &m68000_mcu_device::movea_w_pais_ad_ipm, + &m68000_mcu_device::movea_w_das_ad_ipm, + &m68000_mcu_device::movea_w_dais_ad_ipm, + &m68000_mcu_device::movea_w_adr16_ad_ipm, + &m68000_mcu_device::movea_w_adr32_ad_ipm, + &m68000_mcu_device::movea_w_dpc_ad_ipm, + &m68000_mcu_device::movea_w_dpci_ad_ipm, + &m68000_mcu_device::movea_w_imm16_ad_ipm, + &m68000_mcu_device::move_w_ds_aid_ipm, + &m68000_mcu_device::move_w_as_aid_ipm, + &m68000_mcu_device::move_w_ais_aid_ipm, + &m68000_mcu_device::move_w_aips_aid_ipm, + &m68000_mcu_device::move_w_pais_aid_ipm, + &m68000_mcu_device::move_w_das_aid_ipm, + &m68000_mcu_device::move_w_dais_aid_ipm, + &m68000_mcu_device::move_w_adr16_aid_ipm, + &m68000_mcu_device::move_w_adr32_aid_ipm, + &m68000_mcu_device::move_w_dpc_aid_ipm, + &m68000_mcu_device::move_w_dpci_aid_ipm, + &m68000_mcu_device::move_w_imm16_aid_ipm, + &m68000_mcu_device::move_w_ds_aipd_ipm, + &m68000_mcu_device::move_w_as_aipd_ipm, + &m68000_mcu_device::move_w_ais_aipd_ipm, + &m68000_mcu_device::move_w_aips_aipd_ipm, + &m68000_mcu_device::move_w_pais_aipd_ipm, + &m68000_mcu_device::move_w_das_aipd_ipm, + &m68000_mcu_device::move_w_dais_aipd_ipm, + &m68000_mcu_device::move_w_adr16_aipd_ipm, + &m68000_mcu_device::move_w_adr32_aipd_ipm, + &m68000_mcu_device::move_w_dpc_aipd_ipm, + &m68000_mcu_device::move_w_dpci_aipd_ipm, + &m68000_mcu_device::move_w_imm16_aipd_ipm, + &m68000_mcu_device::move_w_ds_paid_ipm, + &m68000_mcu_device::move_w_as_paid_ipm, + &m68000_mcu_device::move_w_ais_paid_ipm, + &m68000_mcu_device::move_w_aips_paid_ipm, + &m68000_mcu_device::move_w_pais_paid_ipm, + &m68000_mcu_device::move_w_das_paid_ipm, + &m68000_mcu_device::move_w_dais_paid_ipm, + &m68000_mcu_device::move_w_adr16_paid_ipm, + &m68000_mcu_device::move_w_adr32_paid_ipm, + &m68000_mcu_device::move_w_dpc_paid_ipm, + &m68000_mcu_device::move_w_dpci_paid_ipm, + &m68000_mcu_device::move_w_imm16_paid_ipm, + &m68000_mcu_device::move_w_ds_dad_ipm, + &m68000_mcu_device::move_w_as_dad_ipm, + &m68000_mcu_device::move_w_ais_dad_ipm, + &m68000_mcu_device::move_w_aips_dad_ipm, + &m68000_mcu_device::move_w_pais_dad_ipm, + &m68000_mcu_device::move_w_das_dad_ipm, + &m68000_mcu_device::move_w_dais_dad_ipm, + &m68000_mcu_device::move_w_adr16_dad_ipm, + &m68000_mcu_device::move_w_adr32_dad_ipm, + &m68000_mcu_device::move_w_dpc_dad_ipm, + &m68000_mcu_device::move_w_dpci_dad_ipm, + &m68000_mcu_device::move_w_imm16_dad_ipm, + &m68000_mcu_device::move_w_ds_daid_ipm, + &m68000_mcu_device::move_w_as_daid_ipm, + &m68000_mcu_device::move_w_ais_daid_ipm, + &m68000_mcu_device::move_w_aips_daid_ipm, + &m68000_mcu_device::move_w_pais_daid_ipm, + &m68000_mcu_device::move_w_das_daid_ipm, + &m68000_mcu_device::move_w_dais_daid_ipm, + &m68000_mcu_device::move_w_adr16_daid_ipm, + &m68000_mcu_device::move_w_adr32_daid_ipm, + &m68000_mcu_device::move_w_dpc_daid_ipm, + &m68000_mcu_device::move_w_dpci_daid_ipm, + &m68000_mcu_device::move_w_imm16_daid_ipm, + &m68000_mcu_device::move_w_ds_adr16_ipm, + &m68000_mcu_device::move_w_as_adr16_ipm, + &m68000_mcu_device::move_w_ais_adr16_ipm, + &m68000_mcu_device::move_w_aips_adr16_ipm, + &m68000_mcu_device::move_w_pais_adr16_ipm, + &m68000_mcu_device::move_w_das_adr16_ipm, + &m68000_mcu_device::move_w_dais_adr16_ipm, + &m68000_mcu_device::move_w_adr16_adr16_ipm, + &m68000_mcu_device::move_w_adr32_adr16_ipm, + &m68000_mcu_device::move_w_dpc_adr16_ipm, + &m68000_mcu_device::move_w_dpci_adr16_ipm, + &m68000_mcu_device::move_w_imm16_adr16_ipm, + &m68000_mcu_device::move_w_ds_adr32_ipm, + &m68000_mcu_device::move_w_as_adr32_ipm, + &m68000_mcu_device::move_w_ais_adr32_ipm, + &m68000_mcu_device::move_w_aips_adr32_ipm, + &m68000_mcu_device::move_w_pais_adr32_ipm, + &m68000_mcu_device::move_w_das_adr32_ipm, + &m68000_mcu_device::move_w_dais_adr32_ipm, + &m68000_mcu_device::move_w_adr16_adr32_ipm, + &m68000_mcu_device::move_w_adr32_adr32_ipm, + &m68000_mcu_device::move_w_dpc_adr32_ipm, + &m68000_mcu_device::move_w_dpci_adr32_ipm, + &m68000_mcu_device::move_w_imm16_adr32_ipm, + &m68000_mcu_device::negx_b_ds_ipm, + &m68000_mcu_device::negx_b_ais_ipm, + &m68000_mcu_device::negx_b_aips_ipm, + &m68000_mcu_device::negx_b_pais_ipm, + &m68000_mcu_device::negx_b_das_ipm, + &m68000_mcu_device::negx_b_dais_ipm, + &m68000_mcu_device::negx_b_adr16_ipm, + &m68000_mcu_device::negx_b_adr32_ipm, + &m68000_mcu_device::negx_w_ds_ipm, + &m68000_mcu_device::negx_w_ais_ipm, + &m68000_mcu_device::negx_w_aips_ipm, + &m68000_mcu_device::negx_w_pais_ipm, + &m68000_mcu_device::negx_w_das_ipm, + &m68000_mcu_device::negx_w_dais_ipm, + &m68000_mcu_device::negx_w_adr16_ipm, + &m68000_mcu_device::negx_w_adr32_ipm, + &m68000_mcu_device::negx_l_ds_ipm, + &m68000_mcu_device::negx_l_ais_ipm, + &m68000_mcu_device::negx_l_aips_ipm, + &m68000_mcu_device::negx_l_pais_ipm, + &m68000_mcu_device::negx_l_das_ipm, + &m68000_mcu_device::negx_l_dais_ipm, + &m68000_mcu_device::negx_l_adr16_ipm, + &m68000_mcu_device::negx_l_adr32_ipm, + &m68000_mcu_device::move_sr_ds_ipm, + &m68000_mcu_device::move_sr_ais_ipm, + &m68000_mcu_device::move_sr_aips_ipm, + &m68000_mcu_device::move_sr_pais_ipm, + &m68000_mcu_device::move_sr_das_ipm, + &m68000_mcu_device::move_sr_dais_ipm, + &m68000_mcu_device::move_sr_adr16_ipm, + &m68000_mcu_device::move_sr_adr32_ipm, + &m68000_mcu_device::chk_w_ds_dd_ipm, + &m68000_mcu_device::chk_w_ais_dd_ipm, + &m68000_mcu_device::chk_w_aips_dd_ipm, + &m68000_mcu_device::chk_w_pais_dd_ipm, + &m68000_mcu_device::chk_w_das_dd_ipm, + &m68000_mcu_device::chk_w_dais_dd_ipm, + &m68000_mcu_device::chk_w_adr16_dd_ipm, + &m68000_mcu_device::chk_w_adr32_dd_ipm, + &m68000_mcu_device::chk_w_dpc_dd_ipm, + &m68000_mcu_device::chk_w_dpci_dd_ipm, + &m68000_mcu_device::chk_w_imm16_dd_ipm, + &m68000_mcu_device::lea_ais_ad_ipm, + &m68000_mcu_device::lea_das_ad_ipm, + &m68000_mcu_device::lea_dais_ad_ipm, + &m68000_mcu_device::lea_adr16_ad_ipm, + &m68000_mcu_device::lea_adr32_ad_ipm, + &m68000_mcu_device::lea_dpc_ad_ipm, + &m68000_mcu_device::lea_dpci_ad_ipm, + &m68000_mcu_device::clr_b_ds_ipm, + &m68000_mcu_device::clr_b_ais_ipm, + &m68000_mcu_device::clr_b_aips_ipm, + &m68000_mcu_device::clr_b_pais_ipm, + &m68000_mcu_device::clr_b_das_ipm, + &m68000_mcu_device::clr_b_dais_ipm, + &m68000_mcu_device::clr_b_adr16_ipm, + &m68000_mcu_device::clr_b_adr32_ipm, + &m68000_mcu_device::clr_w_ds_ipm, + &m68000_mcu_device::clr_w_ais_ipm, + &m68000_mcu_device::clr_w_aips_ipm, + &m68000_mcu_device::clr_w_pais_ipm, + &m68000_mcu_device::clr_w_das_ipm, + &m68000_mcu_device::clr_w_dais_ipm, + &m68000_mcu_device::clr_w_adr16_ipm, + &m68000_mcu_device::clr_w_adr32_ipm, + &m68000_mcu_device::clr_l_ds_ipm, + &m68000_mcu_device::clr_l_ais_ipm, + &m68000_mcu_device::clr_l_aips_ipm, + &m68000_mcu_device::clr_l_pais_ipm, + &m68000_mcu_device::clr_l_das_ipm, + &m68000_mcu_device::clr_l_dais_ipm, + &m68000_mcu_device::clr_l_adr16_ipm, + &m68000_mcu_device::clr_l_adr32_ipm, + &m68000_mcu_device::neg_b_ds_ipm, + &m68000_mcu_device::neg_b_ais_ipm, + &m68000_mcu_device::neg_b_aips_ipm, + &m68000_mcu_device::neg_b_pais_ipm, + &m68000_mcu_device::neg_b_das_ipm, + &m68000_mcu_device::neg_b_dais_ipm, + &m68000_mcu_device::neg_b_adr16_ipm, + &m68000_mcu_device::neg_b_adr32_ipm, + &m68000_mcu_device::neg_w_ds_ipm, + &m68000_mcu_device::neg_w_ais_ipm, + &m68000_mcu_device::neg_w_aips_ipm, + &m68000_mcu_device::neg_w_pais_ipm, + &m68000_mcu_device::neg_w_das_ipm, + &m68000_mcu_device::neg_w_dais_ipm, + &m68000_mcu_device::neg_w_adr16_ipm, + &m68000_mcu_device::neg_w_adr32_ipm, + &m68000_mcu_device::neg_l_ds_ipm, + &m68000_mcu_device::neg_l_ais_ipm, + &m68000_mcu_device::neg_l_aips_ipm, + &m68000_mcu_device::neg_l_pais_ipm, + &m68000_mcu_device::neg_l_das_ipm, + &m68000_mcu_device::neg_l_dais_ipm, + &m68000_mcu_device::neg_l_adr16_ipm, + &m68000_mcu_device::neg_l_adr32_ipm, + &m68000_mcu_device::move_ds_ccr_ipm, + &m68000_mcu_device::move_ais_ccr_ipm, + &m68000_mcu_device::move_aips_ccr_ipm, + &m68000_mcu_device::move_pais_ccr_ipm, + &m68000_mcu_device::move_das_ccr_ipm, + &m68000_mcu_device::move_dais_ccr_ipm, + &m68000_mcu_device::move_adr16_ccr_ipm, + &m68000_mcu_device::move_adr32_ccr_ipm, + &m68000_mcu_device::move_dpc_ccr_ipm, + &m68000_mcu_device::move_dpci_ccr_ipm, + &m68000_mcu_device::move_imm8_ccr_ipm, + &m68000_mcu_device::not_b_ds_ipm, + &m68000_mcu_device::not_b_ais_ipm, + &m68000_mcu_device::not_b_aips_ipm, + &m68000_mcu_device::not_b_pais_ipm, + &m68000_mcu_device::not_b_das_ipm, + &m68000_mcu_device::not_b_dais_ipm, + &m68000_mcu_device::not_b_adr16_ipm, + &m68000_mcu_device::not_b_adr32_ipm, + &m68000_mcu_device::not_w_ds_ipm, + &m68000_mcu_device::not_w_ais_ipm, + &m68000_mcu_device::not_w_aips_ipm, + &m68000_mcu_device::not_w_pais_ipm, + &m68000_mcu_device::not_w_das_ipm, + &m68000_mcu_device::not_w_dais_ipm, + &m68000_mcu_device::not_w_adr16_ipm, + &m68000_mcu_device::not_w_adr32_ipm, + &m68000_mcu_device::not_l_ds_ipm, + &m68000_mcu_device::not_l_ais_ipm, + &m68000_mcu_device::not_l_aips_ipm, + &m68000_mcu_device::not_l_pais_ipm, + &m68000_mcu_device::not_l_das_ipm, + &m68000_mcu_device::not_l_dais_ipm, + &m68000_mcu_device::not_l_adr16_ipm, + &m68000_mcu_device::not_l_adr32_ipm, + &m68000_mcu_device::move_ds_sr_ipm, + &m68000_mcu_device::move_ais_sr_ipm, + &m68000_mcu_device::move_aips_sr_ipm, + &m68000_mcu_device::move_pais_sr_ipm, + &m68000_mcu_device::move_das_sr_ipm, + &m68000_mcu_device::move_dais_sr_ipm, + &m68000_mcu_device::move_adr16_sr_ipm, + &m68000_mcu_device::move_adr32_sr_ipm, + &m68000_mcu_device::move_dpc_sr_ipm, + &m68000_mcu_device::move_dpci_sr_ipm, + &m68000_mcu_device::move_i16u_sr_ipm, + &m68000_mcu_device::nbcd_b_ds_ipm, + &m68000_mcu_device::nbcd_b_ais_ipm, + &m68000_mcu_device::nbcd_b_aips_ipm, + &m68000_mcu_device::nbcd_b_pais_ipm, + &m68000_mcu_device::nbcd_b_das_ipm, + &m68000_mcu_device::nbcd_b_dais_ipm, + &m68000_mcu_device::nbcd_b_adr16_ipm, + &m68000_mcu_device::nbcd_b_adr32_ipm, + &m68000_mcu_device::swap_ds_ipm, + &m68000_mcu_device::pea_ais_ipm, + &m68000_mcu_device::pea_das_ipm, + &m68000_mcu_device::pea_dais_ipm, + &m68000_mcu_device::pea_adr16_ipm, + &m68000_mcu_device::pea_adr32_ipm, + &m68000_mcu_device::pea_dpc_ipm, + &m68000_mcu_device::pea_dpci_ipm, + &m68000_mcu_device::ext_w_ds_ipm, + &m68000_mcu_device::movem_w_list_ais_ipm, + &m68000_mcu_device::movem_w_listp_pais_ipm, + &m68000_mcu_device::movem_w_list_das_ipm, + &m68000_mcu_device::movem_w_list_dais_ipm, + &m68000_mcu_device::movem_w_list_adr16_ipm, + &m68000_mcu_device::movem_w_list_adr32_ipm, + &m68000_mcu_device::ext_l_ds_ipm, + &m68000_mcu_device::movem_l_list_ais_ipm, + &m68000_mcu_device::movem_l_listp_pais_ipm, + &m68000_mcu_device::movem_l_list_das_ipm, + &m68000_mcu_device::movem_l_list_dais_ipm, + &m68000_mcu_device::movem_l_list_adr16_ipm, + &m68000_mcu_device::movem_l_list_adr32_ipm, + &m68000_mcu_device::tst_b_ds_ipm, + &m68000_mcu_device::tst_b_ais_ipm, + &m68000_mcu_device::tst_b_aips_ipm, + &m68000_mcu_device::tst_b_pais_ipm, + &m68000_mcu_device::tst_b_das_ipm, + &m68000_mcu_device::tst_b_dais_ipm, + &m68000_mcu_device::tst_b_adr16_ipm, + &m68000_mcu_device::tst_b_adr32_ipm, + &m68000_mcu_device::tst_w_ds_ipm, + &m68000_mcu_device::tst_w_ais_ipm, + &m68000_mcu_device::tst_w_aips_ipm, + &m68000_mcu_device::tst_w_pais_ipm, + &m68000_mcu_device::tst_w_das_ipm, + &m68000_mcu_device::tst_w_dais_ipm, + &m68000_mcu_device::tst_w_adr16_ipm, + &m68000_mcu_device::tst_w_adr32_ipm, + &m68000_mcu_device::tst_l_ds_ipm, + &m68000_mcu_device::tst_l_ais_ipm, + &m68000_mcu_device::tst_l_aips_ipm, + &m68000_mcu_device::tst_l_pais_ipm, + &m68000_mcu_device::tst_l_das_ipm, + &m68000_mcu_device::tst_l_dais_ipm, + &m68000_mcu_device::tst_l_adr16_ipm, + &m68000_mcu_device::tst_l_adr32_ipm, + &m68000_mcu_device::tas_ds_ipm, + &m68000_mcu_device::tas_ais_ipm, + &m68000_mcu_device::tas_aips_ipm, + &m68000_mcu_device::tas_pais_ipm, + &m68000_mcu_device::tas_das_ipm, + &m68000_mcu_device::tas_dais_ipm, + &m68000_mcu_device::tas_adr16_ipm, + &m68000_mcu_device::tas_adr32_ipm, + &m68000_mcu_device::movem_w_ais_list_ipm, + &m68000_mcu_device::movem_w_aips_list_ipm, + &m68000_mcu_device::movem_w_das_list_ipm, + &m68000_mcu_device::movem_w_dais_list_ipm, + &m68000_mcu_device::movem_w_adr16_list_ipm, + &m68000_mcu_device::movem_w_adr32_list_ipm, + &m68000_mcu_device::movem_w_dpc_list_ipm, + &m68000_mcu_device::movem_w_dpci_list_ipm, + &m68000_mcu_device::movem_l_ais_list_ipm, + &m68000_mcu_device::movem_l_aips_list_ipm, + &m68000_mcu_device::movem_l_das_list_ipm, + &m68000_mcu_device::movem_l_dais_list_ipm, + &m68000_mcu_device::movem_l_adr16_list_ipm, + &m68000_mcu_device::movem_l_adr32_list_ipm, + &m68000_mcu_device::movem_l_dpc_list_ipm, + &m68000_mcu_device::movem_l_dpci_list_ipm, + &m68000_mcu_device::trap_imm4_ipm, + &m68000_mcu_device::link_as_imm16_ipm, + &m68000_mcu_device::unlk_as_ipm, + &m68000_mcu_device::move_as_usp_ipm, + &m68000_mcu_device::move_usp_as_ipm, + &m68000_mcu_device::reset_ipm, + &m68000_mcu_device::nop_ipm, + &m68000_mcu_device::stop_i16u_ipm, + &m68000_mcu_device::rte_ipm, + &m68000_mcu_device::rts_ipm, + &m68000_mcu_device::trapv_ipm, + &m68000_mcu_device::rtr_ipm, + &m68000_mcu_device::jsr_ais_ipm, + &m68000_mcu_device::jsr_das_ipm, + &m68000_mcu_device::jsr_dais_ipm, + &m68000_mcu_device::jsr_adr16_ipm, + &m68000_mcu_device::jsr_adr32_ipm, + &m68000_mcu_device::jsr_dpc_ipm, + &m68000_mcu_device::jsr_dpci_ipm, + &m68000_mcu_device::jmp_ais_ipm, + &m68000_mcu_device::jmp_das_ipm, + &m68000_mcu_device::jmp_dais_ipm, + &m68000_mcu_device::jmp_adr16_ipm, + &m68000_mcu_device::jmp_adr32_ipm, + &m68000_mcu_device::jmp_dpc_ipm, + &m68000_mcu_device::jmp_dpci_ipm, + &m68000_mcu_device::addq_b_imm3_ds_ipm, + &m68000_mcu_device::addq_b_imm3_ais_ipm, + &m68000_mcu_device::addq_b_imm3_aips_ipm, + &m68000_mcu_device::addq_b_imm3_pais_ipm, + &m68000_mcu_device::addq_b_imm3_das_ipm, + &m68000_mcu_device::addq_b_imm3_dais_ipm, + &m68000_mcu_device::addq_b_imm3_adr16_ipm, + &m68000_mcu_device::addq_b_imm3_adr32_ipm, + &m68000_mcu_device::addq_w_imm3_ds_ipm, + &m68000_mcu_device::addq_w_imm3_as_ipm, + &m68000_mcu_device::addq_w_imm3_ais_ipm, + &m68000_mcu_device::addq_w_imm3_aips_ipm, + &m68000_mcu_device::addq_w_imm3_pais_ipm, + &m68000_mcu_device::addq_w_imm3_das_ipm, + &m68000_mcu_device::addq_w_imm3_dais_ipm, + &m68000_mcu_device::addq_w_imm3_adr16_ipm, + &m68000_mcu_device::addq_w_imm3_adr32_ipm, + &m68000_mcu_device::addq_l_imm3_ds_ipm, + &m68000_mcu_device::addq_l_imm3_as_ipm, + &m68000_mcu_device::addq_l_imm3_ais_ipm, + &m68000_mcu_device::addq_l_imm3_aips_ipm, + &m68000_mcu_device::addq_l_imm3_pais_ipm, + &m68000_mcu_device::addq_l_imm3_das_ipm, + &m68000_mcu_device::addq_l_imm3_dais_ipm, + &m68000_mcu_device::addq_l_imm3_adr16_ipm, + &m68000_mcu_device::addq_l_imm3_adr32_ipm, + &m68000_mcu_device::st_ds_ipm, + &m68000_mcu_device::dbt_ds_rel16_ipm, + &m68000_mcu_device::st_ais_ipm, + &m68000_mcu_device::st_aips_ipm, + &m68000_mcu_device::st_pais_ipm, + &m68000_mcu_device::st_das_ipm, + &m68000_mcu_device::st_dais_ipm, + &m68000_mcu_device::st_adr16_ipm, + &m68000_mcu_device::st_adr32_ipm, + &m68000_mcu_device::subq_b_imm3_ds_ipm, + &m68000_mcu_device::subq_b_imm3_ais_ipm, + &m68000_mcu_device::subq_b_imm3_aips_ipm, + &m68000_mcu_device::subq_b_imm3_pais_ipm, + &m68000_mcu_device::subq_b_imm3_das_ipm, + &m68000_mcu_device::subq_b_imm3_dais_ipm, + &m68000_mcu_device::subq_b_imm3_adr16_ipm, + &m68000_mcu_device::subq_b_imm3_adr32_ipm, + &m68000_mcu_device::subq_w_imm3_ds_ipm, + &m68000_mcu_device::subq_w_imm3_as_ipm, + &m68000_mcu_device::subq_w_imm3_ais_ipm, + &m68000_mcu_device::subq_w_imm3_aips_ipm, + &m68000_mcu_device::subq_w_imm3_pais_ipm, + &m68000_mcu_device::subq_w_imm3_das_ipm, + &m68000_mcu_device::subq_w_imm3_dais_ipm, + &m68000_mcu_device::subq_w_imm3_adr16_ipm, + &m68000_mcu_device::subq_w_imm3_adr32_ipm, + &m68000_mcu_device::subq_l_imm3_ds_ipm, + &m68000_mcu_device::subq_l_imm3_as_ipm, + &m68000_mcu_device::subq_l_imm3_ais_ipm, + &m68000_mcu_device::subq_l_imm3_aips_ipm, + &m68000_mcu_device::subq_l_imm3_pais_ipm, + &m68000_mcu_device::subq_l_imm3_das_ipm, + &m68000_mcu_device::subq_l_imm3_dais_ipm, + &m68000_mcu_device::subq_l_imm3_adr16_ipm, + &m68000_mcu_device::subq_l_imm3_adr32_ipm, + &m68000_mcu_device::sf_ds_ipm, + &m68000_mcu_device::dbra_ds_rel16_ipm, + &m68000_mcu_device::sf_ais_ipm, + &m68000_mcu_device::sf_aips_ipm, + &m68000_mcu_device::sf_pais_ipm, + &m68000_mcu_device::sf_das_ipm, + &m68000_mcu_device::sf_dais_ipm, + &m68000_mcu_device::sf_adr16_ipm, + &m68000_mcu_device::sf_adr32_ipm, + &m68000_mcu_device::shi_ds_ipm, + &m68000_mcu_device::dbhi_ds_rel16_ipm, + &m68000_mcu_device::shi_ais_ipm, + &m68000_mcu_device::shi_aips_ipm, + &m68000_mcu_device::shi_pais_ipm, + &m68000_mcu_device::shi_das_ipm, + &m68000_mcu_device::shi_dais_ipm, + &m68000_mcu_device::shi_adr16_ipm, + &m68000_mcu_device::shi_adr32_ipm, + &m68000_mcu_device::sls_ds_ipm, + &m68000_mcu_device::dbls_ds_rel16_ipm, + &m68000_mcu_device::sls_ais_ipm, + &m68000_mcu_device::sls_aips_ipm, + &m68000_mcu_device::sls_pais_ipm, + &m68000_mcu_device::sls_das_ipm, + &m68000_mcu_device::sls_dais_ipm, + &m68000_mcu_device::sls_adr16_ipm, + &m68000_mcu_device::sls_adr32_ipm, + &m68000_mcu_device::scc_ds_ipm, + &m68000_mcu_device::dbcc_ds_rel16_ipm, + &m68000_mcu_device::scc_ais_ipm, + &m68000_mcu_device::scc_aips_ipm, + &m68000_mcu_device::scc_pais_ipm, + &m68000_mcu_device::scc_das_ipm, + &m68000_mcu_device::scc_dais_ipm, + &m68000_mcu_device::scc_adr16_ipm, + &m68000_mcu_device::scc_adr32_ipm, + &m68000_mcu_device::scs_ds_ipm, + &m68000_mcu_device::dbcs_ds_rel16_ipm, + &m68000_mcu_device::scs_ais_ipm, + &m68000_mcu_device::scs_aips_ipm, + &m68000_mcu_device::scs_pais_ipm, + &m68000_mcu_device::scs_das_ipm, + &m68000_mcu_device::scs_dais_ipm, + &m68000_mcu_device::scs_adr16_ipm, + &m68000_mcu_device::scs_adr32_ipm, + &m68000_mcu_device::sne_ds_ipm, + &m68000_mcu_device::dbne_ds_rel16_ipm, + &m68000_mcu_device::sne_ais_ipm, + &m68000_mcu_device::sne_aips_ipm, + &m68000_mcu_device::sne_pais_ipm, + &m68000_mcu_device::sne_das_ipm, + &m68000_mcu_device::sne_dais_ipm, + &m68000_mcu_device::sne_adr16_ipm, + &m68000_mcu_device::sne_adr32_ipm, + &m68000_mcu_device::seq_ds_ipm, + &m68000_mcu_device::dbeq_ds_rel16_ipm, + &m68000_mcu_device::seq_ais_ipm, + &m68000_mcu_device::seq_aips_ipm, + &m68000_mcu_device::seq_pais_ipm, + &m68000_mcu_device::seq_das_ipm, + &m68000_mcu_device::seq_dais_ipm, + &m68000_mcu_device::seq_adr16_ipm, + &m68000_mcu_device::seq_adr32_ipm, + &m68000_mcu_device::svc_ds_ipm, + &m68000_mcu_device::dbvc_ds_rel16_ipm, + &m68000_mcu_device::svc_ais_ipm, + &m68000_mcu_device::svc_aips_ipm, + &m68000_mcu_device::svc_pais_ipm, + &m68000_mcu_device::svc_das_ipm, + &m68000_mcu_device::svc_dais_ipm, + &m68000_mcu_device::svc_adr16_ipm, + &m68000_mcu_device::svc_adr32_ipm, + &m68000_mcu_device::svs_ds_ipm, + &m68000_mcu_device::dbvs_ds_rel16_ipm, + &m68000_mcu_device::svs_ais_ipm, + &m68000_mcu_device::svs_aips_ipm, + &m68000_mcu_device::svs_pais_ipm, + &m68000_mcu_device::svs_das_ipm, + &m68000_mcu_device::svs_dais_ipm, + &m68000_mcu_device::svs_adr16_ipm, + &m68000_mcu_device::svs_adr32_ipm, + &m68000_mcu_device::spl_ds_ipm, + &m68000_mcu_device::dbpl_ds_rel16_ipm, + &m68000_mcu_device::spl_ais_ipm, + &m68000_mcu_device::spl_aips_ipm, + &m68000_mcu_device::spl_pais_ipm, + &m68000_mcu_device::spl_das_ipm, + &m68000_mcu_device::spl_dais_ipm, + &m68000_mcu_device::spl_adr16_ipm, + &m68000_mcu_device::spl_adr32_ipm, + &m68000_mcu_device::smi_ds_ipm, + &m68000_mcu_device::dbmi_ds_rel16_ipm, + &m68000_mcu_device::smi_ais_ipm, + &m68000_mcu_device::smi_aips_ipm, + &m68000_mcu_device::smi_pais_ipm, + &m68000_mcu_device::smi_das_ipm, + &m68000_mcu_device::smi_dais_ipm, + &m68000_mcu_device::smi_adr16_ipm, + &m68000_mcu_device::smi_adr32_ipm, + &m68000_mcu_device::sge_ds_ipm, + &m68000_mcu_device::dbge_ds_rel16_ipm, + &m68000_mcu_device::sge_ais_ipm, + &m68000_mcu_device::sge_aips_ipm, + &m68000_mcu_device::sge_pais_ipm, + &m68000_mcu_device::sge_das_ipm, + &m68000_mcu_device::sge_dais_ipm, + &m68000_mcu_device::sge_adr16_ipm, + &m68000_mcu_device::sge_adr32_ipm, + &m68000_mcu_device::slt_ds_ipm, + &m68000_mcu_device::dblt_ds_rel16_ipm, + &m68000_mcu_device::slt_ais_ipm, + &m68000_mcu_device::slt_aips_ipm, + &m68000_mcu_device::slt_pais_ipm, + &m68000_mcu_device::slt_das_ipm, + &m68000_mcu_device::slt_dais_ipm, + &m68000_mcu_device::slt_adr16_ipm, + &m68000_mcu_device::slt_adr32_ipm, + &m68000_mcu_device::sgt_ds_ipm, + &m68000_mcu_device::dbgt_ds_rel16_ipm, + &m68000_mcu_device::sgt_ais_ipm, + &m68000_mcu_device::sgt_aips_ipm, + &m68000_mcu_device::sgt_pais_ipm, + &m68000_mcu_device::sgt_das_ipm, + &m68000_mcu_device::sgt_dais_ipm, + &m68000_mcu_device::sgt_adr16_ipm, + &m68000_mcu_device::sgt_adr32_ipm, + &m68000_mcu_device::sle_ds_ipm, + &m68000_mcu_device::dble_ds_rel16_ipm, + &m68000_mcu_device::sle_ais_ipm, + &m68000_mcu_device::sle_aips_ipm, + &m68000_mcu_device::sle_pais_ipm, + &m68000_mcu_device::sle_das_ipm, + &m68000_mcu_device::sle_dais_ipm, + &m68000_mcu_device::sle_adr16_ipm, + &m68000_mcu_device::sle_adr32_ipm, + &m68000_mcu_device::bra_rel16_ipm, + &m68000_mcu_device::bra_rel8_ipm, + &m68000_mcu_device::bsr_rel16_ipm, + &m68000_mcu_device::bsr_rel8_ipm, + &m68000_mcu_device::bhi_rel16_ipm, + &m68000_mcu_device::bhi_rel8_ipm, + &m68000_mcu_device::bls_rel16_ipm, + &m68000_mcu_device::bls_rel8_ipm, + &m68000_mcu_device::bcc_rel16_ipm, + &m68000_mcu_device::bcc_rel8_ipm, + &m68000_mcu_device::bcs_rel16_ipm, + &m68000_mcu_device::bcs_rel8_ipm, + &m68000_mcu_device::bne_rel16_ipm, + &m68000_mcu_device::bne_rel8_ipm, + &m68000_mcu_device::beq_rel16_ipm, + &m68000_mcu_device::beq_rel8_ipm, + &m68000_mcu_device::bvc_rel16_ipm, + &m68000_mcu_device::bvc_rel8_ipm, + &m68000_mcu_device::bvs_rel16_ipm, + &m68000_mcu_device::bvs_rel8_ipm, + &m68000_mcu_device::bpl_rel16_ipm, + &m68000_mcu_device::bpl_rel8_ipm, + &m68000_mcu_device::bmi_rel16_ipm, + &m68000_mcu_device::bmi_rel8_ipm, + &m68000_mcu_device::bge_rel16_ipm, + &m68000_mcu_device::bge_rel8_ipm, + &m68000_mcu_device::blt_rel16_ipm, + &m68000_mcu_device::blt_rel8_ipm, + &m68000_mcu_device::bgt_rel16_ipm, + &m68000_mcu_device::bgt_rel8_ipm, + &m68000_mcu_device::ble_rel16_ipm, + &m68000_mcu_device::ble_rel8_ipm, + &m68000_mcu_device::moveq_imm8o_dd_ipm, + &m68000_mcu_device::or_b_ds_dd_ipm, + &m68000_mcu_device::or_b_ais_dd_ipm, + &m68000_mcu_device::or_b_aips_dd_ipm, + &m68000_mcu_device::or_b_pais_dd_ipm, + &m68000_mcu_device::or_b_das_dd_ipm, + &m68000_mcu_device::or_b_dais_dd_ipm, + &m68000_mcu_device::or_b_adr16_dd_ipm, + &m68000_mcu_device::or_b_adr32_dd_ipm, + &m68000_mcu_device::or_b_dpc_dd_ipm, + &m68000_mcu_device::or_b_dpci_dd_ipm, + &m68000_mcu_device::or_b_imm8_dd_ipm, + &m68000_mcu_device::or_w_ds_dd_ipm, + &m68000_mcu_device::or_w_ais_dd_ipm, + &m68000_mcu_device::or_w_aips_dd_ipm, + &m68000_mcu_device::or_w_pais_dd_ipm, + &m68000_mcu_device::or_w_das_dd_ipm, + &m68000_mcu_device::or_w_dais_dd_ipm, + &m68000_mcu_device::or_w_adr16_dd_ipm, + &m68000_mcu_device::or_w_adr32_dd_ipm, + &m68000_mcu_device::or_w_dpc_dd_ipm, + &m68000_mcu_device::or_w_dpci_dd_ipm, + &m68000_mcu_device::or_w_imm16_dd_ipm, + &m68000_mcu_device::or_l_ds_dd_ipm, + &m68000_mcu_device::or_l_ais_dd_ipm, + &m68000_mcu_device::or_l_aips_dd_ipm, + &m68000_mcu_device::or_l_pais_dd_ipm, + &m68000_mcu_device::or_l_das_dd_ipm, + &m68000_mcu_device::or_l_dais_dd_ipm, + &m68000_mcu_device::or_l_adr16_dd_ipm, + &m68000_mcu_device::or_l_adr32_dd_ipm, + &m68000_mcu_device::or_l_dpc_dd_ipm, + &m68000_mcu_device::or_l_dpci_dd_ipm, + &m68000_mcu_device::or_l_imm32_dd_ipm, + &m68000_mcu_device::divu_w_ds_dd_ipm, + &m68000_mcu_device::divu_w_ais_dd_ipm, + &m68000_mcu_device::divu_w_aips_dd_ipm, + &m68000_mcu_device::divu_w_pais_dd_ipm, + &m68000_mcu_device::divu_w_das_dd_ipm, + &m68000_mcu_device::divu_w_dais_dd_ipm, + &m68000_mcu_device::divu_w_adr16_dd_ipm, + &m68000_mcu_device::divu_w_adr32_dd_ipm, + &m68000_mcu_device::divu_w_dpc_dd_ipm, + &m68000_mcu_device::divu_w_dpci_dd_ipm, + &m68000_mcu_device::divu_w_imm16_dd_ipm, + &m68000_mcu_device::sbcd_ds_dd_ipm, + &m68000_mcu_device::sbcd_pais_paid_ipm, + &m68000_mcu_device::or_b_dd_ais_ipm, + &m68000_mcu_device::or_b_dd_aips_ipm, + &m68000_mcu_device::or_b_dd_pais_ipm, + &m68000_mcu_device::or_b_dd_das_ipm, + &m68000_mcu_device::or_b_dd_dais_ipm, + &m68000_mcu_device::or_b_dd_adr16_ipm, + &m68000_mcu_device::or_b_dd_adr32_ipm, + &m68000_mcu_device::or_w_dd_ais_ipm, + &m68000_mcu_device::or_w_dd_aips_ipm, + &m68000_mcu_device::or_w_dd_pais_ipm, + &m68000_mcu_device::or_w_dd_das_ipm, + &m68000_mcu_device::or_w_dd_dais_ipm, + &m68000_mcu_device::or_w_dd_adr16_ipm, + &m68000_mcu_device::or_w_dd_adr32_ipm, + &m68000_mcu_device::or_l_dd_ais_ipm, + &m68000_mcu_device::or_l_dd_aips_ipm, + &m68000_mcu_device::or_l_dd_pais_ipm, + &m68000_mcu_device::or_l_dd_das_ipm, + &m68000_mcu_device::or_l_dd_dais_ipm, + &m68000_mcu_device::or_l_dd_adr16_ipm, + &m68000_mcu_device::or_l_dd_adr32_ipm, + &m68000_mcu_device::divs_w_ds_dd_ipm, + &m68000_mcu_device::divs_w_ais_dd_ipm, + &m68000_mcu_device::divs_w_aips_dd_ipm, + &m68000_mcu_device::divs_w_pais_dd_ipm, + &m68000_mcu_device::divs_w_das_dd_ipm, + &m68000_mcu_device::divs_w_dais_dd_ipm, + &m68000_mcu_device::divs_w_adr16_dd_ipm, + &m68000_mcu_device::divs_w_adr32_dd_ipm, + &m68000_mcu_device::divs_w_dpc_dd_ipm, + &m68000_mcu_device::divs_w_dpci_dd_ipm, + &m68000_mcu_device::divs_w_imm16_dd_ipm, + &m68000_mcu_device::sub_b_ds_dd_ipm, + &m68000_mcu_device::sub_b_ais_dd_ipm, + &m68000_mcu_device::sub_b_aips_dd_ipm, + &m68000_mcu_device::sub_b_pais_dd_ipm, + &m68000_mcu_device::sub_b_das_dd_ipm, + &m68000_mcu_device::sub_b_dais_dd_ipm, + &m68000_mcu_device::sub_b_adr16_dd_ipm, + &m68000_mcu_device::sub_b_adr32_dd_ipm, + &m68000_mcu_device::sub_b_dpc_dd_ipm, + &m68000_mcu_device::sub_b_dpci_dd_ipm, + &m68000_mcu_device::sub_b_imm8_dd_ipm, + &m68000_mcu_device::sub_w_ds_dd_ipm, + &m68000_mcu_device::sub_w_as_dd_ipm, + &m68000_mcu_device::sub_w_ais_dd_ipm, + &m68000_mcu_device::sub_w_aips_dd_ipm, + &m68000_mcu_device::sub_w_pais_dd_ipm, + &m68000_mcu_device::sub_w_das_dd_ipm, + &m68000_mcu_device::sub_w_dais_dd_ipm, + &m68000_mcu_device::sub_w_adr16_dd_ipm, + &m68000_mcu_device::sub_w_adr32_dd_ipm, + &m68000_mcu_device::sub_w_dpc_dd_ipm, + &m68000_mcu_device::sub_w_dpci_dd_ipm, + &m68000_mcu_device::sub_w_imm16_dd_ipm, + &m68000_mcu_device::sub_l_ds_dd_ipm, + &m68000_mcu_device::sub_l_as_dd_ipm, + &m68000_mcu_device::sub_l_ais_dd_ipm, + &m68000_mcu_device::sub_l_aips_dd_ipm, + &m68000_mcu_device::sub_l_pais_dd_ipm, + &m68000_mcu_device::sub_l_das_dd_ipm, + &m68000_mcu_device::sub_l_dais_dd_ipm, + &m68000_mcu_device::sub_l_adr16_dd_ipm, + &m68000_mcu_device::sub_l_adr32_dd_ipm, + &m68000_mcu_device::sub_l_dpc_dd_ipm, + &m68000_mcu_device::sub_l_dpci_dd_ipm, + &m68000_mcu_device::sub_l_imm32_dd_ipm, + &m68000_mcu_device::suba_w_ds_ad_ipm, + &m68000_mcu_device::suba_w_as_ad_ipm, + &m68000_mcu_device::suba_w_ais_ad_ipm, + &m68000_mcu_device::suba_w_aips_ad_ipm, + &m68000_mcu_device::suba_w_pais_ad_ipm, + &m68000_mcu_device::suba_w_das_ad_ipm, + &m68000_mcu_device::suba_w_dais_ad_ipm, + &m68000_mcu_device::suba_w_adr16_ad_ipm, + &m68000_mcu_device::suba_w_adr32_ad_ipm, + &m68000_mcu_device::suba_w_dpc_ad_ipm, + &m68000_mcu_device::suba_w_dpci_ad_ipm, + &m68000_mcu_device::suba_w_imm16_ad_ipm, + &m68000_mcu_device::subx_b_ds_dd_ipm, + &m68000_mcu_device::subx_b_pais_paid_ipm, + &m68000_mcu_device::sub_b_dd_ais_ipm, + &m68000_mcu_device::sub_b_dd_aips_ipm, + &m68000_mcu_device::sub_b_dd_pais_ipm, + &m68000_mcu_device::sub_b_dd_das_ipm, + &m68000_mcu_device::sub_b_dd_dais_ipm, + &m68000_mcu_device::sub_b_dd_adr16_ipm, + &m68000_mcu_device::sub_b_dd_adr32_ipm, + &m68000_mcu_device::subx_w_ds_dd_ipm, + &m68000_mcu_device::subx_w_pais_paid_ipm, + &m68000_mcu_device::sub_w_dd_ais_ipm, + &m68000_mcu_device::sub_w_dd_aips_ipm, + &m68000_mcu_device::sub_w_dd_pais_ipm, + &m68000_mcu_device::sub_w_dd_das_ipm, + &m68000_mcu_device::sub_w_dd_dais_ipm, + &m68000_mcu_device::sub_w_dd_adr16_ipm, + &m68000_mcu_device::sub_w_dd_adr32_ipm, + &m68000_mcu_device::subx_l_ds_dd_ipm, + &m68000_mcu_device::subx_l_pais_paid_ipm, + &m68000_mcu_device::sub_l_dd_ais_ipm, + &m68000_mcu_device::sub_l_dd_aips_ipm, + &m68000_mcu_device::sub_l_dd_pais_ipm, + &m68000_mcu_device::sub_l_dd_das_ipm, + &m68000_mcu_device::sub_l_dd_dais_ipm, + &m68000_mcu_device::sub_l_dd_adr16_ipm, + &m68000_mcu_device::sub_l_dd_adr32_ipm, + &m68000_mcu_device::suba_l_ds_ad_ipm, + &m68000_mcu_device::suba_l_as_ad_ipm, + &m68000_mcu_device::suba_l_ais_ad_ipm, + &m68000_mcu_device::suba_l_aips_ad_ipm, + &m68000_mcu_device::suba_l_pais_ad_ipm, + &m68000_mcu_device::suba_l_das_ad_ipm, + &m68000_mcu_device::suba_l_dais_ad_ipm, + &m68000_mcu_device::suba_l_adr16_ad_ipm, + &m68000_mcu_device::suba_l_adr32_ad_ipm, + &m68000_mcu_device::suba_l_dpc_ad_ipm, + &m68000_mcu_device::suba_l_dpci_ad_ipm, + &m68000_mcu_device::suba_l_imm32_ad_ipm, + &m68000_mcu_device::cmp_b_ds_dd_ipm, + &m68000_mcu_device::cmp_b_ais_dd_ipm, + &m68000_mcu_device::cmp_b_aips_dd_ipm, + &m68000_mcu_device::cmp_b_pais_dd_ipm, + &m68000_mcu_device::cmp_b_das_dd_ipm, + &m68000_mcu_device::cmp_b_dais_dd_ipm, + &m68000_mcu_device::cmp_b_adr16_dd_ipm, + &m68000_mcu_device::cmp_b_adr32_dd_ipm, + &m68000_mcu_device::cmp_b_dpc_dd_ipm, + &m68000_mcu_device::cmp_b_dpci_dd_ipm, + &m68000_mcu_device::cmp_b_imm8_dd_ipm, + &m68000_mcu_device::cmp_w_ds_dd_ipm, + &m68000_mcu_device::cmp_w_as_dd_ipm, + &m68000_mcu_device::cmp_w_ais_dd_ipm, + &m68000_mcu_device::cmp_w_aips_dd_ipm, + &m68000_mcu_device::cmp_w_pais_dd_ipm, + &m68000_mcu_device::cmp_w_das_dd_ipm, + &m68000_mcu_device::cmp_w_dais_dd_ipm, + &m68000_mcu_device::cmp_w_adr16_dd_ipm, + &m68000_mcu_device::cmp_w_adr32_dd_ipm, + &m68000_mcu_device::cmp_w_dpc_dd_ipm, + &m68000_mcu_device::cmp_w_dpci_dd_ipm, + &m68000_mcu_device::cmp_w_imm16_dd_ipm, + &m68000_mcu_device::cmp_l_ds_dd_ipm, + &m68000_mcu_device::cmp_l_as_dd_ipm, + &m68000_mcu_device::cmp_l_ais_dd_ipm, + &m68000_mcu_device::cmp_l_aips_dd_ipm, + &m68000_mcu_device::cmp_l_pais_dd_ipm, + &m68000_mcu_device::cmp_l_das_dd_ipm, + &m68000_mcu_device::cmp_l_dais_dd_ipm, + &m68000_mcu_device::cmp_l_adr16_dd_ipm, + &m68000_mcu_device::cmp_l_adr32_dd_ipm, + &m68000_mcu_device::cmp_l_dpc_dd_ipm, + &m68000_mcu_device::cmp_l_dpci_dd_ipm, + &m68000_mcu_device::cmp_l_imm32_dd_ipm, + &m68000_mcu_device::cmpa_w_ds_ad_ipm, + &m68000_mcu_device::cmpa_w_as_ad_ipm, + &m68000_mcu_device::cmpa_w_ais_ad_ipm, + &m68000_mcu_device::cmpa_w_aips_ad_ipm, + &m68000_mcu_device::cmpa_w_pais_ad_ipm, + &m68000_mcu_device::cmpa_w_das_ad_ipm, + &m68000_mcu_device::cmpa_w_dais_ad_ipm, + &m68000_mcu_device::cmpa_w_adr16_ad_ipm, + &m68000_mcu_device::cmpa_w_adr32_ad_ipm, + &m68000_mcu_device::cmpa_w_dpc_ad_ipm, + &m68000_mcu_device::cmpa_w_dpci_ad_ipm, + &m68000_mcu_device::cmpa_w_imm16_ad_ipm, + &m68000_mcu_device::eor_b_dd_ds_ipm, + &m68000_mcu_device::cmpm_b_aips_aipd_ipm, + &m68000_mcu_device::eor_b_dd_ais_ipm, + &m68000_mcu_device::eor_b_dd_aips_ipm, + &m68000_mcu_device::eor_b_dd_pais_ipm, + &m68000_mcu_device::eor_b_dd_das_ipm, + &m68000_mcu_device::eor_b_dd_dais_ipm, + &m68000_mcu_device::eor_b_dd_adr16_ipm, + &m68000_mcu_device::eor_b_dd_adr32_ipm, + &m68000_mcu_device::eor_w_dd_ds_ipm, + &m68000_mcu_device::cmpm_w_aips_aipd_ipm, + &m68000_mcu_device::eor_w_dd_ais_ipm, + &m68000_mcu_device::eor_w_dd_aips_ipm, + &m68000_mcu_device::eor_w_dd_pais_ipm, + &m68000_mcu_device::eor_w_dd_das_ipm, + &m68000_mcu_device::eor_w_dd_dais_ipm, + &m68000_mcu_device::eor_w_dd_adr16_ipm, + &m68000_mcu_device::eor_w_dd_adr32_ipm, + &m68000_mcu_device::eor_l_dd_ds_ipm, + &m68000_mcu_device::cmpm_l_aips_aipd_ipm, + &m68000_mcu_device::eor_l_dd_ais_ipm, + &m68000_mcu_device::eor_l_dd_aips_ipm, + &m68000_mcu_device::eor_l_dd_pais_ipm, + &m68000_mcu_device::eor_l_dd_das_ipm, + &m68000_mcu_device::eor_l_dd_dais_ipm, + &m68000_mcu_device::eor_l_dd_adr16_ipm, + &m68000_mcu_device::eor_l_dd_adr32_ipm, + &m68000_mcu_device::cmpa_l_ds_ad_ipm, + &m68000_mcu_device::cmpa_l_as_ad_ipm, + &m68000_mcu_device::cmpa_l_ais_ad_ipm, + &m68000_mcu_device::cmpa_l_aips_ad_ipm, + &m68000_mcu_device::cmpa_l_pais_ad_ipm, + &m68000_mcu_device::cmpa_l_das_ad_ipm, + &m68000_mcu_device::cmpa_l_dais_ad_ipm, + &m68000_mcu_device::cmpa_l_adr16_ad_ipm, + &m68000_mcu_device::cmpa_l_adr32_ad_ipm, + &m68000_mcu_device::cmpa_l_dpc_ad_ipm, + &m68000_mcu_device::cmpa_l_dpci_ad_ipm, + &m68000_mcu_device::cmpa_l_imm32_ad_ipm, + &m68000_mcu_device::and_b_ds_dd_ipm, + &m68000_mcu_device::and_b_ais_dd_ipm, + &m68000_mcu_device::and_b_aips_dd_ipm, + &m68000_mcu_device::and_b_pais_dd_ipm, + &m68000_mcu_device::and_b_das_dd_ipm, + &m68000_mcu_device::and_b_dais_dd_ipm, + &m68000_mcu_device::and_b_adr16_dd_ipm, + &m68000_mcu_device::and_b_adr32_dd_ipm, + &m68000_mcu_device::and_b_dpc_dd_ipm, + &m68000_mcu_device::and_b_dpci_dd_ipm, + &m68000_mcu_device::and_b_imm8_dd_ipm, + &m68000_mcu_device::and_w_ds_dd_ipm, + &m68000_mcu_device::and_w_ais_dd_ipm, + &m68000_mcu_device::and_w_aips_dd_ipm, + &m68000_mcu_device::and_w_pais_dd_ipm, + &m68000_mcu_device::and_w_das_dd_ipm, + &m68000_mcu_device::and_w_dais_dd_ipm, + &m68000_mcu_device::and_w_adr16_dd_ipm, + &m68000_mcu_device::and_w_adr32_dd_ipm, + &m68000_mcu_device::and_w_dpc_dd_ipm, + &m68000_mcu_device::and_w_dpci_dd_ipm, + &m68000_mcu_device::and_w_imm16_dd_ipm, + &m68000_mcu_device::and_l_ds_dd_ipm, + &m68000_mcu_device::and_l_ais_dd_ipm, + &m68000_mcu_device::and_l_aips_dd_ipm, + &m68000_mcu_device::and_l_pais_dd_ipm, + &m68000_mcu_device::and_l_das_dd_ipm, + &m68000_mcu_device::and_l_dais_dd_ipm, + &m68000_mcu_device::and_l_adr16_dd_ipm, + &m68000_mcu_device::and_l_adr32_dd_ipm, + &m68000_mcu_device::and_l_dpc_dd_ipm, + &m68000_mcu_device::and_l_dpci_dd_ipm, + &m68000_mcu_device::and_l_imm32_dd_ipm, + &m68000_mcu_device::mulu_w_ds_dd_ipm, + &m68000_mcu_device::mulu_w_ais_dd_ipm, + &m68000_mcu_device::mulu_w_aips_dd_ipm, + &m68000_mcu_device::mulu_w_pais_dd_ipm, + &m68000_mcu_device::mulu_w_das_dd_ipm, + &m68000_mcu_device::mulu_w_dais_dd_ipm, + &m68000_mcu_device::mulu_w_adr16_dd_ipm, + &m68000_mcu_device::mulu_w_adr32_dd_ipm, + &m68000_mcu_device::mulu_w_dpc_dd_ipm, + &m68000_mcu_device::mulu_w_dpci_dd_ipm, + &m68000_mcu_device::mulu_w_imm16_dd_ipm, + &m68000_mcu_device::abcd_ds_dd_ipm, + &m68000_mcu_device::abcd_pais_paid_ipm, + &m68000_mcu_device::and_b_dd_ais_ipm, + &m68000_mcu_device::and_b_dd_aips_ipm, + &m68000_mcu_device::and_b_dd_pais_ipm, + &m68000_mcu_device::and_b_dd_das_ipm, + &m68000_mcu_device::and_b_dd_dais_ipm, + &m68000_mcu_device::and_b_dd_adr16_ipm, + &m68000_mcu_device::and_b_dd_adr32_ipm, + &m68000_mcu_device::exg_dd_ds_ipm, + &m68000_mcu_device::exg_ad_as_ipm, + &m68000_mcu_device::and_w_dd_ais_ipm, + &m68000_mcu_device::and_w_dd_aips_ipm, + &m68000_mcu_device::and_w_dd_pais_ipm, + &m68000_mcu_device::and_w_dd_das_ipm, + &m68000_mcu_device::and_w_dd_dais_ipm, + &m68000_mcu_device::and_w_dd_adr16_ipm, + &m68000_mcu_device::and_w_dd_adr32_ipm, + &m68000_mcu_device::exg_dd_as_ipm, + &m68000_mcu_device::and_l_dd_ais_ipm, + &m68000_mcu_device::and_l_dd_aips_ipm, + &m68000_mcu_device::and_l_dd_pais_ipm, + &m68000_mcu_device::and_l_dd_das_ipm, + &m68000_mcu_device::and_l_dd_dais_ipm, + &m68000_mcu_device::and_l_dd_adr16_ipm, + &m68000_mcu_device::and_l_dd_adr32_ipm, + &m68000_mcu_device::muls_w_ds_dd_ipm, + &m68000_mcu_device::muls_w_ais_dd_ipm, + &m68000_mcu_device::muls_w_aips_dd_ipm, + &m68000_mcu_device::muls_w_pais_dd_ipm, + &m68000_mcu_device::muls_w_das_dd_ipm, + &m68000_mcu_device::muls_w_dais_dd_ipm, + &m68000_mcu_device::muls_w_adr16_dd_ipm, + &m68000_mcu_device::muls_w_adr32_dd_ipm, + &m68000_mcu_device::muls_w_dpc_dd_ipm, + &m68000_mcu_device::muls_w_dpci_dd_ipm, + &m68000_mcu_device::muls_w_imm16_dd_ipm, + &m68000_mcu_device::add_b_ds_dd_ipm, + &m68000_mcu_device::add_b_ais_dd_ipm, + &m68000_mcu_device::add_b_aips_dd_ipm, + &m68000_mcu_device::add_b_pais_dd_ipm, + &m68000_mcu_device::add_b_das_dd_ipm, + &m68000_mcu_device::add_b_dais_dd_ipm, + &m68000_mcu_device::add_b_adr16_dd_ipm, + &m68000_mcu_device::add_b_adr32_dd_ipm, + &m68000_mcu_device::add_b_dpc_dd_ipm, + &m68000_mcu_device::add_b_dpci_dd_ipm, + &m68000_mcu_device::add_b_imm8_dd_ipm, + &m68000_mcu_device::add_w_ds_dd_ipm, + &m68000_mcu_device::add_w_as_dd_ipm, + &m68000_mcu_device::add_w_ais_dd_ipm, + &m68000_mcu_device::add_w_aips_dd_ipm, + &m68000_mcu_device::add_w_pais_dd_ipm, + &m68000_mcu_device::add_w_das_dd_ipm, + &m68000_mcu_device::add_w_dais_dd_ipm, + &m68000_mcu_device::add_w_adr16_dd_ipm, + &m68000_mcu_device::add_w_adr32_dd_ipm, + &m68000_mcu_device::add_w_dpc_dd_ipm, + &m68000_mcu_device::add_w_dpci_dd_ipm, + &m68000_mcu_device::add_w_imm16_dd_ipm, + &m68000_mcu_device::add_l_ds_dd_ipm, + &m68000_mcu_device::add_l_as_dd_ipm, + &m68000_mcu_device::add_l_ais_dd_ipm, + &m68000_mcu_device::add_l_aips_dd_ipm, + &m68000_mcu_device::add_l_pais_dd_ipm, + &m68000_mcu_device::add_l_das_dd_ipm, + &m68000_mcu_device::add_l_dais_dd_ipm, + &m68000_mcu_device::add_l_adr16_dd_ipm, + &m68000_mcu_device::add_l_adr32_dd_ipm, + &m68000_mcu_device::add_l_dpc_dd_ipm, + &m68000_mcu_device::add_l_dpci_dd_ipm, + &m68000_mcu_device::add_l_imm32_dd_ipm, + &m68000_mcu_device::adda_w_ds_ad_ipm, + &m68000_mcu_device::adda_w_as_ad_ipm, + &m68000_mcu_device::adda_w_ais_ad_ipm, + &m68000_mcu_device::adda_w_aips_ad_ipm, + &m68000_mcu_device::adda_w_pais_ad_ipm, + &m68000_mcu_device::adda_w_das_ad_ipm, + &m68000_mcu_device::adda_w_dais_ad_ipm, + &m68000_mcu_device::adda_w_adr16_ad_ipm, + &m68000_mcu_device::adda_w_adr32_ad_ipm, + &m68000_mcu_device::adda_w_dpc_ad_ipm, + &m68000_mcu_device::adda_w_dpci_ad_ipm, + &m68000_mcu_device::adda_w_imm16_ad_ipm, + &m68000_mcu_device::addx_b_ds_dd_ipm, + &m68000_mcu_device::addx_b_pais_paid_ipm, + &m68000_mcu_device::add_b_dd_ais_ipm, + &m68000_mcu_device::add_b_dd_aips_ipm, + &m68000_mcu_device::add_b_dd_pais_ipm, + &m68000_mcu_device::add_b_dd_das_ipm, + &m68000_mcu_device::add_b_dd_dais_ipm, + &m68000_mcu_device::add_b_dd_adr16_ipm, + &m68000_mcu_device::add_b_dd_adr32_ipm, + &m68000_mcu_device::addx_w_ds_dd_ipm, + &m68000_mcu_device::addx_w_pais_paid_ipm, + &m68000_mcu_device::add_w_dd_ais_ipm, + &m68000_mcu_device::add_w_dd_aips_ipm, + &m68000_mcu_device::add_w_dd_pais_ipm, + &m68000_mcu_device::add_w_dd_das_ipm, + &m68000_mcu_device::add_w_dd_dais_ipm, + &m68000_mcu_device::add_w_dd_adr16_ipm, + &m68000_mcu_device::add_w_dd_adr32_ipm, + &m68000_mcu_device::addx_l_ds_dd_ipm, + &m68000_mcu_device::addx_l_pais_paid_ipm, + &m68000_mcu_device::add_l_dd_ais_ipm, + &m68000_mcu_device::add_l_dd_aips_ipm, + &m68000_mcu_device::add_l_dd_pais_ipm, + &m68000_mcu_device::add_l_dd_das_ipm, + &m68000_mcu_device::add_l_dd_dais_ipm, + &m68000_mcu_device::add_l_dd_adr16_ipm, + &m68000_mcu_device::add_l_dd_adr32_ipm, + &m68000_mcu_device::adda_l_ds_ad_ipm, + &m68000_mcu_device::adda_l_as_ad_ipm, + &m68000_mcu_device::adda_l_ais_ad_ipm, + &m68000_mcu_device::adda_l_aips_ad_ipm, + &m68000_mcu_device::adda_l_pais_ad_ipm, + &m68000_mcu_device::adda_l_das_ad_ipm, + &m68000_mcu_device::adda_l_dais_ad_ipm, + &m68000_mcu_device::adda_l_adr16_ad_ipm, + &m68000_mcu_device::adda_l_adr32_ad_ipm, + &m68000_mcu_device::adda_l_dpc_ad_ipm, + &m68000_mcu_device::adda_l_dpci_ad_ipm, + &m68000_mcu_device::adda_l_imm32_ad_ipm, + &m68000_mcu_device::asr_b_imm3_ds_ipm, + &m68000_mcu_device::lsr_b_imm3_ds_ipm, + &m68000_mcu_device::roxr_b_imm3_ds_ipm, + &m68000_mcu_device::ror_b_imm3_ds_ipm, + &m68000_mcu_device::asr_b_dd_ds_ipm, + &m68000_mcu_device::lsr_b_dd_ds_ipm, + &m68000_mcu_device::roxr_b_dd_ds_ipm, + &m68000_mcu_device::ror_b_dd_ds_ipm, + &m68000_mcu_device::asr_w_imm3_ds_ipm, + &m68000_mcu_device::lsr_w_imm3_ds_ipm, + &m68000_mcu_device::roxr_w_imm3_ds_ipm, + &m68000_mcu_device::ror_w_imm3_ds_ipm, + &m68000_mcu_device::asr_w_dd_ds_ipm, + &m68000_mcu_device::lsr_w_dd_ds_ipm, + &m68000_mcu_device::roxr_w_dd_ds_ipm, + &m68000_mcu_device::ror_w_dd_ds_ipm, + &m68000_mcu_device::asr_l_imm3_ds_ipm, + &m68000_mcu_device::lsr_l_imm3_ds_ipm, + &m68000_mcu_device::roxr_l_imm3_ds_ipm, + &m68000_mcu_device::ror_l_imm3_ds_ipm, + &m68000_mcu_device::asr_l_dd_ds_ipm, + &m68000_mcu_device::lsr_l_dd_ds_ipm, + &m68000_mcu_device::roxr_l_dd_ds_ipm, + &m68000_mcu_device::ror_l_dd_ds_ipm, + &m68000_mcu_device::asr_ais_ipm, + &m68000_mcu_device::asr_aips_ipm, + &m68000_mcu_device::asr_pais_ipm, + &m68000_mcu_device::asr_das_ipm, + &m68000_mcu_device::asr_dais_ipm, + &m68000_mcu_device::asr_adr16_ipm, + &m68000_mcu_device::asr_adr32_ipm, + &m68000_mcu_device::asl_b_imm3_ds_ipm, + &m68000_mcu_device::lsl_b_imm3_ds_ipm, + &m68000_mcu_device::roxl_b_imm3_ds_ipm, + &m68000_mcu_device::rol_b_imm3_ds_ipm, + &m68000_mcu_device::asl_b_dd_ds_ipm, + &m68000_mcu_device::lsl_b_dd_ds_ipm, + &m68000_mcu_device::roxl_b_dd_ds_ipm, + &m68000_mcu_device::rol_b_dd_ds_ipm, + &m68000_mcu_device::asl_w_imm3_ds_ipm, + &m68000_mcu_device::lsl_w_imm3_ds_ipm, + &m68000_mcu_device::roxl_w_imm3_ds_ipm, + &m68000_mcu_device::rol_w_imm3_ds_ipm, + &m68000_mcu_device::asl_w_dd_ds_ipm, + &m68000_mcu_device::lsl_w_dd_ds_ipm, + &m68000_mcu_device::roxl_w_dd_ds_ipm, + &m68000_mcu_device::rol_w_dd_ds_ipm, + &m68000_mcu_device::asl_l_imm3_ds_ipm, + &m68000_mcu_device::lsl_l_imm3_ds_ipm, + &m68000_mcu_device::roxl_l_imm3_ds_ipm, + &m68000_mcu_device::rol_l_imm3_ds_ipm, + &m68000_mcu_device::asl_l_dd_ds_ipm, + &m68000_mcu_device::lsl_l_dd_ds_ipm, + &m68000_mcu_device::roxl_l_dd_ds_ipm, + &m68000_mcu_device::rol_l_dd_ds_ipm, + &m68000_mcu_device::asl_ais_ipm, + &m68000_mcu_device::asl_aips_ipm, + &m68000_mcu_device::asl_pais_ipm, + &m68000_mcu_device::asl_das_ipm, + &m68000_mcu_device::asl_dais_ipm, + &m68000_mcu_device::asl_adr16_ipm, + &m68000_mcu_device::asl_adr32_ipm, + &m68000_mcu_device::lsr_ais_ipm, + &m68000_mcu_device::lsr_aips_ipm, + &m68000_mcu_device::lsr_pais_ipm, + &m68000_mcu_device::lsr_das_ipm, + &m68000_mcu_device::lsr_dais_ipm, + &m68000_mcu_device::lsr_adr16_ipm, + &m68000_mcu_device::lsr_adr32_ipm, + &m68000_mcu_device::lsl_ais_ipm, + &m68000_mcu_device::lsl_aips_ipm, + &m68000_mcu_device::lsl_pais_ipm, + &m68000_mcu_device::lsl_das_ipm, + &m68000_mcu_device::lsl_dais_ipm, + &m68000_mcu_device::lsl_adr16_ipm, + &m68000_mcu_device::lsl_adr32_ipm, + &m68000_mcu_device::roxr_ais_ipm, + &m68000_mcu_device::roxr_aips_ipm, + &m68000_mcu_device::roxr_pais_ipm, + &m68000_mcu_device::roxr_das_ipm, + &m68000_mcu_device::roxr_dais_ipm, + &m68000_mcu_device::roxr_adr16_ipm, + &m68000_mcu_device::roxr_adr32_ipm, + &m68000_mcu_device::roxl_ais_ipm, + &m68000_mcu_device::roxl_aips_ipm, + &m68000_mcu_device::roxl_pais_ipm, + &m68000_mcu_device::roxl_das_ipm, + &m68000_mcu_device::roxl_dais_ipm, + &m68000_mcu_device::roxl_adr16_ipm, + &m68000_mcu_device::roxl_adr32_ipm, + &m68000_mcu_device::ror_ais_ipm, + &m68000_mcu_device::ror_aips_ipm, + &m68000_mcu_device::ror_pais_ipm, + &m68000_mcu_device::ror_das_ipm, + &m68000_mcu_device::ror_dais_ipm, + &m68000_mcu_device::ror_adr16_ipm, + &m68000_mcu_device::ror_adr32_ipm, + &m68000_mcu_device::rol_ais_ipm, + &m68000_mcu_device::rol_aips_ipm, + &m68000_mcu_device::rol_pais_ipm, + &m68000_mcu_device::rol_das_ipm, + &m68000_mcu_device::rol_dais_ipm, + &m68000_mcu_device::rol_adr16_ipm, + &m68000_mcu_device::rol_adr32_ipm, }; diff --git a/src/devices/cpu/m68000/m68000mcu.cpp b/src/devices/cpu/m68000/m68000mcu.cpp new file mode 100644 index 00000000000..c793b36f862 --- /dev/null +++ b/src/devices/cpu/m68000/m68000mcu.cpp @@ -0,0 +1,109 @@ +// license:BSD-3-Clause +// copyright-holders:Olivier Galibert + +#include "emu.h" +#include "m68000mcu.h" + +m68000_mcu_device::m68000_mcu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) : + m68000_device(mconfig, type, tag, owner, clock) +{ + m_disable_interrupt_callback = true; +} + +void m68000_mcu_device::execute_run() +{ + internal_update(total_cycles()); + + m_icount -= m_count_before_instruction_step; + if(m_icount < 0) { + m_count_before_instruction_step = -m_icount; + m_icount = 0; + } else + m_count_before_instruction_step = 0; + + while(m_bcount && m_icount <= m_bcount) + internal_update(total_cycles() + m_icount - m_bcount); + + while(m_icount > 0) { + for(;;) { + if(m_icount > m_bcount && m_inst_substate) + (this->*(m_handlers_p[m_inst_state]))(); + + while(m_icount > m_bcount) { + if(m_inst_state >= S_first_instruction) { + m_ipc = m_pc - 2; + m_irdi = m_ird; + + if(machine().debug_flags & DEBUG_FLAG_ENABLED) + debugger_instruction_hook(m_ipc); + } + (this->*(m_handlers_f[m_inst_state]))(); + } + + if(m_post_run) + do_post_run(); + else + break; + } + if(m_icount > 0) + while(m_bcount && m_icount <= m_bcount) + internal_update(total_cycles() + m_icount - m_bcount); + if(m_icount > 0 && m_inst_substate) { + (this->*(m_handlers_p[m_inst_state]))(); + if(m_post_run) + do_post_run(); + } + } + + if(m_icount < 0) { + m_count_before_instruction_step = -m_icount; + m_icount = 0; + } +} + +void m68000_mcu_device::recompute_bcount(uint64_t event_time) +{ + if(!event_time || event_time >= total_cycles() + m_icount) { + m_bcount = 0; + return; + } + m_bcount = total_cycles() + m_icount - event_time; +} + +void m68000_mcu_device::add_event(uint64_t &event_time, uint64_t new_event) +{ + if(!new_event) + return; + if(!event_time || event_time > new_event) + event_time = new_event; +} + +void m68000_mcu_device::device_start() +{ + m68000_device::device_start(); + + // Theoretically UB, in practice works, the alternative (putting + // everything in m68000_device) is annoying + if(m_mmu) { + m_handlers_f = reinterpret_cast(s_handlers_ifm); + m_handlers_p = reinterpret_cast(s_handlers_ipm); + } else { + m_handlers_f = reinterpret_cast(s_handlers_dfm); + m_handlers_p = reinterpret_cast(s_handlers_dpm); + } +} + +void m68000_mcu_device::set_current_interrupt_level(u32 level) +{ + if(level == m_int_level) + return; + + m_int_level = level; + + /* A transition from < 7 to 7 always interrupts (NMI) */ + /* Note: Level 7 can also level trigger like a normal IRQ */ + if(m_int_level == 7) + m_nmi_pending = true; + + update_interrupt(); +} diff --git a/src/devices/cpu/m68000/m68000mcu.h b/src/devices/cpu/m68000/m68000mcu.h new file mode 100644 index 00000000000..07a50ff5977 --- /dev/null +++ b/src/devices/cpu/m68000/m68000mcu.h @@ -0,0 +1,36 @@ +// license:BSD-3-Clause +// copyright-holders:Olivier Galibert +#ifndef MAME_CPU_M68000_M68000mcu_H +#define MAME_CPU_M68000_M68000mcu_H + +#pragma once + +#include "m68000.h" + +class m68000_mcu_device : public m68000_device +{ +protected: + // Opcode handlers (d = direct, i = indirect, f = full, p = partial) + using handlerm = void (m68000_mcu_device::*)(); + +#include "m68000mcu-head.h" + + static const handlerm s_handlers_dfm[]; + static const handlerm s_handlers_ifm[]; + static const handlerm s_handlers_dpm[]; + static const handlerm s_handlers_ipm[]; + + m68000_mcu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); + + virtual void execute_run() override; + void recompute_bcount(uint64_t event_time); + static void add_event(uint64_t &event_time, uint64_t new_event); + void internal_update(); + + virtual void internal_update(uint64_t current_time) = 0; + virtual void device_start() override; + + void set_current_interrupt_level(u32 level); +}; + +#endif diff --git a/src/devices/cpu/m68000/m68008-head.h b/src/devices/cpu/m68000/m68008-head.h new file mode 100644 index 00000000000..4f6fedfaa9f --- /dev/null +++ b/src/devices/cpu/m68000/m68008-head.h @@ -0,0 +1,6144 @@ +// Header fragment for the handlers +// +// Generated by m68000gen.py header8 m68000.lst m68008-head.h + +void state_reset_df8(); +void state_bus_error_df8(); +void state_address_error_df8(); +void state_double_fault_df8(); +void state_interrupt_df8(); +void state_trace_df8(); +void state_illegal_df8(); +void state_priviledge_df8(); +void state_linea_df8(); +void state_linef_df8(); +void ori_b_imm8_ds_df8(); +void ori_b_imm8_ais_df8(); +void ori_b_imm8_aips_df8(); +void ori_b_imm8_pais_df8(); +void ori_b_imm8_das_df8(); +void ori_b_imm8_dais_df8(); +void ori_b_imm8_adr16_df8(); +void ori_b_imm8_adr32_df8(); +void ori_imm8_ccr_df8(); +void ori_w_imm16_ds_df8(); +void ori_w_imm16_ais_df8(); +void ori_w_imm16_aips_df8(); +void ori_w_imm16_pais_df8(); +void ori_w_imm16_das_df8(); +void ori_w_imm16_dais_df8(); +void ori_w_imm16_adr16_df8(); +void ori_w_imm16_adr32_df8(); +void ori_i16u_sr_df8(); +void ori_l_imm32_ds_df8(); +void ori_l_imm32_ais_df8(); +void ori_l_imm32_aips_df8(); +void ori_l_imm32_pais_df8(); +void ori_l_imm32_das_df8(); +void ori_l_imm32_dais_df8(); +void ori_l_imm32_adr16_df8(); +void ori_l_imm32_adr32_df8(); +void btst_dd_ds_df8(); +void movep_w_das_dd_df8(); +void btst_dd_ais_df8(); +void btst_dd_aips_df8(); +void btst_dd_pais_df8(); +void btst_dd_das_df8(); +void btst_dd_dais_df8(); +void btst_dd_adr16_df8(); +void btst_dd_adr32_df8(); +void btst_dd_dpc_df8(); +void btst_dd_dpci_df8(); +void btst_dd_imm_df8(); +void bchg_dd_ds_df8(); +void movep_l_das_dd_df8(); +void bchg_dd_ais_df8(); +void bchg_dd_aips_df8(); +void bchg_dd_pais_df8(); +void bchg_dd_das_df8(); +void bchg_dd_dais_df8(); +void bchg_dd_adr16_df8(); +void bchg_dd_adr32_df8(); +void bclr_dd_ds_df8(); +void movep_w_dd_das_df8(); +void bclr_dd_ais_df8(); +void bclr_dd_aips_df8(); +void bclr_dd_pais_df8(); +void bclr_dd_das_df8(); +void bclr_dd_dais_df8(); +void bclr_dd_adr16_df8(); +void bclr_dd_adr32_df8(); +void bset_dd_ds_df8(); +void movep_l_dd_das_df8(); +void bset_dd_ais_df8(); +void bset_dd_aips_df8(); +void bset_dd_pais_df8(); +void bset_dd_das_df8(); +void bset_dd_dais_df8(); +void bset_dd_adr16_df8(); +void bset_dd_adr32_df8(); +void andi_b_imm8_ds_df8(); +void andi_b_imm8_ais_df8(); +void andi_b_imm8_aips_df8(); +void andi_b_imm8_pais_df8(); +void andi_b_imm8_das_df8(); +void andi_b_imm8_dais_df8(); +void andi_b_imm8_adr16_df8(); +void andi_b_imm8_adr32_df8(); +void andi_imm8_ccr_df8(); +void andi_w_imm16_ds_df8(); +void andi_w_imm16_ais_df8(); +void andi_w_imm16_aips_df8(); +void andi_w_imm16_pais_df8(); +void andi_w_imm16_das_df8(); +void andi_w_imm16_dais_df8(); +void andi_w_imm16_adr16_df8(); +void andi_w_imm16_adr32_df8(); +void andi_i16u_sr_df8(); +void andi_l_imm32_ds_df8(); +void andi_l_imm32_ais_df8(); +void andi_l_imm32_aips_df8(); +void andi_l_imm32_pais_df8(); +void andi_l_imm32_das_df8(); +void andi_l_imm32_dais_df8(); +void andi_l_imm32_adr16_df8(); +void andi_l_imm32_adr32_df8(); +void subi_b_imm8_ds_df8(); +void subi_b_imm8_ais_df8(); +void subi_b_imm8_aips_df8(); +void subi_b_imm8_pais_df8(); +void subi_b_imm8_das_df8(); +void subi_b_imm8_dais_df8(); +void subi_b_imm8_adr16_df8(); +void subi_b_imm8_adr32_df8(); +void subi_w_imm16_ds_df8(); +void subi_w_imm16_ais_df8(); +void subi_w_imm16_aips_df8(); +void subi_w_imm16_pais_df8(); +void subi_w_imm16_das_df8(); +void subi_w_imm16_dais_df8(); +void subi_w_imm16_adr16_df8(); +void subi_w_imm16_adr32_df8(); +void subi_l_imm32_ds_df8(); +void subi_l_imm32_ais_df8(); +void subi_l_imm32_aips_df8(); +void subi_l_imm32_pais_df8(); +void subi_l_imm32_das_df8(); +void subi_l_imm32_dais_df8(); +void subi_l_imm32_adr16_df8(); +void subi_l_imm32_adr32_df8(); +void addi_b_imm8_ds_df8(); +void addi_b_imm8_ais_df8(); +void addi_b_imm8_aips_df8(); +void addi_b_imm8_pais_df8(); +void addi_b_imm8_das_df8(); +void addi_b_imm8_dais_df8(); +void addi_b_imm8_adr16_df8(); +void addi_b_imm8_adr32_df8(); +void addi_w_imm16_ds_df8(); +void addi_w_imm16_ais_df8(); +void addi_w_imm16_aips_df8(); +void addi_w_imm16_pais_df8(); +void addi_w_imm16_das_df8(); +void addi_w_imm16_dais_df8(); +void addi_w_imm16_adr16_df8(); +void addi_w_imm16_adr32_df8(); +void addi_l_imm32_ds_df8(); +void addi_l_imm32_ais_df8(); +void addi_l_imm32_aips_df8(); +void addi_l_imm32_pais_df8(); +void addi_l_imm32_das_df8(); +void addi_l_imm32_dais_df8(); +void addi_l_imm32_adr16_df8(); +void addi_l_imm32_adr32_df8(); +void btst_imm8_ds_df8(); +void btst_imm8_ais_df8(); +void btst_imm8_aips_df8(); +void btst_imm8_pais_df8(); +void btst_imm8_das_df8(); +void btst_imm8_dais_df8(); +void btst_imm8_adr16_df8(); +void btst_imm8_adr32_df8(); +void btst_imm8_dpc_df8(); +void btst_imm8_dpci_df8(); +void bchg_imm8_ds_df8(); +void bchg_imm8_ais_df8(); +void bchg_imm8_aips_df8(); +void bchg_imm8_pais_df8(); +void bchg_imm8_das_df8(); +void bchg_imm8_dais_df8(); +void bchg_imm8_adr16_df8(); +void bchg_imm8_adr32_df8(); +void bclr_imm8_ds_df8(); +void bclr_imm8_ais_df8(); +void bclr_imm8_aips_df8(); +void bclr_imm8_pais_df8(); +void bclr_imm8_das_df8(); +void bclr_imm8_dais_df8(); +void bclr_imm8_adr16_df8(); +void bclr_imm8_adr32_df8(); +void bset_imm8_ds_df8(); +void bset_imm8_ais_df8(); +void bset_imm8_aips_df8(); +void bset_imm8_pais_df8(); +void bset_imm8_das_df8(); +void bset_imm8_dais_df8(); +void bset_imm8_adr16_df8(); +void bset_imm8_adr32_df8(); +void eori_b_imm8_ds_df8(); +void eori_b_imm8_ais_df8(); +void eori_b_imm8_aips_df8(); +void eori_b_imm8_pais_df8(); +void eori_b_imm8_das_df8(); +void eori_b_imm8_dais_df8(); +void eori_b_imm8_adr16_df8(); +void eori_b_imm8_adr32_df8(); +void eori_imm8_ccr_df8(); +void eori_w_imm16_ds_df8(); +void eori_w_imm16_ais_df8(); +void eori_w_imm16_aips_df8(); +void eori_w_imm16_pais_df8(); +void eori_w_imm16_das_df8(); +void eori_w_imm16_dais_df8(); +void eori_w_imm16_adr16_df8(); +void eori_w_imm16_adr32_df8(); +void eori_i16u_sr_df8(); +void eori_l_imm32_ds_df8(); +void eori_l_imm32_ais_df8(); +void eori_l_imm32_aips_df8(); +void eori_l_imm32_pais_df8(); +void eori_l_imm32_das_df8(); +void eori_l_imm32_dais_df8(); +void eori_l_imm32_adr16_df8(); +void eori_l_imm32_adr32_df8(); +void cmpi_b_imm8_ds_df8(); +void cmpi_b_imm8_ais_df8(); +void cmpi_b_imm8_aips_df8(); +void cmpi_b_imm8_pais_df8(); +void cmpi_b_imm8_das_df8(); +void cmpi_b_imm8_dais_df8(); +void cmpi_b_imm8_adr16_df8(); +void cmpi_b_imm8_adr32_df8(); +void cmpi_w_imm16_ds_df8(); +void cmpi_w_imm16_ais_df8(); +void cmpi_w_imm16_aips_df8(); +void cmpi_w_imm16_pais_df8(); +void cmpi_w_imm16_das_df8(); +void cmpi_w_imm16_dais_df8(); +void cmpi_w_imm16_adr16_df8(); +void cmpi_w_imm16_adr32_df8(); +void cmpi_l_imm32_ds_df8(); +void cmpi_l_imm32_ais_df8(); +void cmpi_l_imm32_aips_df8(); +void cmpi_l_imm32_pais_df8(); +void cmpi_l_imm32_das_df8(); +void cmpi_l_imm32_dais_df8(); +void cmpi_l_imm32_adr16_df8(); +void cmpi_l_imm32_adr32_df8(); +void move_b_ds_dd_df8(); +void move_b_ais_dd_df8(); +void move_b_aips_dd_df8(); +void move_b_pais_dd_df8(); +void move_b_das_dd_df8(); +void move_b_dais_dd_df8(); +void move_b_adr16_dd_df8(); +void move_b_adr32_dd_df8(); +void move_b_dpc_dd_df8(); +void move_b_dpci_dd_df8(); +void move_b_imm8_dd_df8(); +void move_b_ds_aid_df8(); +void move_b_ais_aid_df8(); +void move_b_aips_aid_df8(); +void move_b_pais_aid_df8(); +void move_b_das_aid_df8(); +void move_b_dais_aid_df8(); +void move_b_adr16_aid_df8(); +void move_b_adr32_aid_df8(); +void move_b_dpc_aid_df8(); +void move_b_dpci_aid_df8(); +void move_b_imm8_aid_df8(); +void move_b_ds_aipd_df8(); +void move_b_ais_aipd_df8(); +void move_b_aips_aipd_df8(); +void move_b_pais_aipd_df8(); +void move_b_das_aipd_df8(); +void move_b_dais_aipd_df8(); +void move_b_adr16_aipd_df8(); +void move_b_adr32_aipd_df8(); +void move_b_dpc_aipd_df8(); +void move_b_dpci_aipd_df8(); +void move_b_imm8_aipd_df8(); +void move_b_ds_paid_df8(); +void move_b_ais_paid_df8(); +void move_b_aips_paid_df8(); +void move_b_pais_paid_df8(); +void move_b_das_paid_df8(); +void move_b_dais_paid_df8(); +void move_b_adr16_paid_df8(); +void move_b_adr32_paid_df8(); +void move_b_dpc_paid_df8(); +void move_b_dpci_paid_df8(); +void move_b_imm8_paid_df8(); +void move_b_ds_dad_df8(); +void move_b_ais_dad_df8(); +void move_b_aips_dad_df8(); +void move_b_pais_dad_df8(); +void move_b_das_dad_df8(); +void move_b_dais_dad_df8(); +void move_b_adr16_dad_df8(); +void move_b_adr32_dad_df8(); +void move_b_dpc_dad_df8(); +void move_b_dpci_dad_df8(); +void move_b_imm8_dad_df8(); +void move_b_ds_daid_df8(); +void move_b_ais_daid_df8(); +void move_b_aips_daid_df8(); +void move_b_pais_daid_df8(); +void move_b_das_daid_df8(); +void move_b_dais_daid_df8(); +void move_b_adr16_daid_df8(); +void move_b_adr32_daid_df8(); +void move_b_dpc_daid_df8(); +void move_b_dpci_daid_df8(); +void move_b_imm8_daid_df8(); +void move_b_ds_adr16_df8(); +void move_b_ais_adr16_df8(); +void move_b_aips_adr16_df8(); +void move_b_pais_adr16_df8(); +void move_b_das_adr16_df8(); +void move_b_dais_adr16_df8(); +void move_b_adr16_adr16_df8(); +void move_b_adr32_adr16_df8(); +void move_b_dpc_adr16_df8(); +void move_b_dpci_adr16_df8(); +void move_b_imm8_adr16_df8(); +void move_b_ds_adr32_df8(); +void move_b_ais_adr32_df8(); +void move_b_aips_adr32_df8(); +void move_b_pais_adr32_df8(); +void move_b_das_adr32_df8(); +void move_b_dais_adr32_df8(); +void move_b_adr16_adr32_df8(); +void move_b_adr32_adr32_df8(); +void move_b_dpc_adr32_df8(); +void move_b_dpci_adr32_df8(); +void move_b_imm8_adr32_df8(); +void move_l_ds_dd_df8(); +void move_l_as_dd_df8(); +void move_l_ais_dd_df8(); +void move_l_aips_dd_df8(); +void move_l_pais_dd_df8(); +void move_l_das_dd_df8(); +void move_l_dais_dd_df8(); +void move_l_adr16_dd_df8(); +void move_l_adr32_dd_df8(); +void move_l_dpc_dd_df8(); +void move_l_dpci_dd_df8(); +void move_l_imm32_dd_df8(); +void movea_l_ds_ad_df8(); +void movea_l_as_ad_df8(); +void movea_l_ais_ad_df8(); +void movea_l_aips_ad_df8(); +void movea_l_pais_ad_df8(); +void movea_l_das_ad_df8(); +void movea_l_dais_ad_df8(); +void movea_l_adr16_ad_df8(); +void movea_l_adr32_ad_df8(); +void movea_l_dpc_ad_df8(); +void movea_l_dpci_ad_df8(); +void movea_l_imm32_ad_df8(); +void move_l_ds_aid_df8(); +void move_l_as_aid_df8(); +void move_l_ais_aid_df8(); +void move_l_aips_aid_df8(); +void move_l_pais_aid_df8(); +void move_l_das_aid_df8(); +void move_l_dais_aid_df8(); +void move_l_adr16_aid_df8(); +void move_l_adr32_aid_df8(); +void move_l_dpc_aid_df8(); +void move_l_dpci_aid_df8(); +void move_l_imm32_aid_df8(); +void move_l_ds_aipd_df8(); +void move_l_as_aipd_df8(); +void move_l_ais_aipd_df8(); +void move_l_aips_aipd_df8(); +void move_l_pais_aipd_df8(); +void move_l_das_aipd_df8(); +void move_l_dais_aipd_df8(); +void move_l_adr16_aipd_df8(); +void move_l_adr32_aipd_df8(); +void move_l_dpc_aipd_df8(); +void move_l_dpci_aipd_df8(); +void move_l_imm32_aipd_df8(); +void move_l_ds_paid_df8(); +void move_l_as_paid_df8(); +void move_l_ais_paid_df8(); +void move_l_aips_paid_df8(); +void move_l_pais_paid_df8(); +void move_l_das_paid_df8(); +void move_l_dais_paid_df8(); +void move_l_adr16_paid_df8(); +void move_l_adr32_paid_df8(); +void move_l_dpc_paid_df8(); +void move_l_dpci_paid_df8(); +void move_l_imm32_paid_df8(); +void move_l_ds_dad_df8(); +void move_l_as_dad_df8(); +void move_l_ais_dad_df8(); +void move_l_aips_dad_df8(); +void move_l_pais_dad_df8(); +void move_l_das_dad_df8(); +void move_l_dais_dad_df8(); +void move_l_adr16_dad_df8(); +void move_l_adr32_dad_df8(); +void move_l_dpc_dad_df8(); +void move_l_dpci_dad_df8(); +void move_l_imm32_dad_df8(); +void move_l_ds_daid_df8(); +void move_l_as_daid_df8(); +void move_l_ais_daid_df8(); +void move_l_aips_daid_df8(); +void move_l_pais_daid_df8(); +void move_l_das_daid_df8(); +void move_l_dais_daid_df8(); +void move_l_adr16_daid_df8(); +void move_l_adr32_daid_df8(); +void move_l_dpc_daid_df8(); +void move_l_dpci_daid_df8(); +void move_l_imm32_daid_df8(); +void move_l_ds_adr16_df8(); +void move_l_as_adr16_df8(); +void move_l_ais_adr16_df8(); +void move_l_aips_adr16_df8(); +void move_l_pais_adr16_df8(); +void move_l_das_adr16_df8(); +void move_l_dais_adr16_df8(); +void move_l_adr16_adr16_df8(); +void move_l_adr32_adr16_df8(); +void move_l_dpc_adr16_df8(); +void move_l_dpci_adr16_df8(); +void move_l_imm32_adr16_df8(); +void move_l_ds_adr32_df8(); +void move_l_as_adr32_df8(); +void move_l_ais_adr32_df8(); +void move_l_aips_adr32_df8(); +void move_l_pais_adr32_df8(); +void move_l_das_adr32_df8(); +void move_l_dais_adr32_df8(); +void move_l_adr16_adr32_df8(); +void move_l_adr32_adr32_df8(); +void move_l_dpc_adr32_df8(); +void move_l_dpci_adr32_df8(); +void move_l_imm32_adr32_df8(); +void move_w_ds_dd_df8(); +void move_w_as_dd_df8(); +void move_w_ais_dd_df8(); +void move_w_aips_dd_df8(); +void move_w_pais_dd_df8(); +void move_w_das_dd_df8(); +void move_w_dais_dd_df8(); +void move_w_adr16_dd_df8(); +void move_w_adr32_dd_df8(); +void move_w_dpc_dd_df8(); +void move_w_dpci_dd_df8(); +void move_w_imm16_dd_df8(); +void movea_w_ds_ad_df8(); +void movea_w_as_ad_df8(); +void movea_w_ais_ad_df8(); +void movea_w_aips_ad_df8(); +void movea_w_pais_ad_df8(); +void movea_w_das_ad_df8(); +void movea_w_dais_ad_df8(); +void movea_w_adr16_ad_df8(); +void movea_w_adr32_ad_df8(); +void movea_w_dpc_ad_df8(); +void movea_w_dpci_ad_df8(); +void movea_w_imm16_ad_df8(); +void move_w_ds_aid_df8(); +void move_w_as_aid_df8(); +void move_w_ais_aid_df8(); +void move_w_aips_aid_df8(); +void move_w_pais_aid_df8(); +void move_w_das_aid_df8(); +void move_w_dais_aid_df8(); +void move_w_adr16_aid_df8(); +void move_w_adr32_aid_df8(); +void move_w_dpc_aid_df8(); +void move_w_dpci_aid_df8(); +void move_w_imm16_aid_df8(); +void move_w_ds_aipd_df8(); +void move_w_as_aipd_df8(); +void move_w_ais_aipd_df8(); +void move_w_aips_aipd_df8(); +void move_w_pais_aipd_df8(); +void move_w_das_aipd_df8(); +void move_w_dais_aipd_df8(); +void move_w_adr16_aipd_df8(); +void move_w_adr32_aipd_df8(); +void move_w_dpc_aipd_df8(); +void move_w_dpci_aipd_df8(); +void move_w_imm16_aipd_df8(); +void move_w_ds_paid_df8(); +void move_w_as_paid_df8(); +void move_w_ais_paid_df8(); +void move_w_aips_paid_df8(); +void move_w_pais_paid_df8(); +void move_w_das_paid_df8(); +void move_w_dais_paid_df8(); +void move_w_adr16_paid_df8(); +void move_w_adr32_paid_df8(); +void move_w_dpc_paid_df8(); +void move_w_dpci_paid_df8(); +void move_w_imm16_paid_df8(); +void move_w_ds_dad_df8(); +void move_w_as_dad_df8(); +void move_w_ais_dad_df8(); +void move_w_aips_dad_df8(); +void move_w_pais_dad_df8(); +void move_w_das_dad_df8(); +void move_w_dais_dad_df8(); +void move_w_adr16_dad_df8(); +void move_w_adr32_dad_df8(); +void move_w_dpc_dad_df8(); +void move_w_dpci_dad_df8(); +void move_w_imm16_dad_df8(); +void move_w_ds_daid_df8(); +void move_w_as_daid_df8(); +void move_w_ais_daid_df8(); +void move_w_aips_daid_df8(); +void move_w_pais_daid_df8(); +void move_w_das_daid_df8(); +void move_w_dais_daid_df8(); +void move_w_adr16_daid_df8(); +void move_w_adr32_daid_df8(); +void move_w_dpc_daid_df8(); +void move_w_dpci_daid_df8(); +void move_w_imm16_daid_df8(); +void move_w_ds_adr16_df8(); +void move_w_as_adr16_df8(); +void move_w_ais_adr16_df8(); +void move_w_aips_adr16_df8(); +void move_w_pais_adr16_df8(); +void move_w_das_adr16_df8(); +void move_w_dais_adr16_df8(); +void move_w_adr16_adr16_df8(); +void move_w_adr32_adr16_df8(); +void move_w_dpc_adr16_df8(); +void move_w_dpci_adr16_df8(); +void move_w_imm16_adr16_df8(); +void move_w_ds_adr32_df8(); +void move_w_as_adr32_df8(); +void move_w_ais_adr32_df8(); +void move_w_aips_adr32_df8(); +void move_w_pais_adr32_df8(); +void move_w_das_adr32_df8(); +void move_w_dais_adr32_df8(); +void move_w_adr16_adr32_df8(); +void move_w_adr32_adr32_df8(); +void move_w_dpc_adr32_df8(); +void move_w_dpci_adr32_df8(); +void move_w_imm16_adr32_df8(); +void negx_b_ds_df8(); +void negx_b_ais_df8(); +void negx_b_aips_df8(); +void negx_b_pais_df8(); +void negx_b_das_df8(); +void negx_b_dais_df8(); +void negx_b_adr16_df8(); +void negx_b_adr32_df8(); +void negx_w_ds_df8(); +void negx_w_ais_df8(); +void negx_w_aips_df8(); +void negx_w_pais_df8(); +void negx_w_das_df8(); +void negx_w_dais_df8(); +void negx_w_adr16_df8(); +void negx_w_adr32_df8(); +void negx_l_ds_df8(); +void negx_l_ais_df8(); +void negx_l_aips_df8(); +void negx_l_pais_df8(); +void negx_l_das_df8(); +void negx_l_dais_df8(); +void negx_l_adr16_df8(); +void negx_l_adr32_df8(); +void move_sr_ds_df8(); +void move_sr_ais_df8(); +void move_sr_aips_df8(); +void move_sr_pais_df8(); +void move_sr_das_df8(); +void move_sr_dais_df8(); +void move_sr_adr16_df8(); +void move_sr_adr32_df8(); +void chk_w_ds_dd_df8(); +void chk_w_ais_dd_df8(); +void chk_w_aips_dd_df8(); +void chk_w_pais_dd_df8(); +void chk_w_das_dd_df8(); +void chk_w_dais_dd_df8(); +void chk_w_adr16_dd_df8(); +void chk_w_adr32_dd_df8(); +void chk_w_dpc_dd_df8(); +void chk_w_dpci_dd_df8(); +void chk_w_imm16_dd_df8(); +void lea_ais_ad_df8(); +void lea_das_ad_df8(); +void lea_dais_ad_df8(); +void lea_adr16_ad_df8(); +void lea_adr32_ad_df8(); +void lea_dpc_ad_df8(); +void lea_dpci_ad_df8(); +void clr_b_ds_df8(); +void clr_b_ais_df8(); +void clr_b_aips_df8(); +void clr_b_pais_df8(); +void clr_b_das_df8(); +void clr_b_dais_df8(); +void clr_b_adr16_df8(); +void clr_b_adr32_df8(); +void clr_w_ds_df8(); +void clr_w_ais_df8(); +void clr_w_aips_df8(); +void clr_w_pais_df8(); +void clr_w_das_df8(); +void clr_w_dais_df8(); +void clr_w_adr16_df8(); +void clr_w_adr32_df8(); +void clr_l_ds_df8(); +void clr_l_ais_df8(); +void clr_l_aips_df8(); +void clr_l_pais_df8(); +void clr_l_das_df8(); +void clr_l_dais_df8(); +void clr_l_adr16_df8(); +void clr_l_adr32_df8(); +void neg_b_ds_df8(); +void neg_b_ais_df8(); +void neg_b_aips_df8(); +void neg_b_pais_df8(); +void neg_b_das_df8(); +void neg_b_dais_df8(); +void neg_b_adr16_df8(); +void neg_b_adr32_df8(); +void neg_w_ds_df8(); +void neg_w_ais_df8(); +void neg_w_aips_df8(); +void neg_w_pais_df8(); +void neg_w_das_df8(); +void neg_w_dais_df8(); +void neg_w_adr16_df8(); +void neg_w_adr32_df8(); +void neg_l_ds_df8(); +void neg_l_ais_df8(); +void neg_l_aips_df8(); +void neg_l_pais_df8(); +void neg_l_das_df8(); +void neg_l_dais_df8(); +void neg_l_adr16_df8(); +void neg_l_adr32_df8(); +void move_ds_ccr_df8(); +void move_ais_ccr_df8(); +void move_aips_ccr_df8(); +void move_pais_ccr_df8(); +void move_das_ccr_df8(); +void move_dais_ccr_df8(); +void move_adr16_ccr_df8(); +void move_adr32_ccr_df8(); +void move_dpc_ccr_df8(); +void move_dpci_ccr_df8(); +void move_imm8_ccr_df8(); +void not_b_ds_df8(); +void not_b_ais_df8(); +void not_b_aips_df8(); +void not_b_pais_df8(); +void not_b_das_df8(); +void not_b_dais_df8(); +void not_b_adr16_df8(); +void not_b_adr32_df8(); +void not_w_ds_df8(); +void not_w_ais_df8(); +void not_w_aips_df8(); +void not_w_pais_df8(); +void not_w_das_df8(); +void not_w_dais_df8(); +void not_w_adr16_df8(); +void not_w_adr32_df8(); +void not_l_ds_df8(); +void not_l_ais_df8(); +void not_l_aips_df8(); +void not_l_pais_df8(); +void not_l_das_df8(); +void not_l_dais_df8(); +void not_l_adr16_df8(); +void not_l_adr32_df8(); +void move_ds_sr_df8(); +void move_ais_sr_df8(); +void move_aips_sr_df8(); +void move_pais_sr_df8(); +void move_das_sr_df8(); +void move_dais_sr_df8(); +void move_adr16_sr_df8(); +void move_adr32_sr_df8(); +void move_dpc_sr_df8(); +void move_dpci_sr_df8(); +void move_i16u_sr_df8(); +void nbcd_b_ds_df8(); +void nbcd_b_ais_df8(); +void nbcd_b_aips_df8(); +void nbcd_b_pais_df8(); +void nbcd_b_das_df8(); +void nbcd_b_dais_df8(); +void nbcd_b_adr16_df8(); +void nbcd_b_adr32_df8(); +void swap_ds_df8(); +void pea_ais_df8(); +void pea_das_df8(); +void pea_dais_df8(); +void pea_adr16_df8(); +void pea_adr32_df8(); +void pea_dpc_df8(); +void pea_dpci_df8(); +void ext_w_ds_df8(); +void movem_w_list_ais_df8(); +void movem_w_listp_pais_df8(); +void movem_w_list_das_df8(); +void movem_w_list_dais_df8(); +void movem_w_list_adr16_df8(); +void movem_w_list_adr32_df8(); +void ext_l_ds_df8(); +void movem_l_list_ais_df8(); +void movem_l_listp_pais_df8(); +void movem_l_list_das_df8(); +void movem_l_list_dais_df8(); +void movem_l_list_adr16_df8(); +void movem_l_list_adr32_df8(); +void tst_b_ds_df8(); +void tst_b_ais_df8(); +void tst_b_aips_df8(); +void tst_b_pais_df8(); +void tst_b_das_df8(); +void tst_b_dais_df8(); +void tst_b_adr16_df8(); +void tst_b_adr32_df8(); +void tst_w_ds_df8(); +void tst_w_ais_df8(); +void tst_w_aips_df8(); +void tst_w_pais_df8(); +void tst_w_das_df8(); +void tst_w_dais_df8(); +void tst_w_adr16_df8(); +void tst_w_adr32_df8(); +void tst_l_ds_df8(); +void tst_l_ais_df8(); +void tst_l_aips_df8(); +void tst_l_pais_df8(); +void tst_l_das_df8(); +void tst_l_dais_df8(); +void tst_l_adr16_df8(); +void tst_l_adr32_df8(); +void tas_ds_df8(); +void tas_ais_df8(); +void tas_aips_df8(); +void tas_pais_df8(); +void tas_das_df8(); +void tas_dais_df8(); +void tas_adr16_df8(); +void tas_adr32_df8(); +void movem_w_ais_list_df8(); +void movem_w_aips_list_df8(); +void movem_w_das_list_df8(); +void movem_w_dais_list_df8(); +void movem_w_adr16_list_df8(); +void movem_w_adr32_list_df8(); +void movem_w_dpc_list_df8(); +void movem_w_dpci_list_df8(); +void movem_l_ais_list_df8(); +void movem_l_aips_list_df8(); +void movem_l_das_list_df8(); +void movem_l_dais_list_df8(); +void movem_l_adr16_list_df8(); +void movem_l_adr32_list_df8(); +void movem_l_dpc_list_df8(); +void movem_l_dpci_list_df8(); +void trap_imm4_df8(); +void link_as_imm16_df8(); +void unlk_as_df8(); +void move_as_usp_df8(); +void move_usp_as_df8(); +void reset_df8(); +void nop_df8(); +void stop_i16u_df8(); +void rte_df8(); +void rts_df8(); +void trapv_df8(); +void rtr_df8(); +void jsr_ais_df8(); +void jsr_das_df8(); +void jsr_dais_df8(); +void jsr_adr16_df8(); +void jsr_adr32_df8(); +void jsr_dpc_df8(); +void jsr_dpci_df8(); +void jmp_ais_df8(); +void jmp_das_df8(); +void jmp_dais_df8(); +void jmp_adr16_df8(); +void jmp_adr32_df8(); +void jmp_dpc_df8(); +void jmp_dpci_df8(); +void addq_b_imm3_ds_df8(); +void addq_b_imm3_ais_df8(); +void addq_b_imm3_aips_df8(); +void addq_b_imm3_pais_df8(); +void addq_b_imm3_das_df8(); +void addq_b_imm3_dais_df8(); +void addq_b_imm3_adr16_df8(); +void addq_b_imm3_adr32_df8(); +void addq_w_imm3_ds_df8(); +void addq_w_imm3_as_df8(); +void addq_w_imm3_ais_df8(); +void addq_w_imm3_aips_df8(); +void addq_w_imm3_pais_df8(); +void addq_w_imm3_das_df8(); +void addq_w_imm3_dais_df8(); +void addq_w_imm3_adr16_df8(); +void addq_w_imm3_adr32_df8(); +void addq_l_imm3_ds_df8(); +void addq_l_imm3_as_df8(); +void addq_l_imm3_ais_df8(); +void addq_l_imm3_aips_df8(); +void addq_l_imm3_pais_df8(); +void addq_l_imm3_das_df8(); +void addq_l_imm3_dais_df8(); +void addq_l_imm3_adr16_df8(); +void addq_l_imm3_adr32_df8(); +void st_ds_df8(); +void dbt_ds_rel16_df8(); +void st_ais_df8(); +void st_aips_df8(); +void st_pais_df8(); +void st_das_df8(); +void st_dais_df8(); +void st_adr16_df8(); +void st_adr32_df8(); +void subq_b_imm3_ds_df8(); +void subq_b_imm3_ais_df8(); +void subq_b_imm3_aips_df8(); +void subq_b_imm3_pais_df8(); +void subq_b_imm3_das_df8(); +void subq_b_imm3_dais_df8(); +void subq_b_imm3_adr16_df8(); +void subq_b_imm3_adr32_df8(); +void subq_w_imm3_ds_df8(); +void subq_w_imm3_as_df8(); +void subq_w_imm3_ais_df8(); +void subq_w_imm3_aips_df8(); +void subq_w_imm3_pais_df8(); +void subq_w_imm3_das_df8(); +void subq_w_imm3_dais_df8(); +void subq_w_imm3_adr16_df8(); +void subq_w_imm3_adr32_df8(); +void subq_l_imm3_ds_df8(); +void subq_l_imm3_as_df8(); +void subq_l_imm3_ais_df8(); +void subq_l_imm3_aips_df8(); +void subq_l_imm3_pais_df8(); +void subq_l_imm3_das_df8(); +void subq_l_imm3_dais_df8(); +void subq_l_imm3_adr16_df8(); +void subq_l_imm3_adr32_df8(); +void sf_ds_df8(); +void dbra_ds_rel16_df8(); +void sf_ais_df8(); +void sf_aips_df8(); +void sf_pais_df8(); +void sf_das_df8(); +void sf_dais_df8(); +void sf_adr16_df8(); +void sf_adr32_df8(); +void shi_ds_df8(); +void dbhi_ds_rel16_df8(); +void shi_ais_df8(); +void shi_aips_df8(); +void shi_pais_df8(); +void shi_das_df8(); +void shi_dais_df8(); +void shi_adr16_df8(); +void shi_adr32_df8(); +void sls_ds_df8(); +void dbls_ds_rel16_df8(); +void sls_ais_df8(); +void sls_aips_df8(); +void sls_pais_df8(); +void sls_das_df8(); +void sls_dais_df8(); +void sls_adr16_df8(); +void sls_adr32_df8(); +void scc_ds_df8(); +void dbcc_ds_rel16_df8(); +void scc_ais_df8(); +void scc_aips_df8(); +void scc_pais_df8(); +void scc_das_df8(); +void scc_dais_df8(); +void scc_adr16_df8(); +void scc_adr32_df8(); +void scs_ds_df8(); +void dbcs_ds_rel16_df8(); +void scs_ais_df8(); +void scs_aips_df8(); +void scs_pais_df8(); +void scs_das_df8(); +void scs_dais_df8(); +void scs_adr16_df8(); +void scs_adr32_df8(); +void sne_ds_df8(); +void dbne_ds_rel16_df8(); +void sne_ais_df8(); +void sne_aips_df8(); +void sne_pais_df8(); +void sne_das_df8(); +void sne_dais_df8(); +void sne_adr16_df8(); +void sne_adr32_df8(); +void seq_ds_df8(); +void dbeq_ds_rel16_df8(); +void seq_ais_df8(); +void seq_aips_df8(); +void seq_pais_df8(); +void seq_das_df8(); +void seq_dais_df8(); +void seq_adr16_df8(); +void seq_adr32_df8(); +void svc_ds_df8(); +void dbvc_ds_rel16_df8(); +void svc_ais_df8(); +void svc_aips_df8(); +void svc_pais_df8(); +void svc_das_df8(); +void svc_dais_df8(); +void svc_adr16_df8(); +void svc_adr32_df8(); +void svs_ds_df8(); +void dbvs_ds_rel16_df8(); +void svs_ais_df8(); +void svs_aips_df8(); +void svs_pais_df8(); +void svs_das_df8(); +void svs_dais_df8(); +void svs_adr16_df8(); +void svs_adr32_df8(); +void spl_ds_df8(); +void dbpl_ds_rel16_df8(); +void spl_ais_df8(); +void spl_aips_df8(); +void spl_pais_df8(); +void spl_das_df8(); +void spl_dais_df8(); +void spl_adr16_df8(); +void spl_adr32_df8(); +void smi_ds_df8(); +void dbmi_ds_rel16_df8(); +void smi_ais_df8(); +void smi_aips_df8(); +void smi_pais_df8(); +void smi_das_df8(); +void smi_dais_df8(); +void smi_adr16_df8(); +void smi_adr32_df8(); +void sge_ds_df8(); +void dbge_ds_rel16_df8(); +void sge_ais_df8(); +void sge_aips_df8(); +void sge_pais_df8(); +void sge_das_df8(); +void sge_dais_df8(); +void sge_adr16_df8(); +void sge_adr32_df8(); +void slt_ds_df8(); +void dblt_ds_rel16_df8(); +void slt_ais_df8(); +void slt_aips_df8(); +void slt_pais_df8(); +void slt_das_df8(); +void slt_dais_df8(); +void slt_adr16_df8(); +void slt_adr32_df8(); +void sgt_ds_df8(); +void dbgt_ds_rel16_df8(); +void sgt_ais_df8(); +void sgt_aips_df8(); +void sgt_pais_df8(); +void sgt_das_df8(); +void sgt_dais_df8(); +void sgt_adr16_df8(); +void sgt_adr32_df8(); +void sle_ds_df8(); +void dble_ds_rel16_df8(); +void sle_ais_df8(); +void sle_aips_df8(); +void sle_pais_df8(); +void sle_das_df8(); +void sle_dais_df8(); +void sle_adr16_df8(); +void sle_adr32_df8(); +void bra_rel16_df8(); +void bra_rel8_df8(); +void bsr_rel16_df8(); +void bsr_rel8_df8(); +void bhi_rel16_df8(); +void bhi_rel8_df8(); +void bls_rel16_df8(); +void bls_rel8_df8(); +void bcc_rel16_df8(); +void bcc_rel8_df8(); +void bcs_rel16_df8(); +void bcs_rel8_df8(); +void bne_rel16_df8(); +void bne_rel8_df8(); +void beq_rel16_df8(); +void beq_rel8_df8(); +void bvc_rel16_df8(); +void bvc_rel8_df8(); +void bvs_rel16_df8(); +void bvs_rel8_df8(); +void bpl_rel16_df8(); +void bpl_rel8_df8(); +void bmi_rel16_df8(); +void bmi_rel8_df8(); +void bge_rel16_df8(); +void bge_rel8_df8(); +void blt_rel16_df8(); +void blt_rel8_df8(); +void bgt_rel16_df8(); +void bgt_rel8_df8(); +void ble_rel16_df8(); +void ble_rel8_df8(); +void moveq_imm8o_dd_df8(); +void or_b_ds_dd_df8(); +void or_b_ais_dd_df8(); +void or_b_aips_dd_df8(); +void or_b_pais_dd_df8(); +void or_b_das_dd_df8(); +void or_b_dais_dd_df8(); +void or_b_adr16_dd_df8(); +void or_b_adr32_dd_df8(); +void or_b_dpc_dd_df8(); +void or_b_dpci_dd_df8(); +void or_b_imm8_dd_df8(); +void or_w_ds_dd_df8(); +void or_w_ais_dd_df8(); +void or_w_aips_dd_df8(); +void or_w_pais_dd_df8(); +void or_w_das_dd_df8(); +void or_w_dais_dd_df8(); +void or_w_adr16_dd_df8(); +void or_w_adr32_dd_df8(); +void or_w_dpc_dd_df8(); +void or_w_dpci_dd_df8(); +void or_w_imm16_dd_df8(); +void or_l_ds_dd_df8(); +void or_l_ais_dd_df8(); +void or_l_aips_dd_df8(); +void or_l_pais_dd_df8(); +void or_l_das_dd_df8(); +void or_l_dais_dd_df8(); +void or_l_adr16_dd_df8(); +void or_l_adr32_dd_df8(); +void or_l_dpc_dd_df8(); +void or_l_dpci_dd_df8(); +void or_l_imm32_dd_df8(); +void divu_w_ds_dd_df8(); +void divu_w_ais_dd_df8(); +void divu_w_aips_dd_df8(); +void divu_w_pais_dd_df8(); +void divu_w_das_dd_df8(); +void divu_w_dais_dd_df8(); +void divu_w_adr16_dd_df8(); +void divu_w_adr32_dd_df8(); +void divu_w_dpc_dd_df8(); +void divu_w_dpci_dd_df8(); +void divu_w_imm16_dd_df8(); +void sbcd_ds_dd_df8(); +void sbcd_pais_paid_df8(); +void or_b_dd_ais_df8(); +void or_b_dd_aips_df8(); +void or_b_dd_pais_df8(); +void or_b_dd_das_df8(); +void or_b_dd_dais_df8(); +void or_b_dd_adr16_df8(); +void or_b_dd_adr32_df8(); +void or_w_dd_ais_df8(); +void or_w_dd_aips_df8(); +void or_w_dd_pais_df8(); +void or_w_dd_das_df8(); +void or_w_dd_dais_df8(); +void or_w_dd_adr16_df8(); +void or_w_dd_adr32_df8(); +void or_l_dd_ais_df8(); +void or_l_dd_aips_df8(); +void or_l_dd_pais_df8(); +void or_l_dd_das_df8(); +void or_l_dd_dais_df8(); +void or_l_dd_adr16_df8(); +void or_l_dd_adr32_df8(); +void divs_w_ds_dd_df8(); +void divs_w_ais_dd_df8(); +void divs_w_aips_dd_df8(); +void divs_w_pais_dd_df8(); +void divs_w_das_dd_df8(); +void divs_w_dais_dd_df8(); +void divs_w_adr16_dd_df8(); +void divs_w_adr32_dd_df8(); +void divs_w_dpc_dd_df8(); +void divs_w_dpci_dd_df8(); +void divs_w_imm16_dd_df8(); +void sub_b_ds_dd_df8(); +void sub_b_ais_dd_df8(); +void sub_b_aips_dd_df8(); +void sub_b_pais_dd_df8(); +void sub_b_das_dd_df8(); +void sub_b_dais_dd_df8(); +void sub_b_adr16_dd_df8(); +void sub_b_adr32_dd_df8(); +void sub_b_dpc_dd_df8(); +void sub_b_dpci_dd_df8(); +void sub_b_imm8_dd_df8(); +void sub_w_ds_dd_df8(); +void sub_w_as_dd_df8(); +void sub_w_ais_dd_df8(); +void sub_w_aips_dd_df8(); +void sub_w_pais_dd_df8(); +void sub_w_das_dd_df8(); +void sub_w_dais_dd_df8(); +void sub_w_adr16_dd_df8(); +void sub_w_adr32_dd_df8(); +void sub_w_dpc_dd_df8(); +void sub_w_dpci_dd_df8(); +void sub_w_imm16_dd_df8(); +void sub_l_ds_dd_df8(); +void sub_l_as_dd_df8(); +void sub_l_ais_dd_df8(); +void sub_l_aips_dd_df8(); +void sub_l_pais_dd_df8(); +void sub_l_das_dd_df8(); +void sub_l_dais_dd_df8(); +void sub_l_adr16_dd_df8(); +void sub_l_adr32_dd_df8(); +void sub_l_dpc_dd_df8(); +void sub_l_dpci_dd_df8(); +void sub_l_imm32_dd_df8(); +void suba_w_ds_ad_df8(); +void suba_w_as_ad_df8(); +void suba_w_ais_ad_df8(); +void suba_w_aips_ad_df8(); +void suba_w_pais_ad_df8(); +void suba_w_das_ad_df8(); +void suba_w_dais_ad_df8(); +void suba_w_adr16_ad_df8(); +void suba_w_adr32_ad_df8(); +void suba_w_dpc_ad_df8(); +void suba_w_dpci_ad_df8(); +void suba_w_imm16_ad_df8(); +void subx_b_ds_dd_df8(); +void subx_b_pais_paid_df8(); +void sub_b_dd_ais_df8(); +void sub_b_dd_aips_df8(); +void sub_b_dd_pais_df8(); +void sub_b_dd_das_df8(); +void sub_b_dd_dais_df8(); +void sub_b_dd_adr16_df8(); +void sub_b_dd_adr32_df8(); +void subx_w_ds_dd_df8(); +void subx_w_pais_paid_df8(); +void sub_w_dd_ais_df8(); +void sub_w_dd_aips_df8(); +void sub_w_dd_pais_df8(); +void sub_w_dd_das_df8(); +void sub_w_dd_dais_df8(); +void sub_w_dd_adr16_df8(); +void sub_w_dd_adr32_df8(); +void subx_l_ds_dd_df8(); +void subx_l_pais_paid_df8(); +void sub_l_dd_ais_df8(); +void sub_l_dd_aips_df8(); +void sub_l_dd_pais_df8(); +void sub_l_dd_das_df8(); +void sub_l_dd_dais_df8(); +void sub_l_dd_adr16_df8(); +void sub_l_dd_adr32_df8(); +void suba_l_ds_ad_df8(); +void suba_l_as_ad_df8(); +void suba_l_ais_ad_df8(); +void suba_l_aips_ad_df8(); +void suba_l_pais_ad_df8(); +void suba_l_das_ad_df8(); +void suba_l_dais_ad_df8(); +void suba_l_adr16_ad_df8(); +void suba_l_adr32_ad_df8(); +void suba_l_dpc_ad_df8(); +void suba_l_dpci_ad_df8(); +void suba_l_imm32_ad_df8(); +void cmp_b_ds_dd_df8(); +void cmp_b_ais_dd_df8(); +void cmp_b_aips_dd_df8(); +void cmp_b_pais_dd_df8(); +void cmp_b_das_dd_df8(); +void cmp_b_dais_dd_df8(); +void cmp_b_adr16_dd_df8(); +void cmp_b_adr32_dd_df8(); +void cmp_b_dpc_dd_df8(); +void cmp_b_dpci_dd_df8(); +void cmp_b_imm8_dd_df8(); +void cmp_w_ds_dd_df8(); +void cmp_w_as_dd_df8(); +void cmp_w_ais_dd_df8(); +void cmp_w_aips_dd_df8(); +void cmp_w_pais_dd_df8(); +void cmp_w_das_dd_df8(); +void cmp_w_dais_dd_df8(); +void cmp_w_adr16_dd_df8(); +void cmp_w_adr32_dd_df8(); +void cmp_w_dpc_dd_df8(); +void cmp_w_dpci_dd_df8(); +void cmp_w_imm16_dd_df8(); +void cmp_l_ds_dd_df8(); +void cmp_l_as_dd_df8(); +void cmp_l_ais_dd_df8(); +void cmp_l_aips_dd_df8(); +void cmp_l_pais_dd_df8(); +void cmp_l_das_dd_df8(); +void cmp_l_dais_dd_df8(); +void cmp_l_adr16_dd_df8(); +void cmp_l_adr32_dd_df8(); +void cmp_l_dpc_dd_df8(); +void cmp_l_dpci_dd_df8(); +void cmp_l_imm32_dd_df8(); +void cmpa_w_ds_ad_df8(); +void cmpa_w_as_ad_df8(); +void cmpa_w_ais_ad_df8(); +void cmpa_w_aips_ad_df8(); +void cmpa_w_pais_ad_df8(); +void cmpa_w_das_ad_df8(); +void cmpa_w_dais_ad_df8(); +void cmpa_w_adr16_ad_df8(); +void cmpa_w_adr32_ad_df8(); +void cmpa_w_dpc_ad_df8(); +void cmpa_w_dpci_ad_df8(); +void cmpa_w_imm16_ad_df8(); +void eor_b_dd_ds_df8(); +void cmpm_b_aips_aipd_df8(); +void eor_b_dd_ais_df8(); +void eor_b_dd_aips_df8(); +void eor_b_dd_pais_df8(); +void eor_b_dd_das_df8(); +void eor_b_dd_dais_df8(); +void eor_b_dd_adr16_df8(); +void eor_b_dd_adr32_df8(); +void eor_w_dd_ds_df8(); +void cmpm_w_aips_aipd_df8(); +void eor_w_dd_ais_df8(); +void eor_w_dd_aips_df8(); +void eor_w_dd_pais_df8(); +void eor_w_dd_das_df8(); +void eor_w_dd_dais_df8(); +void eor_w_dd_adr16_df8(); +void eor_w_dd_adr32_df8(); +void eor_l_dd_ds_df8(); +void cmpm_l_aips_aipd_df8(); +void eor_l_dd_ais_df8(); +void eor_l_dd_aips_df8(); +void eor_l_dd_pais_df8(); +void eor_l_dd_das_df8(); +void eor_l_dd_dais_df8(); +void eor_l_dd_adr16_df8(); +void eor_l_dd_adr32_df8(); +void cmpa_l_ds_ad_df8(); +void cmpa_l_as_ad_df8(); +void cmpa_l_ais_ad_df8(); +void cmpa_l_aips_ad_df8(); +void cmpa_l_pais_ad_df8(); +void cmpa_l_das_ad_df8(); +void cmpa_l_dais_ad_df8(); +void cmpa_l_adr16_ad_df8(); +void cmpa_l_adr32_ad_df8(); +void cmpa_l_dpc_ad_df8(); +void cmpa_l_dpci_ad_df8(); +void cmpa_l_imm32_ad_df8(); +void and_b_ds_dd_df8(); +void and_b_ais_dd_df8(); +void and_b_aips_dd_df8(); +void and_b_pais_dd_df8(); +void and_b_das_dd_df8(); +void and_b_dais_dd_df8(); +void and_b_adr16_dd_df8(); +void and_b_adr32_dd_df8(); +void and_b_dpc_dd_df8(); +void and_b_dpci_dd_df8(); +void and_b_imm8_dd_df8(); +void and_w_ds_dd_df8(); +void and_w_ais_dd_df8(); +void and_w_aips_dd_df8(); +void and_w_pais_dd_df8(); +void and_w_das_dd_df8(); +void and_w_dais_dd_df8(); +void and_w_adr16_dd_df8(); +void and_w_adr32_dd_df8(); +void and_w_dpc_dd_df8(); +void and_w_dpci_dd_df8(); +void and_w_imm16_dd_df8(); +void and_l_ds_dd_df8(); +void and_l_ais_dd_df8(); +void and_l_aips_dd_df8(); +void and_l_pais_dd_df8(); +void and_l_das_dd_df8(); +void and_l_dais_dd_df8(); +void and_l_adr16_dd_df8(); +void and_l_adr32_dd_df8(); +void and_l_dpc_dd_df8(); +void and_l_dpci_dd_df8(); +void and_l_imm32_dd_df8(); +void mulu_w_ds_dd_df8(); +void mulu_w_ais_dd_df8(); +void mulu_w_aips_dd_df8(); +void mulu_w_pais_dd_df8(); +void mulu_w_das_dd_df8(); +void mulu_w_dais_dd_df8(); +void mulu_w_adr16_dd_df8(); +void mulu_w_adr32_dd_df8(); +void mulu_w_dpc_dd_df8(); +void mulu_w_dpci_dd_df8(); +void mulu_w_imm16_dd_df8(); +void abcd_ds_dd_df8(); +void abcd_pais_paid_df8(); +void and_b_dd_ais_df8(); +void and_b_dd_aips_df8(); +void and_b_dd_pais_df8(); +void and_b_dd_das_df8(); +void and_b_dd_dais_df8(); +void and_b_dd_adr16_df8(); +void and_b_dd_adr32_df8(); +void exg_dd_ds_df8(); +void exg_ad_as_df8(); +void and_w_dd_ais_df8(); +void and_w_dd_aips_df8(); +void and_w_dd_pais_df8(); +void and_w_dd_das_df8(); +void and_w_dd_dais_df8(); +void and_w_dd_adr16_df8(); +void and_w_dd_adr32_df8(); +void exg_dd_as_df8(); +void and_l_dd_ais_df8(); +void and_l_dd_aips_df8(); +void and_l_dd_pais_df8(); +void and_l_dd_das_df8(); +void and_l_dd_dais_df8(); +void and_l_dd_adr16_df8(); +void and_l_dd_adr32_df8(); +void muls_w_ds_dd_df8(); +void muls_w_ais_dd_df8(); +void muls_w_aips_dd_df8(); +void muls_w_pais_dd_df8(); +void muls_w_das_dd_df8(); +void muls_w_dais_dd_df8(); +void muls_w_adr16_dd_df8(); +void muls_w_adr32_dd_df8(); +void muls_w_dpc_dd_df8(); +void muls_w_dpci_dd_df8(); +void muls_w_imm16_dd_df8(); +void add_b_ds_dd_df8(); +void add_b_ais_dd_df8(); +void add_b_aips_dd_df8(); +void add_b_pais_dd_df8(); +void add_b_das_dd_df8(); +void add_b_dais_dd_df8(); +void add_b_adr16_dd_df8(); +void add_b_adr32_dd_df8(); +void add_b_dpc_dd_df8(); +void add_b_dpci_dd_df8(); +void add_b_imm8_dd_df8(); +void add_w_ds_dd_df8(); +void add_w_as_dd_df8(); +void add_w_ais_dd_df8(); +void add_w_aips_dd_df8(); +void add_w_pais_dd_df8(); +void add_w_das_dd_df8(); +void add_w_dais_dd_df8(); +void add_w_adr16_dd_df8(); +void add_w_adr32_dd_df8(); +void add_w_dpc_dd_df8(); +void add_w_dpci_dd_df8(); +void add_w_imm16_dd_df8(); +void add_l_ds_dd_df8(); +void add_l_as_dd_df8(); +void add_l_ais_dd_df8(); +void add_l_aips_dd_df8(); +void add_l_pais_dd_df8(); +void add_l_das_dd_df8(); +void add_l_dais_dd_df8(); +void add_l_adr16_dd_df8(); +void add_l_adr32_dd_df8(); +void add_l_dpc_dd_df8(); +void add_l_dpci_dd_df8(); +void add_l_imm32_dd_df8(); +void adda_w_ds_ad_df8(); +void adda_w_as_ad_df8(); +void adda_w_ais_ad_df8(); +void adda_w_aips_ad_df8(); +void adda_w_pais_ad_df8(); +void adda_w_das_ad_df8(); +void adda_w_dais_ad_df8(); +void adda_w_adr16_ad_df8(); +void adda_w_adr32_ad_df8(); +void adda_w_dpc_ad_df8(); +void adda_w_dpci_ad_df8(); +void adda_w_imm16_ad_df8(); +void addx_b_ds_dd_df8(); +void addx_b_pais_paid_df8(); +void add_b_dd_ais_df8(); +void add_b_dd_aips_df8(); +void add_b_dd_pais_df8(); +void add_b_dd_das_df8(); +void add_b_dd_dais_df8(); +void add_b_dd_adr16_df8(); +void add_b_dd_adr32_df8(); +void addx_w_ds_dd_df8(); +void addx_w_pais_paid_df8(); +void add_w_dd_ais_df8(); +void add_w_dd_aips_df8(); +void add_w_dd_pais_df8(); +void add_w_dd_das_df8(); +void add_w_dd_dais_df8(); +void add_w_dd_adr16_df8(); +void add_w_dd_adr32_df8(); +void addx_l_ds_dd_df8(); +void addx_l_pais_paid_df8(); +void add_l_dd_ais_df8(); +void add_l_dd_aips_df8(); +void add_l_dd_pais_df8(); +void add_l_dd_das_df8(); +void add_l_dd_dais_df8(); +void add_l_dd_adr16_df8(); +void add_l_dd_adr32_df8(); +void adda_l_ds_ad_df8(); +void adda_l_as_ad_df8(); +void adda_l_ais_ad_df8(); +void adda_l_aips_ad_df8(); +void adda_l_pais_ad_df8(); +void adda_l_das_ad_df8(); +void adda_l_dais_ad_df8(); +void adda_l_adr16_ad_df8(); +void adda_l_adr32_ad_df8(); +void adda_l_dpc_ad_df8(); +void adda_l_dpci_ad_df8(); +void adda_l_imm32_ad_df8(); +void asr_b_imm3_ds_df8(); +void lsr_b_imm3_ds_df8(); +void roxr_b_imm3_ds_df8(); +void ror_b_imm3_ds_df8(); +void asr_b_dd_ds_df8(); +void lsr_b_dd_ds_df8(); +void roxr_b_dd_ds_df8(); +void ror_b_dd_ds_df8(); +void asr_w_imm3_ds_df8(); +void lsr_w_imm3_ds_df8(); +void roxr_w_imm3_ds_df8(); +void ror_w_imm3_ds_df8(); +void asr_w_dd_ds_df8(); +void lsr_w_dd_ds_df8(); +void roxr_w_dd_ds_df8(); +void ror_w_dd_ds_df8(); +void asr_l_imm3_ds_df8(); +void lsr_l_imm3_ds_df8(); +void roxr_l_imm3_ds_df8(); +void ror_l_imm3_ds_df8(); +void asr_l_dd_ds_df8(); +void lsr_l_dd_ds_df8(); +void roxr_l_dd_ds_df8(); +void ror_l_dd_ds_df8(); +void asr_ais_df8(); +void asr_aips_df8(); +void asr_pais_df8(); +void asr_das_df8(); +void asr_dais_df8(); +void asr_adr16_df8(); +void asr_adr32_df8(); +void asl_b_imm3_ds_df8(); +void lsl_b_imm3_ds_df8(); +void roxl_b_imm3_ds_df8(); +void rol_b_imm3_ds_df8(); +void asl_b_dd_ds_df8(); +void lsl_b_dd_ds_df8(); +void roxl_b_dd_ds_df8(); +void rol_b_dd_ds_df8(); +void asl_w_imm3_ds_df8(); +void lsl_w_imm3_ds_df8(); +void roxl_w_imm3_ds_df8(); +void rol_w_imm3_ds_df8(); +void asl_w_dd_ds_df8(); +void lsl_w_dd_ds_df8(); +void roxl_w_dd_ds_df8(); +void rol_w_dd_ds_df8(); +void asl_l_imm3_ds_df8(); +void lsl_l_imm3_ds_df8(); +void roxl_l_imm3_ds_df8(); +void rol_l_imm3_ds_df8(); +void asl_l_dd_ds_df8(); +void lsl_l_dd_ds_df8(); +void roxl_l_dd_ds_df8(); +void rol_l_dd_ds_df8(); +void asl_ais_df8(); +void asl_aips_df8(); +void asl_pais_df8(); +void asl_das_df8(); +void asl_dais_df8(); +void asl_adr16_df8(); +void asl_adr32_df8(); +void lsr_ais_df8(); +void lsr_aips_df8(); +void lsr_pais_df8(); +void lsr_das_df8(); +void lsr_dais_df8(); +void lsr_adr16_df8(); +void lsr_adr32_df8(); +void lsl_ais_df8(); +void lsl_aips_df8(); +void lsl_pais_df8(); +void lsl_das_df8(); +void lsl_dais_df8(); +void lsl_adr16_df8(); +void lsl_adr32_df8(); +void roxr_ais_df8(); +void roxr_aips_df8(); +void roxr_pais_df8(); +void roxr_das_df8(); +void roxr_dais_df8(); +void roxr_adr16_df8(); +void roxr_adr32_df8(); +void roxl_ais_df8(); +void roxl_aips_df8(); +void roxl_pais_df8(); +void roxl_das_df8(); +void roxl_dais_df8(); +void roxl_adr16_df8(); +void roxl_adr32_df8(); +void ror_ais_df8(); +void ror_aips_df8(); +void ror_pais_df8(); +void ror_das_df8(); +void ror_dais_df8(); +void ror_adr16_df8(); +void ror_adr32_df8(); +void rol_ais_df8(); +void rol_aips_df8(); +void rol_pais_df8(); +void rol_das_df8(); +void rol_dais_df8(); +void rol_adr16_df8(); +void rol_adr32_df8(); +void state_reset_if8(); +void state_bus_error_if8(); +void state_address_error_if8(); +void state_double_fault_if8(); +void state_interrupt_if8(); +void state_trace_if8(); +void state_illegal_if8(); +void state_priviledge_if8(); +void state_linea_if8(); +void state_linef_if8(); +void ori_b_imm8_ds_if8(); +void ori_b_imm8_ais_if8(); +void ori_b_imm8_aips_if8(); +void ori_b_imm8_pais_if8(); +void ori_b_imm8_das_if8(); +void ori_b_imm8_dais_if8(); +void ori_b_imm8_adr16_if8(); +void ori_b_imm8_adr32_if8(); +void ori_imm8_ccr_if8(); +void ori_w_imm16_ds_if8(); +void ori_w_imm16_ais_if8(); +void ori_w_imm16_aips_if8(); +void ori_w_imm16_pais_if8(); +void ori_w_imm16_das_if8(); +void ori_w_imm16_dais_if8(); +void ori_w_imm16_adr16_if8(); +void ori_w_imm16_adr32_if8(); +void ori_i16u_sr_if8(); +void ori_l_imm32_ds_if8(); +void ori_l_imm32_ais_if8(); +void ori_l_imm32_aips_if8(); +void ori_l_imm32_pais_if8(); +void ori_l_imm32_das_if8(); +void ori_l_imm32_dais_if8(); +void ori_l_imm32_adr16_if8(); +void ori_l_imm32_adr32_if8(); +void btst_dd_ds_if8(); +void movep_w_das_dd_if8(); +void btst_dd_ais_if8(); +void btst_dd_aips_if8(); +void btst_dd_pais_if8(); +void btst_dd_das_if8(); +void btst_dd_dais_if8(); +void btst_dd_adr16_if8(); +void btst_dd_adr32_if8(); +void btst_dd_dpc_if8(); +void btst_dd_dpci_if8(); +void btst_dd_imm_if8(); +void bchg_dd_ds_if8(); +void movep_l_das_dd_if8(); +void bchg_dd_ais_if8(); +void bchg_dd_aips_if8(); +void bchg_dd_pais_if8(); +void bchg_dd_das_if8(); +void bchg_dd_dais_if8(); +void bchg_dd_adr16_if8(); +void bchg_dd_adr32_if8(); +void bclr_dd_ds_if8(); +void movep_w_dd_das_if8(); +void bclr_dd_ais_if8(); +void bclr_dd_aips_if8(); +void bclr_dd_pais_if8(); +void bclr_dd_das_if8(); +void bclr_dd_dais_if8(); +void bclr_dd_adr16_if8(); +void bclr_dd_adr32_if8(); +void bset_dd_ds_if8(); +void movep_l_dd_das_if8(); +void bset_dd_ais_if8(); +void bset_dd_aips_if8(); +void bset_dd_pais_if8(); +void bset_dd_das_if8(); +void bset_dd_dais_if8(); +void bset_dd_adr16_if8(); +void bset_dd_adr32_if8(); +void andi_b_imm8_ds_if8(); +void andi_b_imm8_ais_if8(); +void andi_b_imm8_aips_if8(); +void andi_b_imm8_pais_if8(); +void andi_b_imm8_das_if8(); +void andi_b_imm8_dais_if8(); +void andi_b_imm8_adr16_if8(); +void andi_b_imm8_adr32_if8(); +void andi_imm8_ccr_if8(); +void andi_w_imm16_ds_if8(); +void andi_w_imm16_ais_if8(); +void andi_w_imm16_aips_if8(); +void andi_w_imm16_pais_if8(); +void andi_w_imm16_das_if8(); +void andi_w_imm16_dais_if8(); +void andi_w_imm16_adr16_if8(); +void andi_w_imm16_adr32_if8(); +void andi_i16u_sr_if8(); +void andi_l_imm32_ds_if8(); +void andi_l_imm32_ais_if8(); +void andi_l_imm32_aips_if8(); +void andi_l_imm32_pais_if8(); +void andi_l_imm32_das_if8(); +void andi_l_imm32_dais_if8(); +void andi_l_imm32_adr16_if8(); +void andi_l_imm32_adr32_if8(); +void subi_b_imm8_ds_if8(); +void subi_b_imm8_ais_if8(); +void subi_b_imm8_aips_if8(); +void subi_b_imm8_pais_if8(); +void subi_b_imm8_das_if8(); +void subi_b_imm8_dais_if8(); +void subi_b_imm8_adr16_if8(); +void subi_b_imm8_adr32_if8(); +void subi_w_imm16_ds_if8(); +void subi_w_imm16_ais_if8(); +void subi_w_imm16_aips_if8(); +void subi_w_imm16_pais_if8(); +void subi_w_imm16_das_if8(); +void subi_w_imm16_dais_if8(); +void subi_w_imm16_adr16_if8(); +void subi_w_imm16_adr32_if8(); +void subi_l_imm32_ds_if8(); +void subi_l_imm32_ais_if8(); +void subi_l_imm32_aips_if8(); +void subi_l_imm32_pais_if8(); +void subi_l_imm32_das_if8(); +void subi_l_imm32_dais_if8(); +void subi_l_imm32_adr16_if8(); +void subi_l_imm32_adr32_if8(); +void addi_b_imm8_ds_if8(); +void addi_b_imm8_ais_if8(); +void addi_b_imm8_aips_if8(); +void addi_b_imm8_pais_if8(); +void addi_b_imm8_das_if8(); +void addi_b_imm8_dais_if8(); +void addi_b_imm8_adr16_if8(); +void addi_b_imm8_adr32_if8(); +void addi_w_imm16_ds_if8(); +void addi_w_imm16_ais_if8(); +void addi_w_imm16_aips_if8(); +void addi_w_imm16_pais_if8(); +void addi_w_imm16_das_if8(); +void addi_w_imm16_dais_if8(); +void addi_w_imm16_adr16_if8(); +void addi_w_imm16_adr32_if8(); +void addi_l_imm32_ds_if8(); +void addi_l_imm32_ais_if8(); +void addi_l_imm32_aips_if8(); +void addi_l_imm32_pais_if8(); +void addi_l_imm32_das_if8(); +void addi_l_imm32_dais_if8(); +void addi_l_imm32_adr16_if8(); +void addi_l_imm32_adr32_if8(); +void btst_imm8_ds_if8(); +void btst_imm8_ais_if8(); +void btst_imm8_aips_if8(); +void btst_imm8_pais_if8(); +void btst_imm8_das_if8(); +void btst_imm8_dais_if8(); +void btst_imm8_adr16_if8(); +void btst_imm8_adr32_if8(); +void btst_imm8_dpc_if8(); +void btst_imm8_dpci_if8(); +void bchg_imm8_ds_if8(); +void bchg_imm8_ais_if8(); +void bchg_imm8_aips_if8(); +void bchg_imm8_pais_if8(); +void bchg_imm8_das_if8(); +void bchg_imm8_dais_if8(); +void bchg_imm8_adr16_if8(); +void bchg_imm8_adr32_if8(); +void bclr_imm8_ds_if8(); +void bclr_imm8_ais_if8(); +void bclr_imm8_aips_if8(); +void bclr_imm8_pais_if8(); +void bclr_imm8_das_if8(); +void bclr_imm8_dais_if8(); +void bclr_imm8_adr16_if8(); +void bclr_imm8_adr32_if8(); +void bset_imm8_ds_if8(); +void bset_imm8_ais_if8(); +void bset_imm8_aips_if8(); +void bset_imm8_pais_if8(); +void bset_imm8_das_if8(); +void bset_imm8_dais_if8(); +void bset_imm8_adr16_if8(); +void bset_imm8_adr32_if8(); +void eori_b_imm8_ds_if8(); +void eori_b_imm8_ais_if8(); +void eori_b_imm8_aips_if8(); +void eori_b_imm8_pais_if8(); +void eori_b_imm8_das_if8(); +void eori_b_imm8_dais_if8(); +void eori_b_imm8_adr16_if8(); +void eori_b_imm8_adr32_if8(); +void eori_imm8_ccr_if8(); +void eori_w_imm16_ds_if8(); +void eori_w_imm16_ais_if8(); +void eori_w_imm16_aips_if8(); +void eori_w_imm16_pais_if8(); +void eori_w_imm16_das_if8(); +void eori_w_imm16_dais_if8(); +void eori_w_imm16_adr16_if8(); +void eori_w_imm16_adr32_if8(); +void eori_i16u_sr_if8(); +void eori_l_imm32_ds_if8(); +void eori_l_imm32_ais_if8(); +void eori_l_imm32_aips_if8(); +void eori_l_imm32_pais_if8(); +void eori_l_imm32_das_if8(); +void eori_l_imm32_dais_if8(); +void eori_l_imm32_adr16_if8(); +void eori_l_imm32_adr32_if8(); +void cmpi_b_imm8_ds_if8(); +void cmpi_b_imm8_ais_if8(); +void cmpi_b_imm8_aips_if8(); +void cmpi_b_imm8_pais_if8(); +void cmpi_b_imm8_das_if8(); +void cmpi_b_imm8_dais_if8(); +void cmpi_b_imm8_adr16_if8(); +void cmpi_b_imm8_adr32_if8(); +void cmpi_w_imm16_ds_if8(); +void cmpi_w_imm16_ais_if8(); +void cmpi_w_imm16_aips_if8(); +void cmpi_w_imm16_pais_if8(); +void cmpi_w_imm16_das_if8(); +void cmpi_w_imm16_dais_if8(); +void cmpi_w_imm16_adr16_if8(); +void cmpi_w_imm16_adr32_if8(); +void cmpi_l_imm32_ds_if8(); +void cmpi_l_imm32_ais_if8(); +void cmpi_l_imm32_aips_if8(); +void cmpi_l_imm32_pais_if8(); +void cmpi_l_imm32_das_if8(); +void cmpi_l_imm32_dais_if8(); +void cmpi_l_imm32_adr16_if8(); +void cmpi_l_imm32_adr32_if8(); +void move_b_ds_dd_if8(); +void move_b_ais_dd_if8(); +void move_b_aips_dd_if8(); +void move_b_pais_dd_if8(); +void move_b_das_dd_if8(); +void move_b_dais_dd_if8(); +void move_b_adr16_dd_if8(); +void move_b_adr32_dd_if8(); +void move_b_dpc_dd_if8(); +void move_b_dpci_dd_if8(); +void move_b_imm8_dd_if8(); +void move_b_ds_aid_if8(); +void move_b_ais_aid_if8(); +void move_b_aips_aid_if8(); +void move_b_pais_aid_if8(); +void move_b_das_aid_if8(); +void move_b_dais_aid_if8(); +void move_b_adr16_aid_if8(); +void move_b_adr32_aid_if8(); +void move_b_dpc_aid_if8(); +void move_b_dpci_aid_if8(); +void move_b_imm8_aid_if8(); +void move_b_ds_aipd_if8(); +void move_b_ais_aipd_if8(); +void move_b_aips_aipd_if8(); +void move_b_pais_aipd_if8(); +void move_b_das_aipd_if8(); +void move_b_dais_aipd_if8(); +void move_b_adr16_aipd_if8(); +void move_b_adr32_aipd_if8(); +void move_b_dpc_aipd_if8(); +void move_b_dpci_aipd_if8(); +void move_b_imm8_aipd_if8(); +void move_b_ds_paid_if8(); +void move_b_ais_paid_if8(); +void move_b_aips_paid_if8(); +void move_b_pais_paid_if8(); +void move_b_das_paid_if8(); +void move_b_dais_paid_if8(); +void move_b_adr16_paid_if8(); +void move_b_adr32_paid_if8(); +void move_b_dpc_paid_if8(); +void move_b_dpci_paid_if8(); +void move_b_imm8_paid_if8(); +void move_b_ds_dad_if8(); +void move_b_ais_dad_if8(); +void move_b_aips_dad_if8(); +void move_b_pais_dad_if8(); +void move_b_das_dad_if8(); +void move_b_dais_dad_if8(); +void move_b_adr16_dad_if8(); +void move_b_adr32_dad_if8(); +void move_b_dpc_dad_if8(); +void move_b_dpci_dad_if8(); +void move_b_imm8_dad_if8(); +void move_b_ds_daid_if8(); +void move_b_ais_daid_if8(); +void move_b_aips_daid_if8(); +void move_b_pais_daid_if8(); +void move_b_das_daid_if8(); +void move_b_dais_daid_if8(); +void move_b_adr16_daid_if8(); +void move_b_adr32_daid_if8(); +void move_b_dpc_daid_if8(); +void move_b_dpci_daid_if8(); +void move_b_imm8_daid_if8(); +void move_b_ds_adr16_if8(); +void move_b_ais_adr16_if8(); +void move_b_aips_adr16_if8(); +void move_b_pais_adr16_if8(); +void move_b_das_adr16_if8(); +void move_b_dais_adr16_if8(); +void move_b_adr16_adr16_if8(); +void move_b_adr32_adr16_if8(); +void move_b_dpc_adr16_if8(); +void move_b_dpci_adr16_if8(); +void move_b_imm8_adr16_if8(); +void move_b_ds_adr32_if8(); +void move_b_ais_adr32_if8(); +void move_b_aips_adr32_if8(); +void move_b_pais_adr32_if8(); +void move_b_das_adr32_if8(); +void move_b_dais_adr32_if8(); +void move_b_adr16_adr32_if8(); +void move_b_adr32_adr32_if8(); +void move_b_dpc_adr32_if8(); +void move_b_dpci_adr32_if8(); +void move_b_imm8_adr32_if8(); +void move_l_ds_dd_if8(); +void move_l_as_dd_if8(); +void move_l_ais_dd_if8(); +void move_l_aips_dd_if8(); +void move_l_pais_dd_if8(); +void move_l_das_dd_if8(); +void move_l_dais_dd_if8(); +void move_l_adr16_dd_if8(); +void move_l_adr32_dd_if8(); +void move_l_dpc_dd_if8(); +void move_l_dpci_dd_if8(); +void move_l_imm32_dd_if8(); +void movea_l_ds_ad_if8(); +void movea_l_as_ad_if8(); +void movea_l_ais_ad_if8(); +void movea_l_aips_ad_if8(); +void movea_l_pais_ad_if8(); +void movea_l_das_ad_if8(); +void movea_l_dais_ad_if8(); +void movea_l_adr16_ad_if8(); +void movea_l_adr32_ad_if8(); +void movea_l_dpc_ad_if8(); +void movea_l_dpci_ad_if8(); +void movea_l_imm32_ad_if8(); +void move_l_ds_aid_if8(); +void move_l_as_aid_if8(); +void move_l_ais_aid_if8(); +void move_l_aips_aid_if8(); +void move_l_pais_aid_if8(); +void move_l_das_aid_if8(); +void move_l_dais_aid_if8(); +void move_l_adr16_aid_if8(); +void move_l_adr32_aid_if8(); +void move_l_dpc_aid_if8(); +void move_l_dpci_aid_if8(); +void move_l_imm32_aid_if8(); +void move_l_ds_aipd_if8(); +void move_l_as_aipd_if8(); +void move_l_ais_aipd_if8(); +void move_l_aips_aipd_if8(); +void move_l_pais_aipd_if8(); +void move_l_das_aipd_if8(); +void move_l_dais_aipd_if8(); +void move_l_adr16_aipd_if8(); +void move_l_adr32_aipd_if8(); +void move_l_dpc_aipd_if8(); +void move_l_dpci_aipd_if8(); +void move_l_imm32_aipd_if8(); +void move_l_ds_paid_if8(); +void move_l_as_paid_if8(); +void move_l_ais_paid_if8(); +void move_l_aips_paid_if8(); +void move_l_pais_paid_if8(); +void move_l_das_paid_if8(); +void move_l_dais_paid_if8(); +void move_l_adr16_paid_if8(); +void move_l_adr32_paid_if8(); +void move_l_dpc_paid_if8(); +void move_l_dpci_paid_if8(); +void move_l_imm32_paid_if8(); +void move_l_ds_dad_if8(); +void move_l_as_dad_if8(); +void move_l_ais_dad_if8(); +void move_l_aips_dad_if8(); +void move_l_pais_dad_if8(); +void move_l_das_dad_if8(); +void move_l_dais_dad_if8(); +void move_l_adr16_dad_if8(); +void move_l_adr32_dad_if8(); +void move_l_dpc_dad_if8(); +void move_l_dpci_dad_if8(); +void move_l_imm32_dad_if8(); +void move_l_ds_daid_if8(); +void move_l_as_daid_if8(); +void move_l_ais_daid_if8(); +void move_l_aips_daid_if8(); +void move_l_pais_daid_if8(); +void move_l_das_daid_if8(); +void move_l_dais_daid_if8(); +void move_l_adr16_daid_if8(); +void move_l_adr32_daid_if8(); +void move_l_dpc_daid_if8(); +void move_l_dpci_daid_if8(); +void move_l_imm32_daid_if8(); +void move_l_ds_adr16_if8(); +void move_l_as_adr16_if8(); +void move_l_ais_adr16_if8(); +void move_l_aips_adr16_if8(); +void move_l_pais_adr16_if8(); +void move_l_das_adr16_if8(); +void move_l_dais_adr16_if8(); +void move_l_adr16_adr16_if8(); +void move_l_adr32_adr16_if8(); +void move_l_dpc_adr16_if8(); +void move_l_dpci_adr16_if8(); +void move_l_imm32_adr16_if8(); +void move_l_ds_adr32_if8(); +void move_l_as_adr32_if8(); +void move_l_ais_adr32_if8(); +void move_l_aips_adr32_if8(); +void move_l_pais_adr32_if8(); +void move_l_das_adr32_if8(); +void move_l_dais_adr32_if8(); +void move_l_adr16_adr32_if8(); +void move_l_adr32_adr32_if8(); +void move_l_dpc_adr32_if8(); +void move_l_dpci_adr32_if8(); +void move_l_imm32_adr32_if8(); +void move_w_ds_dd_if8(); +void move_w_as_dd_if8(); +void move_w_ais_dd_if8(); +void move_w_aips_dd_if8(); +void move_w_pais_dd_if8(); +void move_w_das_dd_if8(); +void move_w_dais_dd_if8(); +void move_w_adr16_dd_if8(); +void move_w_adr32_dd_if8(); +void move_w_dpc_dd_if8(); +void move_w_dpci_dd_if8(); +void move_w_imm16_dd_if8(); +void movea_w_ds_ad_if8(); +void movea_w_as_ad_if8(); +void movea_w_ais_ad_if8(); +void movea_w_aips_ad_if8(); +void movea_w_pais_ad_if8(); +void movea_w_das_ad_if8(); +void movea_w_dais_ad_if8(); +void movea_w_adr16_ad_if8(); +void movea_w_adr32_ad_if8(); +void movea_w_dpc_ad_if8(); +void movea_w_dpci_ad_if8(); +void movea_w_imm16_ad_if8(); +void move_w_ds_aid_if8(); +void move_w_as_aid_if8(); +void move_w_ais_aid_if8(); +void move_w_aips_aid_if8(); +void move_w_pais_aid_if8(); +void move_w_das_aid_if8(); +void move_w_dais_aid_if8(); +void move_w_adr16_aid_if8(); +void move_w_adr32_aid_if8(); +void move_w_dpc_aid_if8(); +void move_w_dpci_aid_if8(); +void move_w_imm16_aid_if8(); +void move_w_ds_aipd_if8(); +void move_w_as_aipd_if8(); +void move_w_ais_aipd_if8(); +void move_w_aips_aipd_if8(); +void move_w_pais_aipd_if8(); +void move_w_das_aipd_if8(); +void move_w_dais_aipd_if8(); +void move_w_adr16_aipd_if8(); +void move_w_adr32_aipd_if8(); +void move_w_dpc_aipd_if8(); +void move_w_dpci_aipd_if8(); +void move_w_imm16_aipd_if8(); +void move_w_ds_paid_if8(); +void move_w_as_paid_if8(); +void move_w_ais_paid_if8(); +void move_w_aips_paid_if8(); +void move_w_pais_paid_if8(); +void move_w_das_paid_if8(); +void move_w_dais_paid_if8(); +void move_w_adr16_paid_if8(); +void move_w_adr32_paid_if8(); +void move_w_dpc_paid_if8(); +void move_w_dpci_paid_if8(); +void move_w_imm16_paid_if8(); +void move_w_ds_dad_if8(); +void move_w_as_dad_if8(); +void move_w_ais_dad_if8(); +void move_w_aips_dad_if8(); +void move_w_pais_dad_if8(); +void move_w_das_dad_if8(); +void move_w_dais_dad_if8(); +void move_w_adr16_dad_if8(); +void move_w_adr32_dad_if8(); +void move_w_dpc_dad_if8(); +void move_w_dpci_dad_if8(); +void move_w_imm16_dad_if8(); +void move_w_ds_daid_if8(); +void move_w_as_daid_if8(); +void move_w_ais_daid_if8(); +void move_w_aips_daid_if8(); +void move_w_pais_daid_if8(); +void move_w_das_daid_if8(); +void move_w_dais_daid_if8(); +void move_w_adr16_daid_if8(); +void move_w_adr32_daid_if8(); +void move_w_dpc_daid_if8(); +void move_w_dpci_daid_if8(); +void move_w_imm16_daid_if8(); +void move_w_ds_adr16_if8(); +void move_w_as_adr16_if8(); +void move_w_ais_adr16_if8(); +void move_w_aips_adr16_if8(); +void move_w_pais_adr16_if8(); +void move_w_das_adr16_if8(); +void move_w_dais_adr16_if8(); +void move_w_adr16_adr16_if8(); +void move_w_adr32_adr16_if8(); +void move_w_dpc_adr16_if8(); +void move_w_dpci_adr16_if8(); +void move_w_imm16_adr16_if8(); +void move_w_ds_adr32_if8(); +void move_w_as_adr32_if8(); +void move_w_ais_adr32_if8(); +void move_w_aips_adr32_if8(); +void move_w_pais_adr32_if8(); +void move_w_das_adr32_if8(); +void move_w_dais_adr32_if8(); +void move_w_adr16_adr32_if8(); +void move_w_adr32_adr32_if8(); +void move_w_dpc_adr32_if8(); +void move_w_dpci_adr32_if8(); +void move_w_imm16_adr32_if8(); +void negx_b_ds_if8(); +void negx_b_ais_if8(); +void negx_b_aips_if8(); +void negx_b_pais_if8(); +void negx_b_das_if8(); +void negx_b_dais_if8(); +void negx_b_adr16_if8(); +void negx_b_adr32_if8(); +void negx_w_ds_if8(); +void negx_w_ais_if8(); +void negx_w_aips_if8(); +void negx_w_pais_if8(); +void negx_w_das_if8(); +void negx_w_dais_if8(); +void negx_w_adr16_if8(); +void negx_w_adr32_if8(); +void negx_l_ds_if8(); +void negx_l_ais_if8(); +void negx_l_aips_if8(); +void negx_l_pais_if8(); +void negx_l_das_if8(); +void negx_l_dais_if8(); +void negx_l_adr16_if8(); +void negx_l_adr32_if8(); +void move_sr_ds_if8(); +void move_sr_ais_if8(); +void move_sr_aips_if8(); +void move_sr_pais_if8(); +void move_sr_das_if8(); +void move_sr_dais_if8(); +void move_sr_adr16_if8(); +void move_sr_adr32_if8(); +void chk_w_ds_dd_if8(); +void chk_w_ais_dd_if8(); +void chk_w_aips_dd_if8(); +void chk_w_pais_dd_if8(); +void chk_w_das_dd_if8(); +void chk_w_dais_dd_if8(); +void chk_w_adr16_dd_if8(); +void chk_w_adr32_dd_if8(); +void chk_w_dpc_dd_if8(); +void chk_w_dpci_dd_if8(); +void chk_w_imm16_dd_if8(); +void lea_ais_ad_if8(); +void lea_das_ad_if8(); +void lea_dais_ad_if8(); +void lea_adr16_ad_if8(); +void lea_adr32_ad_if8(); +void lea_dpc_ad_if8(); +void lea_dpci_ad_if8(); +void clr_b_ds_if8(); +void clr_b_ais_if8(); +void clr_b_aips_if8(); +void clr_b_pais_if8(); +void clr_b_das_if8(); +void clr_b_dais_if8(); +void clr_b_adr16_if8(); +void clr_b_adr32_if8(); +void clr_w_ds_if8(); +void clr_w_ais_if8(); +void clr_w_aips_if8(); +void clr_w_pais_if8(); +void clr_w_das_if8(); +void clr_w_dais_if8(); +void clr_w_adr16_if8(); +void clr_w_adr32_if8(); +void clr_l_ds_if8(); +void clr_l_ais_if8(); +void clr_l_aips_if8(); +void clr_l_pais_if8(); +void clr_l_das_if8(); +void clr_l_dais_if8(); +void clr_l_adr16_if8(); +void clr_l_adr32_if8(); +void neg_b_ds_if8(); +void neg_b_ais_if8(); +void neg_b_aips_if8(); +void neg_b_pais_if8(); +void neg_b_das_if8(); +void neg_b_dais_if8(); +void neg_b_adr16_if8(); +void neg_b_adr32_if8(); +void neg_w_ds_if8(); +void neg_w_ais_if8(); +void neg_w_aips_if8(); +void neg_w_pais_if8(); +void neg_w_das_if8(); +void neg_w_dais_if8(); +void neg_w_adr16_if8(); +void neg_w_adr32_if8(); +void neg_l_ds_if8(); +void neg_l_ais_if8(); +void neg_l_aips_if8(); +void neg_l_pais_if8(); +void neg_l_das_if8(); +void neg_l_dais_if8(); +void neg_l_adr16_if8(); +void neg_l_adr32_if8(); +void move_ds_ccr_if8(); +void move_ais_ccr_if8(); +void move_aips_ccr_if8(); +void move_pais_ccr_if8(); +void move_das_ccr_if8(); +void move_dais_ccr_if8(); +void move_adr16_ccr_if8(); +void move_adr32_ccr_if8(); +void move_dpc_ccr_if8(); +void move_dpci_ccr_if8(); +void move_imm8_ccr_if8(); +void not_b_ds_if8(); +void not_b_ais_if8(); +void not_b_aips_if8(); +void not_b_pais_if8(); +void not_b_das_if8(); +void not_b_dais_if8(); +void not_b_adr16_if8(); +void not_b_adr32_if8(); +void not_w_ds_if8(); +void not_w_ais_if8(); +void not_w_aips_if8(); +void not_w_pais_if8(); +void not_w_das_if8(); +void not_w_dais_if8(); +void not_w_adr16_if8(); +void not_w_adr32_if8(); +void not_l_ds_if8(); +void not_l_ais_if8(); +void not_l_aips_if8(); +void not_l_pais_if8(); +void not_l_das_if8(); +void not_l_dais_if8(); +void not_l_adr16_if8(); +void not_l_adr32_if8(); +void move_ds_sr_if8(); +void move_ais_sr_if8(); +void move_aips_sr_if8(); +void move_pais_sr_if8(); +void move_das_sr_if8(); +void move_dais_sr_if8(); +void move_adr16_sr_if8(); +void move_adr32_sr_if8(); +void move_dpc_sr_if8(); +void move_dpci_sr_if8(); +void move_i16u_sr_if8(); +void nbcd_b_ds_if8(); +void nbcd_b_ais_if8(); +void nbcd_b_aips_if8(); +void nbcd_b_pais_if8(); +void nbcd_b_das_if8(); +void nbcd_b_dais_if8(); +void nbcd_b_adr16_if8(); +void nbcd_b_adr32_if8(); +void swap_ds_if8(); +void pea_ais_if8(); +void pea_das_if8(); +void pea_dais_if8(); +void pea_adr16_if8(); +void pea_adr32_if8(); +void pea_dpc_if8(); +void pea_dpci_if8(); +void ext_w_ds_if8(); +void movem_w_list_ais_if8(); +void movem_w_listp_pais_if8(); +void movem_w_list_das_if8(); +void movem_w_list_dais_if8(); +void movem_w_list_adr16_if8(); +void movem_w_list_adr32_if8(); +void ext_l_ds_if8(); +void movem_l_list_ais_if8(); +void movem_l_listp_pais_if8(); +void movem_l_list_das_if8(); +void movem_l_list_dais_if8(); +void movem_l_list_adr16_if8(); +void movem_l_list_adr32_if8(); +void tst_b_ds_if8(); +void tst_b_ais_if8(); +void tst_b_aips_if8(); +void tst_b_pais_if8(); +void tst_b_das_if8(); +void tst_b_dais_if8(); +void tst_b_adr16_if8(); +void tst_b_adr32_if8(); +void tst_w_ds_if8(); +void tst_w_ais_if8(); +void tst_w_aips_if8(); +void tst_w_pais_if8(); +void tst_w_das_if8(); +void tst_w_dais_if8(); +void tst_w_adr16_if8(); +void tst_w_adr32_if8(); +void tst_l_ds_if8(); +void tst_l_ais_if8(); +void tst_l_aips_if8(); +void tst_l_pais_if8(); +void tst_l_das_if8(); +void tst_l_dais_if8(); +void tst_l_adr16_if8(); +void tst_l_adr32_if8(); +void tas_ds_if8(); +void tas_ais_if8(); +void tas_aips_if8(); +void tas_pais_if8(); +void tas_das_if8(); +void tas_dais_if8(); +void tas_adr16_if8(); +void tas_adr32_if8(); +void movem_w_ais_list_if8(); +void movem_w_aips_list_if8(); +void movem_w_das_list_if8(); +void movem_w_dais_list_if8(); +void movem_w_adr16_list_if8(); +void movem_w_adr32_list_if8(); +void movem_w_dpc_list_if8(); +void movem_w_dpci_list_if8(); +void movem_l_ais_list_if8(); +void movem_l_aips_list_if8(); +void movem_l_das_list_if8(); +void movem_l_dais_list_if8(); +void movem_l_adr16_list_if8(); +void movem_l_adr32_list_if8(); +void movem_l_dpc_list_if8(); +void movem_l_dpci_list_if8(); +void trap_imm4_if8(); +void link_as_imm16_if8(); +void unlk_as_if8(); +void move_as_usp_if8(); +void move_usp_as_if8(); +void reset_if8(); +void nop_if8(); +void stop_i16u_if8(); +void rte_if8(); +void rts_if8(); +void trapv_if8(); +void rtr_if8(); +void jsr_ais_if8(); +void jsr_das_if8(); +void jsr_dais_if8(); +void jsr_adr16_if8(); +void jsr_adr32_if8(); +void jsr_dpc_if8(); +void jsr_dpci_if8(); +void jmp_ais_if8(); +void jmp_das_if8(); +void jmp_dais_if8(); +void jmp_adr16_if8(); +void jmp_adr32_if8(); +void jmp_dpc_if8(); +void jmp_dpci_if8(); +void addq_b_imm3_ds_if8(); +void addq_b_imm3_ais_if8(); +void addq_b_imm3_aips_if8(); +void addq_b_imm3_pais_if8(); +void addq_b_imm3_das_if8(); +void addq_b_imm3_dais_if8(); +void addq_b_imm3_adr16_if8(); +void addq_b_imm3_adr32_if8(); +void addq_w_imm3_ds_if8(); +void addq_w_imm3_as_if8(); +void addq_w_imm3_ais_if8(); +void addq_w_imm3_aips_if8(); +void addq_w_imm3_pais_if8(); +void addq_w_imm3_das_if8(); +void addq_w_imm3_dais_if8(); +void addq_w_imm3_adr16_if8(); +void addq_w_imm3_adr32_if8(); +void addq_l_imm3_ds_if8(); +void addq_l_imm3_as_if8(); +void addq_l_imm3_ais_if8(); +void addq_l_imm3_aips_if8(); +void addq_l_imm3_pais_if8(); +void addq_l_imm3_das_if8(); +void addq_l_imm3_dais_if8(); +void addq_l_imm3_adr16_if8(); +void addq_l_imm3_adr32_if8(); +void st_ds_if8(); +void dbt_ds_rel16_if8(); +void st_ais_if8(); +void st_aips_if8(); +void st_pais_if8(); +void st_das_if8(); +void st_dais_if8(); +void st_adr16_if8(); +void st_adr32_if8(); +void subq_b_imm3_ds_if8(); +void subq_b_imm3_ais_if8(); +void subq_b_imm3_aips_if8(); +void subq_b_imm3_pais_if8(); +void subq_b_imm3_das_if8(); +void subq_b_imm3_dais_if8(); +void subq_b_imm3_adr16_if8(); +void subq_b_imm3_adr32_if8(); +void subq_w_imm3_ds_if8(); +void subq_w_imm3_as_if8(); +void subq_w_imm3_ais_if8(); +void subq_w_imm3_aips_if8(); +void subq_w_imm3_pais_if8(); +void subq_w_imm3_das_if8(); +void subq_w_imm3_dais_if8(); +void subq_w_imm3_adr16_if8(); +void subq_w_imm3_adr32_if8(); +void subq_l_imm3_ds_if8(); +void subq_l_imm3_as_if8(); +void subq_l_imm3_ais_if8(); +void subq_l_imm3_aips_if8(); +void subq_l_imm3_pais_if8(); +void subq_l_imm3_das_if8(); +void subq_l_imm3_dais_if8(); +void subq_l_imm3_adr16_if8(); +void subq_l_imm3_adr32_if8(); +void sf_ds_if8(); +void dbra_ds_rel16_if8(); +void sf_ais_if8(); +void sf_aips_if8(); +void sf_pais_if8(); +void sf_das_if8(); +void sf_dais_if8(); +void sf_adr16_if8(); +void sf_adr32_if8(); +void shi_ds_if8(); +void dbhi_ds_rel16_if8(); +void shi_ais_if8(); +void shi_aips_if8(); +void shi_pais_if8(); +void shi_das_if8(); +void shi_dais_if8(); +void shi_adr16_if8(); +void shi_adr32_if8(); +void sls_ds_if8(); +void dbls_ds_rel16_if8(); +void sls_ais_if8(); +void sls_aips_if8(); +void sls_pais_if8(); +void sls_das_if8(); +void sls_dais_if8(); +void sls_adr16_if8(); +void sls_adr32_if8(); +void scc_ds_if8(); +void dbcc_ds_rel16_if8(); +void scc_ais_if8(); +void scc_aips_if8(); +void scc_pais_if8(); +void scc_das_if8(); +void scc_dais_if8(); +void scc_adr16_if8(); +void scc_adr32_if8(); +void scs_ds_if8(); +void dbcs_ds_rel16_if8(); +void scs_ais_if8(); +void scs_aips_if8(); +void scs_pais_if8(); +void scs_das_if8(); +void scs_dais_if8(); +void scs_adr16_if8(); +void scs_adr32_if8(); +void sne_ds_if8(); +void dbne_ds_rel16_if8(); +void sne_ais_if8(); +void sne_aips_if8(); +void sne_pais_if8(); +void sne_das_if8(); +void sne_dais_if8(); +void sne_adr16_if8(); +void sne_adr32_if8(); +void seq_ds_if8(); +void dbeq_ds_rel16_if8(); +void seq_ais_if8(); +void seq_aips_if8(); +void seq_pais_if8(); +void seq_das_if8(); +void seq_dais_if8(); +void seq_adr16_if8(); +void seq_adr32_if8(); +void svc_ds_if8(); +void dbvc_ds_rel16_if8(); +void svc_ais_if8(); +void svc_aips_if8(); +void svc_pais_if8(); +void svc_das_if8(); +void svc_dais_if8(); +void svc_adr16_if8(); +void svc_adr32_if8(); +void svs_ds_if8(); +void dbvs_ds_rel16_if8(); +void svs_ais_if8(); +void svs_aips_if8(); +void svs_pais_if8(); +void svs_das_if8(); +void svs_dais_if8(); +void svs_adr16_if8(); +void svs_adr32_if8(); +void spl_ds_if8(); +void dbpl_ds_rel16_if8(); +void spl_ais_if8(); +void spl_aips_if8(); +void spl_pais_if8(); +void spl_das_if8(); +void spl_dais_if8(); +void spl_adr16_if8(); +void spl_adr32_if8(); +void smi_ds_if8(); +void dbmi_ds_rel16_if8(); +void smi_ais_if8(); +void smi_aips_if8(); +void smi_pais_if8(); +void smi_das_if8(); +void smi_dais_if8(); +void smi_adr16_if8(); +void smi_adr32_if8(); +void sge_ds_if8(); +void dbge_ds_rel16_if8(); +void sge_ais_if8(); +void sge_aips_if8(); +void sge_pais_if8(); +void sge_das_if8(); +void sge_dais_if8(); +void sge_adr16_if8(); +void sge_adr32_if8(); +void slt_ds_if8(); +void dblt_ds_rel16_if8(); +void slt_ais_if8(); +void slt_aips_if8(); +void slt_pais_if8(); +void slt_das_if8(); +void slt_dais_if8(); +void slt_adr16_if8(); +void slt_adr32_if8(); +void sgt_ds_if8(); +void dbgt_ds_rel16_if8(); +void sgt_ais_if8(); +void sgt_aips_if8(); +void sgt_pais_if8(); +void sgt_das_if8(); +void sgt_dais_if8(); +void sgt_adr16_if8(); +void sgt_adr32_if8(); +void sle_ds_if8(); +void dble_ds_rel16_if8(); +void sle_ais_if8(); +void sle_aips_if8(); +void sle_pais_if8(); +void sle_das_if8(); +void sle_dais_if8(); +void sle_adr16_if8(); +void sle_adr32_if8(); +void bra_rel16_if8(); +void bra_rel8_if8(); +void bsr_rel16_if8(); +void bsr_rel8_if8(); +void bhi_rel16_if8(); +void bhi_rel8_if8(); +void bls_rel16_if8(); +void bls_rel8_if8(); +void bcc_rel16_if8(); +void bcc_rel8_if8(); +void bcs_rel16_if8(); +void bcs_rel8_if8(); +void bne_rel16_if8(); +void bne_rel8_if8(); +void beq_rel16_if8(); +void beq_rel8_if8(); +void bvc_rel16_if8(); +void bvc_rel8_if8(); +void bvs_rel16_if8(); +void bvs_rel8_if8(); +void bpl_rel16_if8(); +void bpl_rel8_if8(); +void bmi_rel16_if8(); +void bmi_rel8_if8(); +void bge_rel16_if8(); +void bge_rel8_if8(); +void blt_rel16_if8(); +void blt_rel8_if8(); +void bgt_rel16_if8(); +void bgt_rel8_if8(); +void ble_rel16_if8(); +void ble_rel8_if8(); +void moveq_imm8o_dd_if8(); +void or_b_ds_dd_if8(); +void or_b_ais_dd_if8(); +void or_b_aips_dd_if8(); +void or_b_pais_dd_if8(); +void or_b_das_dd_if8(); +void or_b_dais_dd_if8(); +void or_b_adr16_dd_if8(); +void or_b_adr32_dd_if8(); +void or_b_dpc_dd_if8(); +void or_b_dpci_dd_if8(); +void or_b_imm8_dd_if8(); +void or_w_ds_dd_if8(); +void or_w_ais_dd_if8(); +void or_w_aips_dd_if8(); +void or_w_pais_dd_if8(); +void or_w_das_dd_if8(); +void or_w_dais_dd_if8(); +void or_w_adr16_dd_if8(); +void or_w_adr32_dd_if8(); +void or_w_dpc_dd_if8(); +void or_w_dpci_dd_if8(); +void or_w_imm16_dd_if8(); +void or_l_ds_dd_if8(); +void or_l_ais_dd_if8(); +void or_l_aips_dd_if8(); +void or_l_pais_dd_if8(); +void or_l_das_dd_if8(); +void or_l_dais_dd_if8(); +void or_l_adr16_dd_if8(); +void or_l_adr32_dd_if8(); +void or_l_dpc_dd_if8(); +void or_l_dpci_dd_if8(); +void or_l_imm32_dd_if8(); +void divu_w_ds_dd_if8(); +void divu_w_ais_dd_if8(); +void divu_w_aips_dd_if8(); +void divu_w_pais_dd_if8(); +void divu_w_das_dd_if8(); +void divu_w_dais_dd_if8(); +void divu_w_adr16_dd_if8(); +void divu_w_adr32_dd_if8(); +void divu_w_dpc_dd_if8(); +void divu_w_dpci_dd_if8(); +void divu_w_imm16_dd_if8(); +void sbcd_ds_dd_if8(); +void sbcd_pais_paid_if8(); +void or_b_dd_ais_if8(); +void or_b_dd_aips_if8(); +void or_b_dd_pais_if8(); +void or_b_dd_das_if8(); +void or_b_dd_dais_if8(); +void or_b_dd_adr16_if8(); +void or_b_dd_adr32_if8(); +void or_w_dd_ais_if8(); +void or_w_dd_aips_if8(); +void or_w_dd_pais_if8(); +void or_w_dd_das_if8(); +void or_w_dd_dais_if8(); +void or_w_dd_adr16_if8(); +void or_w_dd_adr32_if8(); +void or_l_dd_ais_if8(); +void or_l_dd_aips_if8(); +void or_l_dd_pais_if8(); +void or_l_dd_das_if8(); +void or_l_dd_dais_if8(); +void or_l_dd_adr16_if8(); +void or_l_dd_adr32_if8(); +void divs_w_ds_dd_if8(); +void divs_w_ais_dd_if8(); +void divs_w_aips_dd_if8(); +void divs_w_pais_dd_if8(); +void divs_w_das_dd_if8(); +void divs_w_dais_dd_if8(); +void divs_w_adr16_dd_if8(); +void divs_w_adr32_dd_if8(); +void divs_w_dpc_dd_if8(); +void divs_w_dpci_dd_if8(); +void divs_w_imm16_dd_if8(); +void sub_b_ds_dd_if8(); +void sub_b_ais_dd_if8(); +void sub_b_aips_dd_if8(); +void sub_b_pais_dd_if8(); +void sub_b_das_dd_if8(); +void sub_b_dais_dd_if8(); +void sub_b_adr16_dd_if8(); +void sub_b_adr32_dd_if8(); +void sub_b_dpc_dd_if8(); +void sub_b_dpci_dd_if8(); +void sub_b_imm8_dd_if8(); +void sub_w_ds_dd_if8(); +void sub_w_as_dd_if8(); +void sub_w_ais_dd_if8(); +void sub_w_aips_dd_if8(); +void sub_w_pais_dd_if8(); +void sub_w_das_dd_if8(); +void sub_w_dais_dd_if8(); +void sub_w_adr16_dd_if8(); +void sub_w_adr32_dd_if8(); +void sub_w_dpc_dd_if8(); +void sub_w_dpci_dd_if8(); +void sub_w_imm16_dd_if8(); +void sub_l_ds_dd_if8(); +void sub_l_as_dd_if8(); +void sub_l_ais_dd_if8(); +void sub_l_aips_dd_if8(); +void sub_l_pais_dd_if8(); +void sub_l_das_dd_if8(); +void sub_l_dais_dd_if8(); +void sub_l_adr16_dd_if8(); +void sub_l_adr32_dd_if8(); +void sub_l_dpc_dd_if8(); +void sub_l_dpci_dd_if8(); +void sub_l_imm32_dd_if8(); +void suba_w_ds_ad_if8(); +void suba_w_as_ad_if8(); +void suba_w_ais_ad_if8(); +void suba_w_aips_ad_if8(); +void suba_w_pais_ad_if8(); +void suba_w_das_ad_if8(); +void suba_w_dais_ad_if8(); +void suba_w_adr16_ad_if8(); +void suba_w_adr32_ad_if8(); +void suba_w_dpc_ad_if8(); +void suba_w_dpci_ad_if8(); +void suba_w_imm16_ad_if8(); +void subx_b_ds_dd_if8(); +void subx_b_pais_paid_if8(); +void sub_b_dd_ais_if8(); +void sub_b_dd_aips_if8(); +void sub_b_dd_pais_if8(); +void sub_b_dd_das_if8(); +void sub_b_dd_dais_if8(); +void sub_b_dd_adr16_if8(); +void sub_b_dd_adr32_if8(); +void subx_w_ds_dd_if8(); +void subx_w_pais_paid_if8(); +void sub_w_dd_ais_if8(); +void sub_w_dd_aips_if8(); +void sub_w_dd_pais_if8(); +void sub_w_dd_das_if8(); +void sub_w_dd_dais_if8(); +void sub_w_dd_adr16_if8(); +void sub_w_dd_adr32_if8(); +void subx_l_ds_dd_if8(); +void subx_l_pais_paid_if8(); +void sub_l_dd_ais_if8(); +void sub_l_dd_aips_if8(); +void sub_l_dd_pais_if8(); +void sub_l_dd_das_if8(); +void sub_l_dd_dais_if8(); +void sub_l_dd_adr16_if8(); +void sub_l_dd_adr32_if8(); +void suba_l_ds_ad_if8(); +void suba_l_as_ad_if8(); +void suba_l_ais_ad_if8(); +void suba_l_aips_ad_if8(); +void suba_l_pais_ad_if8(); +void suba_l_das_ad_if8(); +void suba_l_dais_ad_if8(); +void suba_l_adr16_ad_if8(); +void suba_l_adr32_ad_if8(); +void suba_l_dpc_ad_if8(); +void suba_l_dpci_ad_if8(); +void suba_l_imm32_ad_if8(); +void cmp_b_ds_dd_if8(); +void cmp_b_ais_dd_if8(); +void cmp_b_aips_dd_if8(); +void cmp_b_pais_dd_if8(); +void cmp_b_das_dd_if8(); +void cmp_b_dais_dd_if8(); +void cmp_b_adr16_dd_if8(); +void cmp_b_adr32_dd_if8(); +void cmp_b_dpc_dd_if8(); +void cmp_b_dpci_dd_if8(); +void cmp_b_imm8_dd_if8(); +void cmp_w_ds_dd_if8(); +void cmp_w_as_dd_if8(); +void cmp_w_ais_dd_if8(); +void cmp_w_aips_dd_if8(); +void cmp_w_pais_dd_if8(); +void cmp_w_das_dd_if8(); +void cmp_w_dais_dd_if8(); +void cmp_w_adr16_dd_if8(); +void cmp_w_adr32_dd_if8(); +void cmp_w_dpc_dd_if8(); +void cmp_w_dpci_dd_if8(); +void cmp_w_imm16_dd_if8(); +void cmp_l_ds_dd_if8(); +void cmp_l_as_dd_if8(); +void cmp_l_ais_dd_if8(); +void cmp_l_aips_dd_if8(); +void cmp_l_pais_dd_if8(); +void cmp_l_das_dd_if8(); +void cmp_l_dais_dd_if8(); +void cmp_l_adr16_dd_if8(); +void cmp_l_adr32_dd_if8(); +void cmp_l_dpc_dd_if8(); +void cmp_l_dpci_dd_if8(); +void cmp_l_imm32_dd_if8(); +void cmpa_w_ds_ad_if8(); +void cmpa_w_as_ad_if8(); +void cmpa_w_ais_ad_if8(); +void cmpa_w_aips_ad_if8(); +void cmpa_w_pais_ad_if8(); +void cmpa_w_das_ad_if8(); +void cmpa_w_dais_ad_if8(); +void cmpa_w_adr16_ad_if8(); +void cmpa_w_adr32_ad_if8(); +void cmpa_w_dpc_ad_if8(); +void cmpa_w_dpci_ad_if8(); +void cmpa_w_imm16_ad_if8(); +void eor_b_dd_ds_if8(); +void cmpm_b_aips_aipd_if8(); +void eor_b_dd_ais_if8(); +void eor_b_dd_aips_if8(); +void eor_b_dd_pais_if8(); +void eor_b_dd_das_if8(); +void eor_b_dd_dais_if8(); +void eor_b_dd_adr16_if8(); +void eor_b_dd_adr32_if8(); +void eor_w_dd_ds_if8(); +void cmpm_w_aips_aipd_if8(); +void eor_w_dd_ais_if8(); +void eor_w_dd_aips_if8(); +void eor_w_dd_pais_if8(); +void eor_w_dd_das_if8(); +void eor_w_dd_dais_if8(); +void eor_w_dd_adr16_if8(); +void eor_w_dd_adr32_if8(); +void eor_l_dd_ds_if8(); +void cmpm_l_aips_aipd_if8(); +void eor_l_dd_ais_if8(); +void eor_l_dd_aips_if8(); +void eor_l_dd_pais_if8(); +void eor_l_dd_das_if8(); +void eor_l_dd_dais_if8(); +void eor_l_dd_adr16_if8(); +void eor_l_dd_adr32_if8(); +void cmpa_l_ds_ad_if8(); +void cmpa_l_as_ad_if8(); +void cmpa_l_ais_ad_if8(); +void cmpa_l_aips_ad_if8(); +void cmpa_l_pais_ad_if8(); +void cmpa_l_das_ad_if8(); +void cmpa_l_dais_ad_if8(); +void cmpa_l_adr16_ad_if8(); +void cmpa_l_adr32_ad_if8(); +void cmpa_l_dpc_ad_if8(); +void cmpa_l_dpci_ad_if8(); +void cmpa_l_imm32_ad_if8(); +void and_b_ds_dd_if8(); +void and_b_ais_dd_if8(); +void and_b_aips_dd_if8(); +void and_b_pais_dd_if8(); +void and_b_das_dd_if8(); +void and_b_dais_dd_if8(); +void and_b_adr16_dd_if8(); +void and_b_adr32_dd_if8(); +void and_b_dpc_dd_if8(); +void and_b_dpci_dd_if8(); +void and_b_imm8_dd_if8(); +void and_w_ds_dd_if8(); +void and_w_ais_dd_if8(); +void and_w_aips_dd_if8(); +void and_w_pais_dd_if8(); +void and_w_das_dd_if8(); +void and_w_dais_dd_if8(); +void and_w_adr16_dd_if8(); +void and_w_adr32_dd_if8(); +void and_w_dpc_dd_if8(); +void and_w_dpci_dd_if8(); +void and_w_imm16_dd_if8(); +void and_l_ds_dd_if8(); +void and_l_ais_dd_if8(); +void and_l_aips_dd_if8(); +void and_l_pais_dd_if8(); +void and_l_das_dd_if8(); +void and_l_dais_dd_if8(); +void and_l_adr16_dd_if8(); +void and_l_adr32_dd_if8(); +void and_l_dpc_dd_if8(); +void and_l_dpci_dd_if8(); +void and_l_imm32_dd_if8(); +void mulu_w_ds_dd_if8(); +void mulu_w_ais_dd_if8(); +void mulu_w_aips_dd_if8(); +void mulu_w_pais_dd_if8(); +void mulu_w_das_dd_if8(); +void mulu_w_dais_dd_if8(); +void mulu_w_adr16_dd_if8(); +void mulu_w_adr32_dd_if8(); +void mulu_w_dpc_dd_if8(); +void mulu_w_dpci_dd_if8(); +void mulu_w_imm16_dd_if8(); +void abcd_ds_dd_if8(); +void abcd_pais_paid_if8(); +void and_b_dd_ais_if8(); +void and_b_dd_aips_if8(); +void and_b_dd_pais_if8(); +void and_b_dd_das_if8(); +void and_b_dd_dais_if8(); +void and_b_dd_adr16_if8(); +void and_b_dd_adr32_if8(); +void exg_dd_ds_if8(); +void exg_ad_as_if8(); +void and_w_dd_ais_if8(); +void and_w_dd_aips_if8(); +void and_w_dd_pais_if8(); +void and_w_dd_das_if8(); +void and_w_dd_dais_if8(); +void and_w_dd_adr16_if8(); +void and_w_dd_adr32_if8(); +void exg_dd_as_if8(); +void and_l_dd_ais_if8(); +void and_l_dd_aips_if8(); +void and_l_dd_pais_if8(); +void and_l_dd_das_if8(); +void and_l_dd_dais_if8(); +void and_l_dd_adr16_if8(); +void and_l_dd_adr32_if8(); +void muls_w_ds_dd_if8(); +void muls_w_ais_dd_if8(); +void muls_w_aips_dd_if8(); +void muls_w_pais_dd_if8(); +void muls_w_das_dd_if8(); +void muls_w_dais_dd_if8(); +void muls_w_adr16_dd_if8(); +void muls_w_adr32_dd_if8(); +void muls_w_dpc_dd_if8(); +void muls_w_dpci_dd_if8(); +void muls_w_imm16_dd_if8(); +void add_b_ds_dd_if8(); +void add_b_ais_dd_if8(); +void add_b_aips_dd_if8(); +void add_b_pais_dd_if8(); +void add_b_das_dd_if8(); +void add_b_dais_dd_if8(); +void add_b_adr16_dd_if8(); +void add_b_adr32_dd_if8(); +void add_b_dpc_dd_if8(); +void add_b_dpci_dd_if8(); +void add_b_imm8_dd_if8(); +void add_w_ds_dd_if8(); +void add_w_as_dd_if8(); +void add_w_ais_dd_if8(); +void add_w_aips_dd_if8(); +void add_w_pais_dd_if8(); +void add_w_das_dd_if8(); +void add_w_dais_dd_if8(); +void add_w_adr16_dd_if8(); +void add_w_adr32_dd_if8(); +void add_w_dpc_dd_if8(); +void add_w_dpci_dd_if8(); +void add_w_imm16_dd_if8(); +void add_l_ds_dd_if8(); +void add_l_as_dd_if8(); +void add_l_ais_dd_if8(); +void add_l_aips_dd_if8(); +void add_l_pais_dd_if8(); +void add_l_das_dd_if8(); +void add_l_dais_dd_if8(); +void add_l_adr16_dd_if8(); +void add_l_adr32_dd_if8(); +void add_l_dpc_dd_if8(); +void add_l_dpci_dd_if8(); +void add_l_imm32_dd_if8(); +void adda_w_ds_ad_if8(); +void adda_w_as_ad_if8(); +void adda_w_ais_ad_if8(); +void adda_w_aips_ad_if8(); +void adda_w_pais_ad_if8(); +void adda_w_das_ad_if8(); +void adda_w_dais_ad_if8(); +void adda_w_adr16_ad_if8(); +void adda_w_adr32_ad_if8(); +void adda_w_dpc_ad_if8(); +void adda_w_dpci_ad_if8(); +void adda_w_imm16_ad_if8(); +void addx_b_ds_dd_if8(); +void addx_b_pais_paid_if8(); +void add_b_dd_ais_if8(); +void add_b_dd_aips_if8(); +void add_b_dd_pais_if8(); +void add_b_dd_das_if8(); +void add_b_dd_dais_if8(); +void add_b_dd_adr16_if8(); +void add_b_dd_adr32_if8(); +void addx_w_ds_dd_if8(); +void addx_w_pais_paid_if8(); +void add_w_dd_ais_if8(); +void add_w_dd_aips_if8(); +void add_w_dd_pais_if8(); +void add_w_dd_das_if8(); +void add_w_dd_dais_if8(); +void add_w_dd_adr16_if8(); +void add_w_dd_adr32_if8(); +void addx_l_ds_dd_if8(); +void addx_l_pais_paid_if8(); +void add_l_dd_ais_if8(); +void add_l_dd_aips_if8(); +void add_l_dd_pais_if8(); +void add_l_dd_das_if8(); +void add_l_dd_dais_if8(); +void add_l_dd_adr16_if8(); +void add_l_dd_adr32_if8(); +void adda_l_ds_ad_if8(); +void adda_l_as_ad_if8(); +void adda_l_ais_ad_if8(); +void adda_l_aips_ad_if8(); +void adda_l_pais_ad_if8(); +void adda_l_das_ad_if8(); +void adda_l_dais_ad_if8(); +void adda_l_adr16_ad_if8(); +void adda_l_adr32_ad_if8(); +void adda_l_dpc_ad_if8(); +void adda_l_dpci_ad_if8(); +void adda_l_imm32_ad_if8(); +void asr_b_imm3_ds_if8(); +void lsr_b_imm3_ds_if8(); +void roxr_b_imm3_ds_if8(); +void ror_b_imm3_ds_if8(); +void asr_b_dd_ds_if8(); +void lsr_b_dd_ds_if8(); +void roxr_b_dd_ds_if8(); +void ror_b_dd_ds_if8(); +void asr_w_imm3_ds_if8(); +void lsr_w_imm3_ds_if8(); +void roxr_w_imm3_ds_if8(); +void ror_w_imm3_ds_if8(); +void asr_w_dd_ds_if8(); +void lsr_w_dd_ds_if8(); +void roxr_w_dd_ds_if8(); +void ror_w_dd_ds_if8(); +void asr_l_imm3_ds_if8(); +void lsr_l_imm3_ds_if8(); +void roxr_l_imm3_ds_if8(); +void ror_l_imm3_ds_if8(); +void asr_l_dd_ds_if8(); +void lsr_l_dd_ds_if8(); +void roxr_l_dd_ds_if8(); +void ror_l_dd_ds_if8(); +void asr_ais_if8(); +void asr_aips_if8(); +void asr_pais_if8(); +void asr_das_if8(); +void asr_dais_if8(); +void asr_adr16_if8(); +void asr_adr32_if8(); +void asl_b_imm3_ds_if8(); +void lsl_b_imm3_ds_if8(); +void roxl_b_imm3_ds_if8(); +void rol_b_imm3_ds_if8(); +void asl_b_dd_ds_if8(); +void lsl_b_dd_ds_if8(); +void roxl_b_dd_ds_if8(); +void rol_b_dd_ds_if8(); +void asl_w_imm3_ds_if8(); +void lsl_w_imm3_ds_if8(); +void roxl_w_imm3_ds_if8(); +void rol_w_imm3_ds_if8(); +void asl_w_dd_ds_if8(); +void lsl_w_dd_ds_if8(); +void roxl_w_dd_ds_if8(); +void rol_w_dd_ds_if8(); +void asl_l_imm3_ds_if8(); +void lsl_l_imm3_ds_if8(); +void roxl_l_imm3_ds_if8(); +void rol_l_imm3_ds_if8(); +void asl_l_dd_ds_if8(); +void lsl_l_dd_ds_if8(); +void roxl_l_dd_ds_if8(); +void rol_l_dd_ds_if8(); +void asl_ais_if8(); +void asl_aips_if8(); +void asl_pais_if8(); +void asl_das_if8(); +void asl_dais_if8(); +void asl_adr16_if8(); +void asl_adr32_if8(); +void lsr_ais_if8(); +void lsr_aips_if8(); +void lsr_pais_if8(); +void lsr_das_if8(); +void lsr_dais_if8(); +void lsr_adr16_if8(); +void lsr_adr32_if8(); +void lsl_ais_if8(); +void lsl_aips_if8(); +void lsl_pais_if8(); +void lsl_das_if8(); +void lsl_dais_if8(); +void lsl_adr16_if8(); +void lsl_adr32_if8(); +void roxr_ais_if8(); +void roxr_aips_if8(); +void roxr_pais_if8(); +void roxr_das_if8(); +void roxr_dais_if8(); +void roxr_adr16_if8(); +void roxr_adr32_if8(); +void roxl_ais_if8(); +void roxl_aips_if8(); +void roxl_pais_if8(); +void roxl_das_if8(); +void roxl_dais_if8(); +void roxl_adr16_if8(); +void roxl_adr32_if8(); +void ror_ais_if8(); +void ror_aips_if8(); +void ror_pais_if8(); +void ror_das_if8(); +void ror_dais_if8(); +void ror_adr16_if8(); +void ror_adr32_if8(); +void rol_ais_if8(); +void rol_aips_if8(); +void rol_pais_if8(); +void rol_das_if8(); +void rol_dais_if8(); +void rol_adr16_if8(); +void rol_adr32_if8(); +void state_reset_dp8(); +void state_bus_error_dp8(); +void state_address_error_dp8(); +void state_double_fault_dp8(); +void state_interrupt_dp8(); +void state_trace_dp8(); +void state_illegal_dp8(); +void state_priviledge_dp8(); +void state_linea_dp8(); +void state_linef_dp8(); +void ori_b_imm8_ds_dp8(); +void ori_b_imm8_ais_dp8(); +void ori_b_imm8_aips_dp8(); +void ori_b_imm8_pais_dp8(); +void ori_b_imm8_das_dp8(); +void ori_b_imm8_dais_dp8(); +void ori_b_imm8_adr16_dp8(); +void ori_b_imm8_adr32_dp8(); +void ori_imm8_ccr_dp8(); +void ori_w_imm16_ds_dp8(); +void ori_w_imm16_ais_dp8(); +void ori_w_imm16_aips_dp8(); +void ori_w_imm16_pais_dp8(); +void ori_w_imm16_das_dp8(); +void ori_w_imm16_dais_dp8(); +void ori_w_imm16_adr16_dp8(); +void ori_w_imm16_adr32_dp8(); +void ori_i16u_sr_dp8(); +void ori_l_imm32_ds_dp8(); +void ori_l_imm32_ais_dp8(); +void ori_l_imm32_aips_dp8(); +void ori_l_imm32_pais_dp8(); +void ori_l_imm32_das_dp8(); +void ori_l_imm32_dais_dp8(); +void ori_l_imm32_adr16_dp8(); +void ori_l_imm32_adr32_dp8(); +void btst_dd_ds_dp8(); +void movep_w_das_dd_dp8(); +void btst_dd_ais_dp8(); +void btst_dd_aips_dp8(); +void btst_dd_pais_dp8(); +void btst_dd_das_dp8(); +void btst_dd_dais_dp8(); +void btst_dd_adr16_dp8(); +void btst_dd_adr32_dp8(); +void btst_dd_dpc_dp8(); +void btst_dd_dpci_dp8(); +void btst_dd_imm_dp8(); +void bchg_dd_ds_dp8(); +void movep_l_das_dd_dp8(); +void bchg_dd_ais_dp8(); +void bchg_dd_aips_dp8(); +void bchg_dd_pais_dp8(); +void bchg_dd_das_dp8(); +void bchg_dd_dais_dp8(); +void bchg_dd_adr16_dp8(); +void bchg_dd_adr32_dp8(); +void bclr_dd_ds_dp8(); +void movep_w_dd_das_dp8(); +void bclr_dd_ais_dp8(); +void bclr_dd_aips_dp8(); +void bclr_dd_pais_dp8(); +void bclr_dd_das_dp8(); +void bclr_dd_dais_dp8(); +void bclr_dd_adr16_dp8(); +void bclr_dd_adr32_dp8(); +void bset_dd_ds_dp8(); +void movep_l_dd_das_dp8(); +void bset_dd_ais_dp8(); +void bset_dd_aips_dp8(); +void bset_dd_pais_dp8(); +void bset_dd_das_dp8(); +void bset_dd_dais_dp8(); +void bset_dd_adr16_dp8(); +void bset_dd_adr32_dp8(); +void andi_b_imm8_ds_dp8(); +void andi_b_imm8_ais_dp8(); +void andi_b_imm8_aips_dp8(); +void andi_b_imm8_pais_dp8(); +void andi_b_imm8_das_dp8(); +void andi_b_imm8_dais_dp8(); +void andi_b_imm8_adr16_dp8(); +void andi_b_imm8_adr32_dp8(); +void andi_imm8_ccr_dp8(); +void andi_w_imm16_ds_dp8(); +void andi_w_imm16_ais_dp8(); +void andi_w_imm16_aips_dp8(); +void andi_w_imm16_pais_dp8(); +void andi_w_imm16_das_dp8(); +void andi_w_imm16_dais_dp8(); +void andi_w_imm16_adr16_dp8(); +void andi_w_imm16_adr32_dp8(); +void andi_i16u_sr_dp8(); +void andi_l_imm32_ds_dp8(); +void andi_l_imm32_ais_dp8(); +void andi_l_imm32_aips_dp8(); +void andi_l_imm32_pais_dp8(); +void andi_l_imm32_das_dp8(); +void andi_l_imm32_dais_dp8(); +void andi_l_imm32_adr16_dp8(); +void andi_l_imm32_adr32_dp8(); +void subi_b_imm8_ds_dp8(); +void subi_b_imm8_ais_dp8(); +void subi_b_imm8_aips_dp8(); +void subi_b_imm8_pais_dp8(); +void subi_b_imm8_das_dp8(); +void subi_b_imm8_dais_dp8(); +void subi_b_imm8_adr16_dp8(); +void subi_b_imm8_adr32_dp8(); +void subi_w_imm16_ds_dp8(); +void subi_w_imm16_ais_dp8(); +void subi_w_imm16_aips_dp8(); +void subi_w_imm16_pais_dp8(); +void subi_w_imm16_das_dp8(); +void subi_w_imm16_dais_dp8(); +void subi_w_imm16_adr16_dp8(); +void subi_w_imm16_adr32_dp8(); +void subi_l_imm32_ds_dp8(); +void subi_l_imm32_ais_dp8(); +void subi_l_imm32_aips_dp8(); +void subi_l_imm32_pais_dp8(); +void subi_l_imm32_das_dp8(); +void subi_l_imm32_dais_dp8(); +void subi_l_imm32_adr16_dp8(); +void subi_l_imm32_adr32_dp8(); +void addi_b_imm8_ds_dp8(); +void addi_b_imm8_ais_dp8(); +void addi_b_imm8_aips_dp8(); +void addi_b_imm8_pais_dp8(); +void addi_b_imm8_das_dp8(); +void addi_b_imm8_dais_dp8(); +void addi_b_imm8_adr16_dp8(); +void addi_b_imm8_adr32_dp8(); +void addi_w_imm16_ds_dp8(); +void addi_w_imm16_ais_dp8(); +void addi_w_imm16_aips_dp8(); +void addi_w_imm16_pais_dp8(); +void addi_w_imm16_das_dp8(); +void addi_w_imm16_dais_dp8(); +void addi_w_imm16_adr16_dp8(); +void addi_w_imm16_adr32_dp8(); +void addi_l_imm32_ds_dp8(); +void addi_l_imm32_ais_dp8(); +void addi_l_imm32_aips_dp8(); +void addi_l_imm32_pais_dp8(); +void addi_l_imm32_das_dp8(); +void addi_l_imm32_dais_dp8(); +void addi_l_imm32_adr16_dp8(); +void addi_l_imm32_adr32_dp8(); +void btst_imm8_ds_dp8(); +void btst_imm8_ais_dp8(); +void btst_imm8_aips_dp8(); +void btst_imm8_pais_dp8(); +void btst_imm8_das_dp8(); +void btst_imm8_dais_dp8(); +void btst_imm8_adr16_dp8(); +void btst_imm8_adr32_dp8(); +void btst_imm8_dpc_dp8(); +void btst_imm8_dpci_dp8(); +void bchg_imm8_ds_dp8(); +void bchg_imm8_ais_dp8(); +void bchg_imm8_aips_dp8(); +void bchg_imm8_pais_dp8(); +void bchg_imm8_das_dp8(); +void bchg_imm8_dais_dp8(); +void bchg_imm8_adr16_dp8(); +void bchg_imm8_adr32_dp8(); +void bclr_imm8_ds_dp8(); +void bclr_imm8_ais_dp8(); +void bclr_imm8_aips_dp8(); +void bclr_imm8_pais_dp8(); +void bclr_imm8_das_dp8(); +void bclr_imm8_dais_dp8(); +void bclr_imm8_adr16_dp8(); +void bclr_imm8_adr32_dp8(); +void bset_imm8_ds_dp8(); +void bset_imm8_ais_dp8(); +void bset_imm8_aips_dp8(); +void bset_imm8_pais_dp8(); +void bset_imm8_das_dp8(); +void bset_imm8_dais_dp8(); +void bset_imm8_adr16_dp8(); +void bset_imm8_adr32_dp8(); +void eori_b_imm8_ds_dp8(); +void eori_b_imm8_ais_dp8(); +void eori_b_imm8_aips_dp8(); +void eori_b_imm8_pais_dp8(); +void eori_b_imm8_das_dp8(); +void eori_b_imm8_dais_dp8(); +void eori_b_imm8_adr16_dp8(); +void eori_b_imm8_adr32_dp8(); +void eori_imm8_ccr_dp8(); +void eori_w_imm16_ds_dp8(); +void eori_w_imm16_ais_dp8(); +void eori_w_imm16_aips_dp8(); +void eori_w_imm16_pais_dp8(); +void eori_w_imm16_das_dp8(); +void eori_w_imm16_dais_dp8(); +void eori_w_imm16_adr16_dp8(); +void eori_w_imm16_adr32_dp8(); +void eori_i16u_sr_dp8(); +void eori_l_imm32_ds_dp8(); +void eori_l_imm32_ais_dp8(); +void eori_l_imm32_aips_dp8(); +void eori_l_imm32_pais_dp8(); +void eori_l_imm32_das_dp8(); +void eori_l_imm32_dais_dp8(); +void eori_l_imm32_adr16_dp8(); +void eori_l_imm32_adr32_dp8(); +void cmpi_b_imm8_ds_dp8(); +void cmpi_b_imm8_ais_dp8(); +void cmpi_b_imm8_aips_dp8(); +void cmpi_b_imm8_pais_dp8(); +void cmpi_b_imm8_das_dp8(); +void cmpi_b_imm8_dais_dp8(); +void cmpi_b_imm8_adr16_dp8(); +void cmpi_b_imm8_adr32_dp8(); +void cmpi_w_imm16_ds_dp8(); +void cmpi_w_imm16_ais_dp8(); +void cmpi_w_imm16_aips_dp8(); +void cmpi_w_imm16_pais_dp8(); +void cmpi_w_imm16_das_dp8(); +void cmpi_w_imm16_dais_dp8(); +void cmpi_w_imm16_adr16_dp8(); +void cmpi_w_imm16_adr32_dp8(); +void cmpi_l_imm32_ds_dp8(); +void cmpi_l_imm32_ais_dp8(); +void cmpi_l_imm32_aips_dp8(); +void cmpi_l_imm32_pais_dp8(); +void cmpi_l_imm32_das_dp8(); +void cmpi_l_imm32_dais_dp8(); +void cmpi_l_imm32_adr16_dp8(); +void cmpi_l_imm32_adr32_dp8(); +void move_b_ds_dd_dp8(); +void move_b_ais_dd_dp8(); +void move_b_aips_dd_dp8(); +void move_b_pais_dd_dp8(); +void move_b_das_dd_dp8(); +void move_b_dais_dd_dp8(); +void move_b_adr16_dd_dp8(); +void move_b_adr32_dd_dp8(); +void move_b_dpc_dd_dp8(); +void move_b_dpci_dd_dp8(); +void move_b_imm8_dd_dp8(); +void move_b_ds_aid_dp8(); +void move_b_ais_aid_dp8(); +void move_b_aips_aid_dp8(); +void move_b_pais_aid_dp8(); +void move_b_das_aid_dp8(); +void move_b_dais_aid_dp8(); +void move_b_adr16_aid_dp8(); +void move_b_adr32_aid_dp8(); +void move_b_dpc_aid_dp8(); +void move_b_dpci_aid_dp8(); +void move_b_imm8_aid_dp8(); +void move_b_ds_aipd_dp8(); +void move_b_ais_aipd_dp8(); +void move_b_aips_aipd_dp8(); +void move_b_pais_aipd_dp8(); +void move_b_das_aipd_dp8(); +void move_b_dais_aipd_dp8(); +void move_b_adr16_aipd_dp8(); +void move_b_adr32_aipd_dp8(); +void move_b_dpc_aipd_dp8(); +void move_b_dpci_aipd_dp8(); +void move_b_imm8_aipd_dp8(); +void move_b_ds_paid_dp8(); +void move_b_ais_paid_dp8(); +void move_b_aips_paid_dp8(); +void move_b_pais_paid_dp8(); +void move_b_das_paid_dp8(); +void move_b_dais_paid_dp8(); +void move_b_adr16_paid_dp8(); +void move_b_adr32_paid_dp8(); +void move_b_dpc_paid_dp8(); +void move_b_dpci_paid_dp8(); +void move_b_imm8_paid_dp8(); +void move_b_ds_dad_dp8(); +void move_b_ais_dad_dp8(); +void move_b_aips_dad_dp8(); +void move_b_pais_dad_dp8(); +void move_b_das_dad_dp8(); +void move_b_dais_dad_dp8(); +void move_b_adr16_dad_dp8(); +void move_b_adr32_dad_dp8(); +void move_b_dpc_dad_dp8(); +void move_b_dpci_dad_dp8(); +void move_b_imm8_dad_dp8(); +void move_b_ds_daid_dp8(); +void move_b_ais_daid_dp8(); +void move_b_aips_daid_dp8(); +void move_b_pais_daid_dp8(); +void move_b_das_daid_dp8(); +void move_b_dais_daid_dp8(); +void move_b_adr16_daid_dp8(); +void move_b_adr32_daid_dp8(); +void move_b_dpc_daid_dp8(); +void move_b_dpci_daid_dp8(); +void move_b_imm8_daid_dp8(); +void move_b_ds_adr16_dp8(); +void move_b_ais_adr16_dp8(); +void move_b_aips_adr16_dp8(); +void move_b_pais_adr16_dp8(); +void move_b_das_adr16_dp8(); +void move_b_dais_adr16_dp8(); +void move_b_adr16_adr16_dp8(); +void move_b_adr32_adr16_dp8(); +void move_b_dpc_adr16_dp8(); +void move_b_dpci_adr16_dp8(); +void move_b_imm8_adr16_dp8(); +void move_b_ds_adr32_dp8(); +void move_b_ais_adr32_dp8(); +void move_b_aips_adr32_dp8(); +void move_b_pais_adr32_dp8(); +void move_b_das_adr32_dp8(); +void move_b_dais_adr32_dp8(); +void move_b_adr16_adr32_dp8(); +void move_b_adr32_adr32_dp8(); +void move_b_dpc_adr32_dp8(); +void move_b_dpci_adr32_dp8(); +void move_b_imm8_adr32_dp8(); +void move_l_ds_dd_dp8(); +void move_l_as_dd_dp8(); +void move_l_ais_dd_dp8(); +void move_l_aips_dd_dp8(); +void move_l_pais_dd_dp8(); +void move_l_das_dd_dp8(); +void move_l_dais_dd_dp8(); +void move_l_adr16_dd_dp8(); +void move_l_adr32_dd_dp8(); +void move_l_dpc_dd_dp8(); +void move_l_dpci_dd_dp8(); +void move_l_imm32_dd_dp8(); +void movea_l_ds_ad_dp8(); +void movea_l_as_ad_dp8(); +void movea_l_ais_ad_dp8(); +void movea_l_aips_ad_dp8(); +void movea_l_pais_ad_dp8(); +void movea_l_das_ad_dp8(); +void movea_l_dais_ad_dp8(); +void movea_l_adr16_ad_dp8(); +void movea_l_adr32_ad_dp8(); +void movea_l_dpc_ad_dp8(); +void movea_l_dpci_ad_dp8(); +void movea_l_imm32_ad_dp8(); +void move_l_ds_aid_dp8(); +void move_l_as_aid_dp8(); +void move_l_ais_aid_dp8(); +void move_l_aips_aid_dp8(); +void move_l_pais_aid_dp8(); +void move_l_das_aid_dp8(); +void move_l_dais_aid_dp8(); +void move_l_adr16_aid_dp8(); +void move_l_adr32_aid_dp8(); +void move_l_dpc_aid_dp8(); +void move_l_dpci_aid_dp8(); +void move_l_imm32_aid_dp8(); +void move_l_ds_aipd_dp8(); +void move_l_as_aipd_dp8(); +void move_l_ais_aipd_dp8(); +void move_l_aips_aipd_dp8(); +void move_l_pais_aipd_dp8(); +void move_l_das_aipd_dp8(); +void move_l_dais_aipd_dp8(); +void move_l_adr16_aipd_dp8(); +void move_l_adr32_aipd_dp8(); +void move_l_dpc_aipd_dp8(); +void move_l_dpci_aipd_dp8(); +void move_l_imm32_aipd_dp8(); +void move_l_ds_paid_dp8(); +void move_l_as_paid_dp8(); +void move_l_ais_paid_dp8(); +void move_l_aips_paid_dp8(); +void move_l_pais_paid_dp8(); +void move_l_das_paid_dp8(); +void move_l_dais_paid_dp8(); +void move_l_adr16_paid_dp8(); +void move_l_adr32_paid_dp8(); +void move_l_dpc_paid_dp8(); +void move_l_dpci_paid_dp8(); +void move_l_imm32_paid_dp8(); +void move_l_ds_dad_dp8(); +void move_l_as_dad_dp8(); +void move_l_ais_dad_dp8(); +void move_l_aips_dad_dp8(); +void move_l_pais_dad_dp8(); +void move_l_das_dad_dp8(); +void move_l_dais_dad_dp8(); +void move_l_adr16_dad_dp8(); +void move_l_adr32_dad_dp8(); +void move_l_dpc_dad_dp8(); +void move_l_dpci_dad_dp8(); +void move_l_imm32_dad_dp8(); +void move_l_ds_daid_dp8(); +void move_l_as_daid_dp8(); +void move_l_ais_daid_dp8(); +void move_l_aips_daid_dp8(); +void move_l_pais_daid_dp8(); +void move_l_das_daid_dp8(); +void move_l_dais_daid_dp8(); +void move_l_adr16_daid_dp8(); +void move_l_adr32_daid_dp8(); +void move_l_dpc_daid_dp8(); +void move_l_dpci_daid_dp8(); +void move_l_imm32_daid_dp8(); +void move_l_ds_adr16_dp8(); +void move_l_as_adr16_dp8(); +void move_l_ais_adr16_dp8(); +void move_l_aips_adr16_dp8(); +void move_l_pais_adr16_dp8(); +void move_l_das_adr16_dp8(); +void move_l_dais_adr16_dp8(); +void move_l_adr16_adr16_dp8(); +void move_l_adr32_adr16_dp8(); +void move_l_dpc_adr16_dp8(); +void move_l_dpci_adr16_dp8(); +void move_l_imm32_adr16_dp8(); +void move_l_ds_adr32_dp8(); +void move_l_as_adr32_dp8(); +void move_l_ais_adr32_dp8(); +void move_l_aips_adr32_dp8(); +void move_l_pais_adr32_dp8(); +void move_l_das_adr32_dp8(); +void move_l_dais_adr32_dp8(); +void move_l_adr16_adr32_dp8(); +void move_l_adr32_adr32_dp8(); +void move_l_dpc_adr32_dp8(); +void move_l_dpci_adr32_dp8(); +void move_l_imm32_adr32_dp8(); +void move_w_ds_dd_dp8(); +void move_w_as_dd_dp8(); +void move_w_ais_dd_dp8(); +void move_w_aips_dd_dp8(); +void move_w_pais_dd_dp8(); +void move_w_das_dd_dp8(); +void move_w_dais_dd_dp8(); +void move_w_adr16_dd_dp8(); +void move_w_adr32_dd_dp8(); +void move_w_dpc_dd_dp8(); +void move_w_dpci_dd_dp8(); +void move_w_imm16_dd_dp8(); +void movea_w_ds_ad_dp8(); +void movea_w_as_ad_dp8(); +void movea_w_ais_ad_dp8(); +void movea_w_aips_ad_dp8(); +void movea_w_pais_ad_dp8(); +void movea_w_das_ad_dp8(); +void movea_w_dais_ad_dp8(); +void movea_w_adr16_ad_dp8(); +void movea_w_adr32_ad_dp8(); +void movea_w_dpc_ad_dp8(); +void movea_w_dpci_ad_dp8(); +void movea_w_imm16_ad_dp8(); +void move_w_ds_aid_dp8(); +void move_w_as_aid_dp8(); +void move_w_ais_aid_dp8(); +void move_w_aips_aid_dp8(); +void move_w_pais_aid_dp8(); +void move_w_das_aid_dp8(); +void move_w_dais_aid_dp8(); +void move_w_adr16_aid_dp8(); +void move_w_adr32_aid_dp8(); +void move_w_dpc_aid_dp8(); +void move_w_dpci_aid_dp8(); +void move_w_imm16_aid_dp8(); +void move_w_ds_aipd_dp8(); +void move_w_as_aipd_dp8(); +void move_w_ais_aipd_dp8(); +void move_w_aips_aipd_dp8(); +void move_w_pais_aipd_dp8(); +void move_w_das_aipd_dp8(); +void move_w_dais_aipd_dp8(); +void move_w_adr16_aipd_dp8(); +void move_w_adr32_aipd_dp8(); +void move_w_dpc_aipd_dp8(); +void move_w_dpci_aipd_dp8(); +void move_w_imm16_aipd_dp8(); +void move_w_ds_paid_dp8(); +void move_w_as_paid_dp8(); +void move_w_ais_paid_dp8(); +void move_w_aips_paid_dp8(); +void move_w_pais_paid_dp8(); +void move_w_das_paid_dp8(); +void move_w_dais_paid_dp8(); +void move_w_adr16_paid_dp8(); +void move_w_adr32_paid_dp8(); +void move_w_dpc_paid_dp8(); +void move_w_dpci_paid_dp8(); +void move_w_imm16_paid_dp8(); +void move_w_ds_dad_dp8(); +void move_w_as_dad_dp8(); +void move_w_ais_dad_dp8(); +void move_w_aips_dad_dp8(); +void move_w_pais_dad_dp8(); +void move_w_das_dad_dp8(); +void move_w_dais_dad_dp8(); +void move_w_adr16_dad_dp8(); +void move_w_adr32_dad_dp8(); +void move_w_dpc_dad_dp8(); +void move_w_dpci_dad_dp8(); +void move_w_imm16_dad_dp8(); +void move_w_ds_daid_dp8(); +void move_w_as_daid_dp8(); +void move_w_ais_daid_dp8(); +void move_w_aips_daid_dp8(); +void move_w_pais_daid_dp8(); +void move_w_das_daid_dp8(); +void move_w_dais_daid_dp8(); +void move_w_adr16_daid_dp8(); +void move_w_adr32_daid_dp8(); +void move_w_dpc_daid_dp8(); +void move_w_dpci_daid_dp8(); +void move_w_imm16_daid_dp8(); +void move_w_ds_adr16_dp8(); +void move_w_as_adr16_dp8(); +void move_w_ais_adr16_dp8(); +void move_w_aips_adr16_dp8(); +void move_w_pais_adr16_dp8(); +void move_w_das_adr16_dp8(); +void move_w_dais_adr16_dp8(); +void move_w_adr16_adr16_dp8(); +void move_w_adr32_adr16_dp8(); +void move_w_dpc_adr16_dp8(); +void move_w_dpci_adr16_dp8(); +void move_w_imm16_adr16_dp8(); +void move_w_ds_adr32_dp8(); +void move_w_as_adr32_dp8(); +void move_w_ais_adr32_dp8(); +void move_w_aips_adr32_dp8(); +void move_w_pais_adr32_dp8(); +void move_w_das_adr32_dp8(); +void move_w_dais_adr32_dp8(); +void move_w_adr16_adr32_dp8(); +void move_w_adr32_adr32_dp8(); +void move_w_dpc_adr32_dp8(); +void move_w_dpci_adr32_dp8(); +void move_w_imm16_adr32_dp8(); +void negx_b_ds_dp8(); +void negx_b_ais_dp8(); +void negx_b_aips_dp8(); +void negx_b_pais_dp8(); +void negx_b_das_dp8(); +void negx_b_dais_dp8(); +void negx_b_adr16_dp8(); +void negx_b_adr32_dp8(); +void negx_w_ds_dp8(); +void negx_w_ais_dp8(); +void negx_w_aips_dp8(); +void negx_w_pais_dp8(); +void negx_w_das_dp8(); +void negx_w_dais_dp8(); +void negx_w_adr16_dp8(); +void negx_w_adr32_dp8(); +void negx_l_ds_dp8(); +void negx_l_ais_dp8(); +void negx_l_aips_dp8(); +void negx_l_pais_dp8(); +void negx_l_das_dp8(); +void negx_l_dais_dp8(); +void negx_l_adr16_dp8(); +void negx_l_adr32_dp8(); +void move_sr_ds_dp8(); +void move_sr_ais_dp8(); +void move_sr_aips_dp8(); +void move_sr_pais_dp8(); +void move_sr_das_dp8(); +void move_sr_dais_dp8(); +void move_sr_adr16_dp8(); +void move_sr_adr32_dp8(); +void chk_w_ds_dd_dp8(); +void chk_w_ais_dd_dp8(); +void chk_w_aips_dd_dp8(); +void chk_w_pais_dd_dp8(); +void chk_w_das_dd_dp8(); +void chk_w_dais_dd_dp8(); +void chk_w_adr16_dd_dp8(); +void chk_w_adr32_dd_dp8(); +void chk_w_dpc_dd_dp8(); +void chk_w_dpci_dd_dp8(); +void chk_w_imm16_dd_dp8(); +void lea_ais_ad_dp8(); +void lea_das_ad_dp8(); +void lea_dais_ad_dp8(); +void lea_adr16_ad_dp8(); +void lea_adr32_ad_dp8(); +void lea_dpc_ad_dp8(); +void lea_dpci_ad_dp8(); +void clr_b_ds_dp8(); +void clr_b_ais_dp8(); +void clr_b_aips_dp8(); +void clr_b_pais_dp8(); +void clr_b_das_dp8(); +void clr_b_dais_dp8(); +void clr_b_adr16_dp8(); +void clr_b_adr32_dp8(); +void clr_w_ds_dp8(); +void clr_w_ais_dp8(); +void clr_w_aips_dp8(); +void clr_w_pais_dp8(); +void clr_w_das_dp8(); +void clr_w_dais_dp8(); +void clr_w_adr16_dp8(); +void clr_w_adr32_dp8(); +void clr_l_ds_dp8(); +void clr_l_ais_dp8(); +void clr_l_aips_dp8(); +void clr_l_pais_dp8(); +void clr_l_das_dp8(); +void clr_l_dais_dp8(); +void clr_l_adr16_dp8(); +void clr_l_adr32_dp8(); +void neg_b_ds_dp8(); +void neg_b_ais_dp8(); +void neg_b_aips_dp8(); +void neg_b_pais_dp8(); +void neg_b_das_dp8(); +void neg_b_dais_dp8(); +void neg_b_adr16_dp8(); +void neg_b_adr32_dp8(); +void neg_w_ds_dp8(); +void neg_w_ais_dp8(); +void neg_w_aips_dp8(); +void neg_w_pais_dp8(); +void neg_w_das_dp8(); +void neg_w_dais_dp8(); +void neg_w_adr16_dp8(); +void neg_w_adr32_dp8(); +void neg_l_ds_dp8(); +void neg_l_ais_dp8(); +void neg_l_aips_dp8(); +void neg_l_pais_dp8(); +void neg_l_das_dp8(); +void neg_l_dais_dp8(); +void neg_l_adr16_dp8(); +void neg_l_adr32_dp8(); +void move_ds_ccr_dp8(); +void move_ais_ccr_dp8(); +void move_aips_ccr_dp8(); +void move_pais_ccr_dp8(); +void move_das_ccr_dp8(); +void move_dais_ccr_dp8(); +void move_adr16_ccr_dp8(); +void move_adr32_ccr_dp8(); +void move_dpc_ccr_dp8(); +void move_dpci_ccr_dp8(); +void move_imm8_ccr_dp8(); +void not_b_ds_dp8(); +void not_b_ais_dp8(); +void not_b_aips_dp8(); +void not_b_pais_dp8(); +void not_b_das_dp8(); +void not_b_dais_dp8(); +void not_b_adr16_dp8(); +void not_b_adr32_dp8(); +void not_w_ds_dp8(); +void not_w_ais_dp8(); +void not_w_aips_dp8(); +void not_w_pais_dp8(); +void not_w_das_dp8(); +void not_w_dais_dp8(); +void not_w_adr16_dp8(); +void not_w_adr32_dp8(); +void not_l_ds_dp8(); +void not_l_ais_dp8(); +void not_l_aips_dp8(); +void not_l_pais_dp8(); +void not_l_das_dp8(); +void not_l_dais_dp8(); +void not_l_adr16_dp8(); +void not_l_adr32_dp8(); +void move_ds_sr_dp8(); +void move_ais_sr_dp8(); +void move_aips_sr_dp8(); +void move_pais_sr_dp8(); +void move_das_sr_dp8(); +void move_dais_sr_dp8(); +void move_adr16_sr_dp8(); +void move_adr32_sr_dp8(); +void move_dpc_sr_dp8(); +void move_dpci_sr_dp8(); +void move_i16u_sr_dp8(); +void nbcd_b_ds_dp8(); +void nbcd_b_ais_dp8(); +void nbcd_b_aips_dp8(); +void nbcd_b_pais_dp8(); +void nbcd_b_das_dp8(); +void nbcd_b_dais_dp8(); +void nbcd_b_adr16_dp8(); +void nbcd_b_adr32_dp8(); +void swap_ds_dp8(); +void pea_ais_dp8(); +void pea_das_dp8(); +void pea_dais_dp8(); +void pea_adr16_dp8(); +void pea_adr32_dp8(); +void pea_dpc_dp8(); +void pea_dpci_dp8(); +void ext_w_ds_dp8(); +void movem_w_list_ais_dp8(); +void movem_w_listp_pais_dp8(); +void movem_w_list_das_dp8(); +void movem_w_list_dais_dp8(); +void movem_w_list_adr16_dp8(); +void movem_w_list_adr32_dp8(); +void ext_l_ds_dp8(); +void movem_l_list_ais_dp8(); +void movem_l_listp_pais_dp8(); +void movem_l_list_das_dp8(); +void movem_l_list_dais_dp8(); +void movem_l_list_adr16_dp8(); +void movem_l_list_adr32_dp8(); +void tst_b_ds_dp8(); +void tst_b_ais_dp8(); +void tst_b_aips_dp8(); +void tst_b_pais_dp8(); +void tst_b_das_dp8(); +void tst_b_dais_dp8(); +void tst_b_adr16_dp8(); +void tst_b_adr32_dp8(); +void tst_w_ds_dp8(); +void tst_w_ais_dp8(); +void tst_w_aips_dp8(); +void tst_w_pais_dp8(); +void tst_w_das_dp8(); +void tst_w_dais_dp8(); +void tst_w_adr16_dp8(); +void tst_w_adr32_dp8(); +void tst_l_ds_dp8(); +void tst_l_ais_dp8(); +void tst_l_aips_dp8(); +void tst_l_pais_dp8(); +void tst_l_das_dp8(); +void tst_l_dais_dp8(); +void tst_l_adr16_dp8(); +void tst_l_adr32_dp8(); +void tas_ds_dp8(); +void tas_ais_dp8(); +void tas_aips_dp8(); +void tas_pais_dp8(); +void tas_das_dp8(); +void tas_dais_dp8(); +void tas_adr16_dp8(); +void tas_adr32_dp8(); +void movem_w_ais_list_dp8(); +void movem_w_aips_list_dp8(); +void movem_w_das_list_dp8(); +void movem_w_dais_list_dp8(); +void movem_w_adr16_list_dp8(); +void movem_w_adr32_list_dp8(); +void movem_w_dpc_list_dp8(); +void movem_w_dpci_list_dp8(); +void movem_l_ais_list_dp8(); +void movem_l_aips_list_dp8(); +void movem_l_das_list_dp8(); +void movem_l_dais_list_dp8(); +void movem_l_adr16_list_dp8(); +void movem_l_adr32_list_dp8(); +void movem_l_dpc_list_dp8(); +void movem_l_dpci_list_dp8(); +void trap_imm4_dp8(); +void link_as_imm16_dp8(); +void unlk_as_dp8(); +void move_as_usp_dp8(); +void move_usp_as_dp8(); +void reset_dp8(); +void nop_dp8(); +void stop_i16u_dp8(); +void rte_dp8(); +void rts_dp8(); +void trapv_dp8(); +void rtr_dp8(); +void jsr_ais_dp8(); +void jsr_das_dp8(); +void jsr_dais_dp8(); +void jsr_adr16_dp8(); +void jsr_adr32_dp8(); +void jsr_dpc_dp8(); +void jsr_dpci_dp8(); +void jmp_ais_dp8(); +void jmp_das_dp8(); +void jmp_dais_dp8(); +void jmp_adr16_dp8(); +void jmp_adr32_dp8(); +void jmp_dpc_dp8(); +void jmp_dpci_dp8(); +void addq_b_imm3_ds_dp8(); +void addq_b_imm3_ais_dp8(); +void addq_b_imm3_aips_dp8(); +void addq_b_imm3_pais_dp8(); +void addq_b_imm3_das_dp8(); +void addq_b_imm3_dais_dp8(); +void addq_b_imm3_adr16_dp8(); +void addq_b_imm3_adr32_dp8(); +void addq_w_imm3_ds_dp8(); +void addq_w_imm3_as_dp8(); +void addq_w_imm3_ais_dp8(); +void addq_w_imm3_aips_dp8(); +void addq_w_imm3_pais_dp8(); +void addq_w_imm3_das_dp8(); +void addq_w_imm3_dais_dp8(); +void addq_w_imm3_adr16_dp8(); +void addq_w_imm3_adr32_dp8(); +void addq_l_imm3_ds_dp8(); +void addq_l_imm3_as_dp8(); +void addq_l_imm3_ais_dp8(); +void addq_l_imm3_aips_dp8(); +void addq_l_imm3_pais_dp8(); +void addq_l_imm3_das_dp8(); +void addq_l_imm3_dais_dp8(); +void addq_l_imm3_adr16_dp8(); +void addq_l_imm3_adr32_dp8(); +void st_ds_dp8(); +void dbt_ds_rel16_dp8(); +void st_ais_dp8(); +void st_aips_dp8(); +void st_pais_dp8(); +void st_das_dp8(); +void st_dais_dp8(); +void st_adr16_dp8(); +void st_adr32_dp8(); +void subq_b_imm3_ds_dp8(); +void subq_b_imm3_ais_dp8(); +void subq_b_imm3_aips_dp8(); +void subq_b_imm3_pais_dp8(); +void subq_b_imm3_das_dp8(); +void subq_b_imm3_dais_dp8(); +void subq_b_imm3_adr16_dp8(); +void subq_b_imm3_adr32_dp8(); +void subq_w_imm3_ds_dp8(); +void subq_w_imm3_as_dp8(); +void subq_w_imm3_ais_dp8(); +void subq_w_imm3_aips_dp8(); +void subq_w_imm3_pais_dp8(); +void subq_w_imm3_das_dp8(); +void subq_w_imm3_dais_dp8(); +void subq_w_imm3_adr16_dp8(); +void subq_w_imm3_adr32_dp8(); +void subq_l_imm3_ds_dp8(); +void subq_l_imm3_as_dp8(); +void subq_l_imm3_ais_dp8(); +void subq_l_imm3_aips_dp8(); +void subq_l_imm3_pais_dp8(); +void subq_l_imm3_das_dp8(); +void subq_l_imm3_dais_dp8(); +void subq_l_imm3_adr16_dp8(); +void subq_l_imm3_adr32_dp8(); +void sf_ds_dp8(); +void dbra_ds_rel16_dp8(); +void sf_ais_dp8(); +void sf_aips_dp8(); +void sf_pais_dp8(); +void sf_das_dp8(); +void sf_dais_dp8(); +void sf_adr16_dp8(); +void sf_adr32_dp8(); +void shi_ds_dp8(); +void dbhi_ds_rel16_dp8(); +void shi_ais_dp8(); +void shi_aips_dp8(); +void shi_pais_dp8(); +void shi_das_dp8(); +void shi_dais_dp8(); +void shi_adr16_dp8(); +void shi_adr32_dp8(); +void sls_ds_dp8(); +void dbls_ds_rel16_dp8(); +void sls_ais_dp8(); +void sls_aips_dp8(); +void sls_pais_dp8(); +void sls_das_dp8(); +void sls_dais_dp8(); +void sls_adr16_dp8(); +void sls_adr32_dp8(); +void scc_ds_dp8(); +void dbcc_ds_rel16_dp8(); +void scc_ais_dp8(); +void scc_aips_dp8(); +void scc_pais_dp8(); +void scc_das_dp8(); +void scc_dais_dp8(); +void scc_adr16_dp8(); +void scc_adr32_dp8(); +void scs_ds_dp8(); +void dbcs_ds_rel16_dp8(); +void scs_ais_dp8(); +void scs_aips_dp8(); +void scs_pais_dp8(); +void scs_das_dp8(); +void scs_dais_dp8(); +void scs_adr16_dp8(); +void scs_adr32_dp8(); +void sne_ds_dp8(); +void dbne_ds_rel16_dp8(); +void sne_ais_dp8(); +void sne_aips_dp8(); +void sne_pais_dp8(); +void sne_das_dp8(); +void sne_dais_dp8(); +void sne_adr16_dp8(); +void sne_adr32_dp8(); +void seq_ds_dp8(); +void dbeq_ds_rel16_dp8(); +void seq_ais_dp8(); +void seq_aips_dp8(); +void seq_pais_dp8(); +void seq_das_dp8(); +void seq_dais_dp8(); +void seq_adr16_dp8(); +void seq_adr32_dp8(); +void svc_ds_dp8(); +void dbvc_ds_rel16_dp8(); +void svc_ais_dp8(); +void svc_aips_dp8(); +void svc_pais_dp8(); +void svc_das_dp8(); +void svc_dais_dp8(); +void svc_adr16_dp8(); +void svc_adr32_dp8(); +void svs_ds_dp8(); +void dbvs_ds_rel16_dp8(); +void svs_ais_dp8(); +void svs_aips_dp8(); +void svs_pais_dp8(); +void svs_das_dp8(); +void svs_dais_dp8(); +void svs_adr16_dp8(); +void svs_adr32_dp8(); +void spl_ds_dp8(); +void dbpl_ds_rel16_dp8(); +void spl_ais_dp8(); +void spl_aips_dp8(); +void spl_pais_dp8(); +void spl_das_dp8(); +void spl_dais_dp8(); +void spl_adr16_dp8(); +void spl_adr32_dp8(); +void smi_ds_dp8(); +void dbmi_ds_rel16_dp8(); +void smi_ais_dp8(); +void smi_aips_dp8(); +void smi_pais_dp8(); +void smi_das_dp8(); +void smi_dais_dp8(); +void smi_adr16_dp8(); +void smi_adr32_dp8(); +void sge_ds_dp8(); +void dbge_ds_rel16_dp8(); +void sge_ais_dp8(); +void sge_aips_dp8(); +void sge_pais_dp8(); +void sge_das_dp8(); +void sge_dais_dp8(); +void sge_adr16_dp8(); +void sge_adr32_dp8(); +void slt_ds_dp8(); +void dblt_ds_rel16_dp8(); +void slt_ais_dp8(); +void slt_aips_dp8(); +void slt_pais_dp8(); +void slt_das_dp8(); +void slt_dais_dp8(); +void slt_adr16_dp8(); +void slt_adr32_dp8(); +void sgt_ds_dp8(); +void dbgt_ds_rel16_dp8(); +void sgt_ais_dp8(); +void sgt_aips_dp8(); +void sgt_pais_dp8(); +void sgt_das_dp8(); +void sgt_dais_dp8(); +void sgt_adr16_dp8(); +void sgt_adr32_dp8(); +void sle_ds_dp8(); +void dble_ds_rel16_dp8(); +void sle_ais_dp8(); +void sle_aips_dp8(); +void sle_pais_dp8(); +void sle_das_dp8(); +void sle_dais_dp8(); +void sle_adr16_dp8(); +void sle_adr32_dp8(); +void bra_rel16_dp8(); +void bra_rel8_dp8(); +void bsr_rel16_dp8(); +void bsr_rel8_dp8(); +void bhi_rel16_dp8(); +void bhi_rel8_dp8(); +void bls_rel16_dp8(); +void bls_rel8_dp8(); +void bcc_rel16_dp8(); +void bcc_rel8_dp8(); +void bcs_rel16_dp8(); +void bcs_rel8_dp8(); +void bne_rel16_dp8(); +void bne_rel8_dp8(); +void beq_rel16_dp8(); +void beq_rel8_dp8(); +void bvc_rel16_dp8(); +void bvc_rel8_dp8(); +void bvs_rel16_dp8(); +void bvs_rel8_dp8(); +void bpl_rel16_dp8(); +void bpl_rel8_dp8(); +void bmi_rel16_dp8(); +void bmi_rel8_dp8(); +void bge_rel16_dp8(); +void bge_rel8_dp8(); +void blt_rel16_dp8(); +void blt_rel8_dp8(); +void bgt_rel16_dp8(); +void bgt_rel8_dp8(); +void ble_rel16_dp8(); +void ble_rel8_dp8(); +void moveq_imm8o_dd_dp8(); +void or_b_ds_dd_dp8(); +void or_b_ais_dd_dp8(); +void or_b_aips_dd_dp8(); +void or_b_pais_dd_dp8(); +void or_b_das_dd_dp8(); +void or_b_dais_dd_dp8(); +void or_b_adr16_dd_dp8(); +void or_b_adr32_dd_dp8(); +void or_b_dpc_dd_dp8(); +void or_b_dpci_dd_dp8(); +void or_b_imm8_dd_dp8(); +void or_w_ds_dd_dp8(); +void or_w_ais_dd_dp8(); +void or_w_aips_dd_dp8(); +void or_w_pais_dd_dp8(); +void or_w_das_dd_dp8(); +void or_w_dais_dd_dp8(); +void or_w_adr16_dd_dp8(); +void or_w_adr32_dd_dp8(); +void or_w_dpc_dd_dp8(); +void or_w_dpci_dd_dp8(); +void or_w_imm16_dd_dp8(); +void or_l_ds_dd_dp8(); +void or_l_ais_dd_dp8(); +void or_l_aips_dd_dp8(); +void or_l_pais_dd_dp8(); +void or_l_das_dd_dp8(); +void or_l_dais_dd_dp8(); +void or_l_adr16_dd_dp8(); +void or_l_adr32_dd_dp8(); +void or_l_dpc_dd_dp8(); +void or_l_dpci_dd_dp8(); +void or_l_imm32_dd_dp8(); +void divu_w_ds_dd_dp8(); +void divu_w_ais_dd_dp8(); +void divu_w_aips_dd_dp8(); +void divu_w_pais_dd_dp8(); +void divu_w_das_dd_dp8(); +void divu_w_dais_dd_dp8(); +void divu_w_adr16_dd_dp8(); +void divu_w_adr32_dd_dp8(); +void divu_w_dpc_dd_dp8(); +void divu_w_dpci_dd_dp8(); +void divu_w_imm16_dd_dp8(); +void sbcd_ds_dd_dp8(); +void sbcd_pais_paid_dp8(); +void or_b_dd_ais_dp8(); +void or_b_dd_aips_dp8(); +void or_b_dd_pais_dp8(); +void or_b_dd_das_dp8(); +void or_b_dd_dais_dp8(); +void or_b_dd_adr16_dp8(); +void or_b_dd_adr32_dp8(); +void or_w_dd_ais_dp8(); +void or_w_dd_aips_dp8(); +void or_w_dd_pais_dp8(); +void or_w_dd_das_dp8(); +void or_w_dd_dais_dp8(); +void or_w_dd_adr16_dp8(); +void or_w_dd_adr32_dp8(); +void or_l_dd_ais_dp8(); +void or_l_dd_aips_dp8(); +void or_l_dd_pais_dp8(); +void or_l_dd_das_dp8(); +void or_l_dd_dais_dp8(); +void or_l_dd_adr16_dp8(); +void or_l_dd_adr32_dp8(); +void divs_w_ds_dd_dp8(); +void divs_w_ais_dd_dp8(); +void divs_w_aips_dd_dp8(); +void divs_w_pais_dd_dp8(); +void divs_w_das_dd_dp8(); +void divs_w_dais_dd_dp8(); +void divs_w_adr16_dd_dp8(); +void divs_w_adr32_dd_dp8(); +void divs_w_dpc_dd_dp8(); +void divs_w_dpci_dd_dp8(); +void divs_w_imm16_dd_dp8(); +void sub_b_ds_dd_dp8(); +void sub_b_ais_dd_dp8(); +void sub_b_aips_dd_dp8(); +void sub_b_pais_dd_dp8(); +void sub_b_das_dd_dp8(); +void sub_b_dais_dd_dp8(); +void sub_b_adr16_dd_dp8(); +void sub_b_adr32_dd_dp8(); +void sub_b_dpc_dd_dp8(); +void sub_b_dpci_dd_dp8(); +void sub_b_imm8_dd_dp8(); +void sub_w_ds_dd_dp8(); +void sub_w_as_dd_dp8(); +void sub_w_ais_dd_dp8(); +void sub_w_aips_dd_dp8(); +void sub_w_pais_dd_dp8(); +void sub_w_das_dd_dp8(); +void sub_w_dais_dd_dp8(); +void sub_w_adr16_dd_dp8(); +void sub_w_adr32_dd_dp8(); +void sub_w_dpc_dd_dp8(); +void sub_w_dpci_dd_dp8(); +void sub_w_imm16_dd_dp8(); +void sub_l_ds_dd_dp8(); +void sub_l_as_dd_dp8(); +void sub_l_ais_dd_dp8(); +void sub_l_aips_dd_dp8(); +void sub_l_pais_dd_dp8(); +void sub_l_das_dd_dp8(); +void sub_l_dais_dd_dp8(); +void sub_l_adr16_dd_dp8(); +void sub_l_adr32_dd_dp8(); +void sub_l_dpc_dd_dp8(); +void sub_l_dpci_dd_dp8(); +void sub_l_imm32_dd_dp8(); +void suba_w_ds_ad_dp8(); +void suba_w_as_ad_dp8(); +void suba_w_ais_ad_dp8(); +void suba_w_aips_ad_dp8(); +void suba_w_pais_ad_dp8(); +void suba_w_das_ad_dp8(); +void suba_w_dais_ad_dp8(); +void suba_w_adr16_ad_dp8(); +void suba_w_adr32_ad_dp8(); +void suba_w_dpc_ad_dp8(); +void suba_w_dpci_ad_dp8(); +void suba_w_imm16_ad_dp8(); +void subx_b_ds_dd_dp8(); +void subx_b_pais_paid_dp8(); +void sub_b_dd_ais_dp8(); +void sub_b_dd_aips_dp8(); +void sub_b_dd_pais_dp8(); +void sub_b_dd_das_dp8(); +void sub_b_dd_dais_dp8(); +void sub_b_dd_adr16_dp8(); +void sub_b_dd_adr32_dp8(); +void subx_w_ds_dd_dp8(); +void subx_w_pais_paid_dp8(); +void sub_w_dd_ais_dp8(); +void sub_w_dd_aips_dp8(); +void sub_w_dd_pais_dp8(); +void sub_w_dd_das_dp8(); +void sub_w_dd_dais_dp8(); +void sub_w_dd_adr16_dp8(); +void sub_w_dd_adr32_dp8(); +void subx_l_ds_dd_dp8(); +void subx_l_pais_paid_dp8(); +void sub_l_dd_ais_dp8(); +void sub_l_dd_aips_dp8(); +void sub_l_dd_pais_dp8(); +void sub_l_dd_das_dp8(); +void sub_l_dd_dais_dp8(); +void sub_l_dd_adr16_dp8(); +void sub_l_dd_adr32_dp8(); +void suba_l_ds_ad_dp8(); +void suba_l_as_ad_dp8(); +void suba_l_ais_ad_dp8(); +void suba_l_aips_ad_dp8(); +void suba_l_pais_ad_dp8(); +void suba_l_das_ad_dp8(); +void suba_l_dais_ad_dp8(); +void suba_l_adr16_ad_dp8(); +void suba_l_adr32_ad_dp8(); +void suba_l_dpc_ad_dp8(); +void suba_l_dpci_ad_dp8(); +void suba_l_imm32_ad_dp8(); +void cmp_b_ds_dd_dp8(); +void cmp_b_ais_dd_dp8(); +void cmp_b_aips_dd_dp8(); +void cmp_b_pais_dd_dp8(); +void cmp_b_das_dd_dp8(); +void cmp_b_dais_dd_dp8(); +void cmp_b_adr16_dd_dp8(); +void cmp_b_adr32_dd_dp8(); +void cmp_b_dpc_dd_dp8(); +void cmp_b_dpci_dd_dp8(); +void cmp_b_imm8_dd_dp8(); +void cmp_w_ds_dd_dp8(); +void cmp_w_as_dd_dp8(); +void cmp_w_ais_dd_dp8(); +void cmp_w_aips_dd_dp8(); +void cmp_w_pais_dd_dp8(); +void cmp_w_das_dd_dp8(); +void cmp_w_dais_dd_dp8(); +void cmp_w_adr16_dd_dp8(); +void cmp_w_adr32_dd_dp8(); +void cmp_w_dpc_dd_dp8(); +void cmp_w_dpci_dd_dp8(); +void cmp_w_imm16_dd_dp8(); +void cmp_l_ds_dd_dp8(); +void cmp_l_as_dd_dp8(); +void cmp_l_ais_dd_dp8(); +void cmp_l_aips_dd_dp8(); +void cmp_l_pais_dd_dp8(); +void cmp_l_das_dd_dp8(); +void cmp_l_dais_dd_dp8(); +void cmp_l_adr16_dd_dp8(); +void cmp_l_adr32_dd_dp8(); +void cmp_l_dpc_dd_dp8(); +void cmp_l_dpci_dd_dp8(); +void cmp_l_imm32_dd_dp8(); +void cmpa_w_ds_ad_dp8(); +void cmpa_w_as_ad_dp8(); +void cmpa_w_ais_ad_dp8(); +void cmpa_w_aips_ad_dp8(); +void cmpa_w_pais_ad_dp8(); +void cmpa_w_das_ad_dp8(); +void cmpa_w_dais_ad_dp8(); +void cmpa_w_adr16_ad_dp8(); +void cmpa_w_adr32_ad_dp8(); +void cmpa_w_dpc_ad_dp8(); +void cmpa_w_dpci_ad_dp8(); +void cmpa_w_imm16_ad_dp8(); +void eor_b_dd_ds_dp8(); +void cmpm_b_aips_aipd_dp8(); +void eor_b_dd_ais_dp8(); +void eor_b_dd_aips_dp8(); +void eor_b_dd_pais_dp8(); +void eor_b_dd_das_dp8(); +void eor_b_dd_dais_dp8(); +void eor_b_dd_adr16_dp8(); +void eor_b_dd_adr32_dp8(); +void eor_w_dd_ds_dp8(); +void cmpm_w_aips_aipd_dp8(); +void eor_w_dd_ais_dp8(); +void eor_w_dd_aips_dp8(); +void eor_w_dd_pais_dp8(); +void eor_w_dd_das_dp8(); +void eor_w_dd_dais_dp8(); +void eor_w_dd_adr16_dp8(); +void eor_w_dd_adr32_dp8(); +void eor_l_dd_ds_dp8(); +void cmpm_l_aips_aipd_dp8(); +void eor_l_dd_ais_dp8(); +void eor_l_dd_aips_dp8(); +void eor_l_dd_pais_dp8(); +void eor_l_dd_das_dp8(); +void eor_l_dd_dais_dp8(); +void eor_l_dd_adr16_dp8(); +void eor_l_dd_adr32_dp8(); +void cmpa_l_ds_ad_dp8(); +void cmpa_l_as_ad_dp8(); +void cmpa_l_ais_ad_dp8(); +void cmpa_l_aips_ad_dp8(); +void cmpa_l_pais_ad_dp8(); +void cmpa_l_das_ad_dp8(); +void cmpa_l_dais_ad_dp8(); +void cmpa_l_adr16_ad_dp8(); +void cmpa_l_adr32_ad_dp8(); +void cmpa_l_dpc_ad_dp8(); +void cmpa_l_dpci_ad_dp8(); +void cmpa_l_imm32_ad_dp8(); +void and_b_ds_dd_dp8(); +void and_b_ais_dd_dp8(); +void and_b_aips_dd_dp8(); +void and_b_pais_dd_dp8(); +void and_b_das_dd_dp8(); +void and_b_dais_dd_dp8(); +void and_b_adr16_dd_dp8(); +void and_b_adr32_dd_dp8(); +void and_b_dpc_dd_dp8(); +void and_b_dpci_dd_dp8(); +void and_b_imm8_dd_dp8(); +void and_w_ds_dd_dp8(); +void and_w_ais_dd_dp8(); +void and_w_aips_dd_dp8(); +void and_w_pais_dd_dp8(); +void and_w_das_dd_dp8(); +void and_w_dais_dd_dp8(); +void and_w_adr16_dd_dp8(); +void and_w_adr32_dd_dp8(); +void and_w_dpc_dd_dp8(); +void and_w_dpci_dd_dp8(); +void and_w_imm16_dd_dp8(); +void and_l_ds_dd_dp8(); +void and_l_ais_dd_dp8(); +void and_l_aips_dd_dp8(); +void and_l_pais_dd_dp8(); +void and_l_das_dd_dp8(); +void and_l_dais_dd_dp8(); +void and_l_adr16_dd_dp8(); +void and_l_adr32_dd_dp8(); +void and_l_dpc_dd_dp8(); +void and_l_dpci_dd_dp8(); +void and_l_imm32_dd_dp8(); +void mulu_w_ds_dd_dp8(); +void mulu_w_ais_dd_dp8(); +void mulu_w_aips_dd_dp8(); +void mulu_w_pais_dd_dp8(); +void mulu_w_das_dd_dp8(); +void mulu_w_dais_dd_dp8(); +void mulu_w_adr16_dd_dp8(); +void mulu_w_adr32_dd_dp8(); +void mulu_w_dpc_dd_dp8(); +void mulu_w_dpci_dd_dp8(); +void mulu_w_imm16_dd_dp8(); +void abcd_ds_dd_dp8(); +void abcd_pais_paid_dp8(); +void and_b_dd_ais_dp8(); +void and_b_dd_aips_dp8(); +void and_b_dd_pais_dp8(); +void and_b_dd_das_dp8(); +void and_b_dd_dais_dp8(); +void and_b_dd_adr16_dp8(); +void and_b_dd_adr32_dp8(); +void exg_dd_ds_dp8(); +void exg_ad_as_dp8(); +void and_w_dd_ais_dp8(); +void and_w_dd_aips_dp8(); +void and_w_dd_pais_dp8(); +void and_w_dd_das_dp8(); +void and_w_dd_dais_dp8(); +void and_w_dd_adr16_dp8(); +void and_w_dd_adr32_dp8(); +void exg_dd_as_dp8(); +void and_l_dd_ais_dp8(); +void and_l_dd_aips_dp8(); +void and_l_dd_pais_dp8(); +void and_l_dd_das_dp8(); +void and_l_dd_dais_dp8(); +void and_l_dd_adr16_dp8(); +void and_l_dd_adr32_dp8(); +void muls_w_ds_dd_dp8(); +void muls_w_ais_dd_dp8(); +void muls_w_aips_dd_dp8(); +void muls_w_pais_dd_dp8(); +void muls_w_das_dd_dp8(); +void muls_w_dais_dd_dp8(); +void muls_w_adr16_dd_dp8(); +void muls_w_adr32_dd_dp8(); +void muls_w_dpc_dd_dp8(); +void muls_w_dpci_dd_dp8(); +void muls_w_imm16_dd_dp8(); +void add_b_ds_dd_dp8(); +void add_b_ais_dd_dp8(); +void add_b_aips_dd_dp8(); +void add_b_pais_dd_dp8(); +void add_b_das_dd_dp8(); +void add_b_dais_dd_dp8(); +void add_b_adr16_dd_dp8(); +void add_b_adr32_dd_dp8(); +void add_b_dpc_dd_dp8(); +void add_b_dpci_dd_dp8(); +void add_b_imm8_dd_dp8(); +void add_w_ds_dd_dp8(); +void add_w_as_dd_dp8(); +void add_w_ais_dd_dp8(); +void add_w_aips_dd_dp8(); +void add_w_pais_dd_dp8(); +void add_w_das_dd_dp8(); +void add_w_dais_dd_dp8(); +void add_w_adr16_dd_dp8(); +void add_w_adr32_dd_dp8(); +void add_w_dpc_dd_dp8(); +void add_w_dpci_dd_dp8(); +void add_w_imm16_dd_dp8(); +void add_l_ds_dd_dp8(); +void add_l_as_dd_dp8(); +void add_l_ais_dd_dp8(); +void add_l_aips_dd_dp8(); +void add_l_pais_dd_dp8(); +void add_l_das_dd_dp8(); +void add_l_dais_dd_dp8(); +void add_l_adr16_dd_dp8(); +void add_l_adr32_dd_dp8(); +void add_l_dpc_dd_dp8(); +void add_l_dpci_dd_dp8(); +void add_l_imm32_dd_dp8(); +void adda_w_ds_ad_dp8(); +void adda_w_as_ad_dp8(); +void adda_w_ais_ad_dp8(); +void adda_w_aips_ad_dp8(); +void adda_w_pais_ad_dp8(); +void adda_w_das_ad_dp8(); +void adda_w_dais_ad_dp8(); +void adda_w_adr16_ad_dp8(); +void adda_w_adr32_ad_dp8(); +void adda_w_dpc_ad_dp8(); +void adda_w_dpci_ad_dp8(); +void adda_w_imm16_ad_dp8(); +void addx_b_ds_dd_dp8(); +void addx_b_pais_paid_dp8(); +void add_b_dd_ais_dp8(); +void add_b_dd_aips_dp8(); +void add_b_dd_pais_dp8(); +void add_b_dd_das_dp8(); +void add_b_dd_dais_dp8(); +void add_b_dd_adr16_dp8(); +void add_b_dd_adr32_dp8(); +void addx_w_ds_dd_dp8(); +void addx_w_pais_paid_dp8(); +void add_w_dd_ais_dp8(); +void add_w_dd_aips_dp8(); +void add_w_dd_pais_dp8(); +void add_w_dd_das_dp8(); +void add_w_dd_dais_dp8(); +void add_w_dd_adr16_dp8(); +void add_w_dd_adr32_dp8(); +void addx_l_ds_dd_dp8(); +void addx_l_pais_paid_dp8(); +void add_l_dd_ais_dp8(); +void add_l_dd_aips_dp8(); +void add_l_dd_pais_dp8(); +void add_l_dd_das_dp8(); +void add_l_dd_dais_dp8(); +void add_l_dd_adr16_dp8(); +void add_l_dd_adr32_dp8(); +void adda_l_ds_ad_dp8(); +void adda_l_as_ad_dp8(); +void adda_l_ais_ad_dp8(); +void adda_l_aips_ad_dp8(); +void adda_l_pais_ad_dp8(); +void adda_l_das_ad_dp8(); +void adda_l_dais_ad_dp8(); +void adda_l_adr16_ad_dp8(); +void adda_l_adr32_ad_dp8(); +void adda_l_dpc_ad_dp8(); +void adda_l_dpci_ad_dp8(); +void adda_l_imm32_ad_dp8(); +void asr_b_imm3_ds_dp8(); +void lsr_b_imm3_ds_dp8(); +void roxr_b_imm3_ds_dp8(); +void ror_b_imm3_ds_dp8(); +void asr_b_dd_ds_dp8(); +void lsr_b_dd_ds_dp8(); +void roxr_b_dd_ds_dp8(); +void ror_b_dd_ds_dp8(); +void asr_w_imm3_ds_dp8(); +void lsr_w_imm3_ds_dp8(); +void roxr_w_imm3_ds_dp8(); +void ror_w_imm3_ds_dp8(); +void asr_w_dd_ds_dp8(); +void lsr_w_dd_ds_dp8(); +void roxr_w_dd_ds_dp8(); +void ror_w_dd_ds_dp8(); +void asr_l_imm3_ds_dp8(); +void lsr_l_imm3_ds_dp8(); +void roxr_l_imm3_ds_dp8(); +void ror_l_imm3_ds_dp8(); +void asr_l_dd_ds_dp8(); +void lsr_l_dd_ds_dp8(); +void roxr_l_dd_ds_dp8(); +void ror_l_dd_ds_dp8(); +void asr_ais_dp8(); +void asr_aips_dp8(); +void asr_pais_dp8(); +void asr_das_dp8(); +void asr_dais_dp8(); +void asr_adr16_dp8(); +void asr_adr32_dp8(); +void asl_b_imm3_ds_dp8(); +void lsl_b_imm3_ds_dp8(); +void roxl_b_imm3_ds_dp8(); +void rol_b_imm3_ds_dp8(); +void asl_b_dd_ds_dp8(); +void lsl_b_dd_ds_dp8(); +void roxl_b_dd_ds_dp8(); +void rol_b_dd_ds_dp8(); +void asl_w_imm3_ds_dp8(); +void lsl_w_imm3_ds_dp8(); +void roxl_w_imm3_ds_dp8(); +void rol_w_imm3_ds_dp8(); +void asl_w_dd_ds_dp8(); +void lsl_w_dd_ds_dp8(); +void roxl_w_dd_ds_dp8(); +void rol_w_dd_ds_dp8(); +void asl_l_imm3_ds_dp8(); +void lsl_l_imm3_ds_dp8(); +void roxl_l_imm3_ds_dp8(); +void rol_l_imm3_ds_dp8(); +void asl_l_dd_ds_dp8(); +void lsl_l_dd_ds_dp8(); +void roxl_l_dd_ds_dp8(); +void rol_l_dd_ds_dp8(); +void asl_ais_dp8(); +void asl_aips_dp8(); +void asl_pais_dp8(); +void asl_das_dp8(); +void asl_dais_dp8(); +void asl_adr16_dp8(); +void asl_adr32_dp8(); +void lsr_ais_dp8(); +void lsr_aips_dp8(); +void lsr_pais_dp8(); +void lsr_das_dp8(); +void lsr_dais_dp8(); +void lsr_adr16_dp8(); +void lsr_adr32_dp8(); +void lsl_ais_dp8(); +void lsl_aips_dp8(); +void lsl_pais_dp8(); +void lsl_das_dp8(); +void lsl_dais_dp8(); +void lsl_adr16_dp8(); +void lsl_adr32_dp8(); +void roxr_ais_dp8(); +void roxr_aips_dp8(); +void roxr_pais_dp8(); +void roxr_das_dp8(); +void roxr_dais_dp8(); +void roxr_adr16_dp8(); +void roxr_adr32_dp8(); +void roxl_ais_dp8(); +void roxl_aips_dp8(); +void roxl_pais_dp8(); +void roxl_das_dp8(); +void roxl_dais_dp8(); +void roxl_adr16_dp8(); +void roxl_adr32_dp8(); +void ror_ais_dp8(); +void ror_aips_dp8(); +void ror_pais_dp8(); +void ror_das_dp8(); +void ror_dais_dp8(); +void ror_adr16_dp8(); +void ror_adr32_dp8(); +void rol_ais_dp8(); +void rol_aips_dp8(); +void rol_pais_dp8(); +void rol_das_dp8(); +void rol_dais_dp8(); +void rol_adr16_dp8(); +void rol_adr32_dp8(); +void state_reset_ip8(); +void state_bus_error_ip8(); +void state_address_error_ip8(); +void state_double_fault_ip8(); +void state_interrupt_ip8(); +void state_trace_ip8(); +void state_illegal_ip8(); +void state_priviledge_ip8(); +void state_linea_ip8(); +void state_linef_ip8(); +void ori_b_imm8_ds_ip8(); +void ori_b_imm8_ais_ip8(); +void ori_b_imm8_aips_ip8(); +void ori_b_imm8_pais_ip8(); +void ori_b_imm8_das_ip8(); +void ori_b_imm8_dais_ip8(); +void ori_b_imm8_adr16_ip8(); +void ori_b_imm8_adr32_ip8(); +void ori_imm8_ccr_ip8(); +void ori_w_imm16_ds_ip8(); +void ori_w_imm16_ais_ip8(); +void ori_w_imm16_aips_ip8(); +void ori_w_imm16_pais_ip8(); +void ori_w_imm16_das_ip8(); +void ori_w_imm16_dais_ip8(); +void ori_w_imm16_adr16_ip8(); +void ori_w_imm16_adr32_ip8(); +void ori_i16u_sr_ip8(); +void ori_l_imm32_ds_ip8(); +void ori_l_imm32_ais_ip8(); +void ori_l_imm32_aips_ip8(); +void ori_l_imm32_pais_ip8(); +void ori_l_imm32_das_ip8(); +void ori_l_imm32_dais_ip8(); +void ori_l_imm32_adr16_ip8(); +void ori_l_imm32_adr32_ip8(); +void btst_dd_ds_ip8(); +void movep_w_das_dd_ip8(); +void btst_dd_ais_ip8(); +void btst_dd_aips_ip8(); +void btst_dd_pais_ip8(); +void btst_dd_das_ip8(); +void btst_dd_dais_ip8(); +void btst_dd_adr16_ip8(); +void btst_dd_adr32_ip8(); +void btst_dd_dpc_ip8(); +void btst_dd_dpci_ip8(); +void btst_dd_imm_ip8(); +void bchg_dd_ds_ip8(); +void movep_l_das_dd_ip8(); +void bchg_dd_ais_ip8(); +void bchg_dd_aips_ip8(); +void bchg_dd_pais_ip8(); +void bchg_dd_das_ip8(); +void bchg_dd_dais_ip8(); +void bchg_dd_adr16_ip8(); +void bchg_dd_adr32_ip8(); +void bclr_dd_ds_ip8(); +void movep_w_dd_das_ip8(); +void bclr_dd_ais_ip8(); +void bclr_dd_aips_ip8(); +void bclr_dd_pais_ip8(); +void bclr_dd_das_ip8(); +void bclr_dd_dais_ip8(); +void bclr_dd_adr16_ip8(); +void bclr_dd_adr32_ip8(); +void bset_dd_ds_ip8(); +void movep_l_dd_das_ip8(); +void bset_dd_ais_ip8(); +void bset_dd_aips_ip8(); +void bset_dd_pais_ip8(); +void bset_dd_das_ip8(); +void bset_dd_dais_ip8(); +void bset_dd_adr16_ip8(); +void bset_dd_adr32_ip8(); +void andi_b_imm8_ds_ip8(); +void andi_b_imm8_ais_ip8(); +void andi_b_imm8_aips_ip8(); +void andi_b_imm8_pais_ip8(); +void andi_b_imm8_das_ip8(); +void andi_b_imm8_dais_ip8(); +void andi_b_imm8_adr16_ip8(); +void andi_b_imm8_adr32_ip8(); +void andi_imm8_ccr_ip8(); +void andi_w_imm16_ds_ip8(); +void andi_w_imm16_ais_ip8(); +void andi_w_imm16_aips_ip8(); +void andi_w_imm16_pais_ip8(); +void andi_w_imm16_das_ip8(); +void andi_w_imm16_dais_ip8(); +void andi_w_imm16_adr16_ip8(); +void andi_w_imm16_adr32_ip8(); +void andi_i16u_sr_ip8(); +void andi_l_imm32_ds_ip8(); +void andi_l_imm32_ais_ip8(); +void andi_l_imm32_aips_ip8(); +void andi_l_imm32_pais_ip8(); +void andi_l_imm32_das_ip8(); +void andi_l_imm32_dais_ip8(); +void andi_l_imm32_adr16_ip8(); +void andi_l_imm32_adr32_ip8(); +void subi_b_imm8_ds_ip8(); +void subi_b_imm8_ais_ip8(); +void subi_b_imm8_aips_ip8(); +void subi_b_imm8_pais_ip8(); +void subi_b_imm8_das_ip8(); +void subi_b_imm8_dais_ip8(); +void subi_b_imm8_adr16_ip8(); +void subi_b_imm8_adr32_ip8(); +void subi_w_imm16_ds_ip8(); +void subi_w_imm16_ais_ip8(); +void subi_w_imm16_aips_ip8(); +void subi_w_imm16_pais_ip8(); +void subi_w_imm16_das_ip8(); +void subi_w_imm16_dais_ip8(); +void subi_w_imm16_adr16_ip8(); +void subi_w_imm16_adr32_ip8(); +void subi_l_imm32_ds_ip8(); +void subi_l_imm32_ais_ip8(); +void subi_l_imm32_aips_ip8(); +void subi_l_imm32_pais_ip8(); +void subi_l_imm32_das_ip8(); +void subi_l_imm32_dais_ip8(); +void subi_l_imm32_adr16_ip8(); +void subi_l_imm32_adr32_ip8(); +void addi_b_imm8_ds_ip8(); +void addi_b_imm8_ais_ip8(); +void addi_b_imm8_aips_ip8(); +void addi_b_imm8_pais_ip8(); +void addi_b_imm8_das_ip8(); +void addi_b_imm8_dais_ip8(); +void addi_b_imm8_adr16_ip8(); +void addi_b_imm8_adr32_ip8(); +void addi_w_imm16_ds_ip8(); +void addi_w_imm16_ais_ip8(); +void addi_w_imm16_aips_ip8(); +void addi_w_imm16_pais_ip8(); +void addi_w_imm16_das_ip8(); +void addi_w_imm16_dais_ip8(); +void addi_w_imm16_adr16_ip8(); +void addi_w_imm16_adr32_ip8(); +void addi_l_imm32_ds_ip8(); +void addi_l_imm32_ais_ip8(); +void addi_l_imm32_aips_ip8(); +void addi_l_imm32_pais_ip8(); +void addi_l_imm32_das_ip8(); +void addi_l_imm32_dais_ip8(); +void addi_l_imm32_adr16_ip8(); +void addi_l_imm32_adr32_ip8(); +void btst_imm8_ds_ip8(); +void btst_imm8_ais_ip8(); +void btst_imm8_aips_ip8(); +void btst_imm8_pais_ip8(); +void btst_imm8_das_ip8(); +void btst_imm8_dais_ip8(); +void btst_imm8_adr16_ip8(); +void btst_imm8_adr32_ip8(); +void btst_imm8_dpc_ip8(); +void btst_imm8_dpci_ip8(); +void bchg_imm8_ds_ip8(); +void bchg_imm8_ais_ip8(); +void bchg_imm8_aips_ip8(); +void bchg_imm8_pais_ip8(); +void bchg_imm8_das_ip8(); +void bchg_imm8_dais_ip8(); +void bchg_imm8_adr16_ip8(); +void bchg_imm8_adr32_ip8(); +void bclr_imm8_ds_ip8(); +void bclr_imm8_ais_ip8(); +void bclr_imm8_aips_ip8(); +void bclr_imm8_pais_ip8(); +void bclr_imm8_das_ip8(); +void bclr_imm8_dais_ip8(); +void bclr_imm8_adr16_ip8(); +void bclr_imm8_adr32_ip8(); +void bset_imm8_ds_ip8(); +void bset_imm8_ais_ip8(); +void bset_imm8_aips_ip8(); +void bset_imm8_pais_ip8(); +void bset_imm8_das_ip8(); +void bset_imm8_dais_ip8(); +void bset_imm8_adr16_ip8(); +void bset_imm8_adr32_ip8(); +void eori_b_imm8_ds_ip8(); +void eori_b_imm8_ais_ip8(); +void eori_b_imm8_aips_ip8(); +void eori_b_imm8_pais_ip8(); +void eori_b_imm8_das_ip8(); +void eori_b_imm8_dais_ip8(); +void eori_b_imm8_adr16_ip8(); +void eori_b_imm8_adr32_ip8(); +void eori_imm8_ccr_ip8(); +void eori_w_imm16_ds_ip8(); +void eori_w_imm16_ais_ip8(); +void eori_w_imm16_aips_ip8(); +void eori_w_imm16_pais_ip8(); +void eori_w_imm16_das_ip8(); +void eori_w_imm16_dais_ip8(); +void eori_w_imm16_adr16_ip8(); +void eori_w_imm16_adr32_ip8(); +void eori_i16u_sr_ip8(); +void eori_l_imm32_ds_ip8(); +void eori_l_imm32_ais_ip8(); +void eori_l_imm32_aips_ip8(); +void eori_l_imm32_pais_ip8(); +void eori_l_imm32_das_ip8(); +void eori_l_imm32_dais_ip8(); +void eori_l_imm32_adr16_ip8(); +void eori_l_imm32_adr32_ip8(); +void cmpi_b_imm8_ds_ip8(); +void cmpi_b_imm8_ais_ip8(); +void cmpi_b_imm8_aips_ip8(); +void cmpi_b_imm8_pais_ip8(); +void cmpi_b_imm8_das_ip8(); +void cmpi_b_imm8_dais_ip8(); +void cmpi_b_imm8_adr16_ip8(); +void cmpi_b_imm8_adr32_ip8(); +void cmpi_w_imm16_ds_ip8(); +void cmpi_w_imm16_ais_ip8(); +void cmpi_w_imm16_aips_ip8(); +void cmpi_w_imm16_pais_ip8(); +void cmpi_w_imm16_das_ip8(); +void cmpi_w_imm16_dais_ip8(); +void cmpi_w_imm16_adr16_ip8(); +void cmpi_w_imm16_adr32_ip8(); +void cmpi_l_imm32_ds_ip8(); +void cmpi_l_imm32_ais_ip8(); +void cmpi_l_imm32_aips_ip8(); +void cmpi_l_imm32_pais_ip8(); +void cmpi_l_imm32_das_ip8(); +void cmpi_l_imm32_dais_ip8(); +void cmpi_l_imm32_adr16_ip8(); +void cmpi_l_imm32_adr32_ip8(); +void move_b_ds_dd_ip8(); +void move_b_ais_dd_ip8(); +void move_b_aips_dd_ip8(); +void move_b_pais_dd_ip8(); +void move_b_das_dd_ip8(); +void move_b_dais_dd_ip8(); +void move_b_adr16_dd_ip8(); +void move_b_adr32_dd_ip8(); +void move_b_dpc_dd_ip8(); +void move_b_dpci_dd_ip8(); +void move_b_imm8_dd_ip8(); +void move_b_ds_aid_ip8(); +void move_b_ais_aid_ip8(); +void move_b_aips_aid_ip8(); +void move_b_pais_aid_ip8(); +void move_b_das_aid_ip8(); +void move_b_dais_aid_ip8(); +void move_b_adr16_aid_ip8(); +void move_b_adr32_aid_ip8(); +void move_b_dpc_aid_ip8(); +void move_b_dpci_aid_ip8(); +void move_b_imm8_aid_ip8(); +void move_b_ds_aipd_ip8(); +void move_b_ais_aipd_ip8(); +void move_b_aips_aipd_ip8(); +void move_b_pais_aipd_ip8(); +void move_b_das_aipd_ip8(); +void move_b_dais_aipd_ip8(); +void move_b_adr16_aipd_ip8(); +void move_b_adr32_aipd_ip8(); +void move_b_dpc_aipd_ip8(); +void move_b_dpci_aipd_ip8(); +void move_b_imm8_aipd_ip8(); +void move_b_ds_paid_ip8(); +void move_b_ais_paid_ip8(); +void move_b_aips_paid_ip8(); +void move_b_pais_paid_ip8(); +void move_b_das_paid_ip8(); +void move_b_dais_paid_ip8(); +void move_b_adr16_paid_ip8(); +void move_b_adr32_paid_ip8(); +void move_b_dpc_paid_ip8(); +void move_b_dpci_paid_ip8(); +void move_b_imm8_paid_ip8(); +void move_b_ds_dad_ip8(); +void move_b_ais_dad_ip8(); +void move_b_aips_dad_ip8(); +void move_b_pais_dad_ip8(); +void move_b_das_dad_ip8(); +void move_b_dais_dad_ip8(); +void move_b_adr16_dad_ip8(); +void move_b_adr32_dad_ip8(); +void move_b_dpc_dad_ip8(); +void move_b_dpci_dad_ip8(); +void move_b_imm8_dad_ip8(); +void move_b_ds_daid_ip8(); +void move_b_ais_daid_ip8(); +void move_b_aips_daid_ip8(); +void move_b_pais_daid_ip8(); +void move_b_das_daid_ip8(); +void move_b_dais_daid_ip8(); +void move_b_adr16_daid_ip8(); +void move_b_adr32_daid_ip8(); +void move_b_dpc_daid_ip8(); +void move_b_dpci_daid_ip8(); +void move_b_imm8_daid_ip8(); +void move_b_ds_adr16_ip8(); +void move_b_ais_adr16_ip8(); +void move_b_aips_adr16_ip8(); +void move_b_pais_adr16_ip8(); +void move_b_das_adr16_ip8(); +void move_b_dais_adr16_ip8(); +void move_b_adr16_adr16_ip8(); +void move_b_adr32_adr16_ip8(); +void move_b_dpc_adr16_ip8(); +void move_b_dpci_adr16_ip8(); +void move_b_imm8_adr16_ip8(); +void move_b_ds_adr32_ip8(); +void move_b_ais_adr32_ip8(); +void move_b_aips_adr32_ip8(); +void move_b_pais_adr32_ip8(); +void move_b_das_adr32_ip8(); +void move_b_dais_adr32_ip8(); +void move_b_adr16_adr32_ip8(); +void move_b_adr32_adr32_ip8(); +void move_b_dpc_adr32_ip8(); +void move_b_dpci_adr32_ip8(); +void move_b_imm8_adr32_ip8(); +void move_l_ds_dd_ip8(); +void move_l_as_dd_ip8(); +void move_l_ais_dd_ip8(); +void move_l_aips_dd_ip8(); +void move_l_pais_dd_ip8(); +void move_l_das_dd_ip8(); +void move_l_dais_dd_ip8(); +void move_l_adr16_dd_ip8(); +void move_l_adr32_dd_ip8(); +void move_l_dpc_dd_ip8(); +void move_l_dpci_dd_ip8(); +void move_l_imm32_dd_ip8(); +void movea_l_ds_ad_ip8(); +void movea_l_as_ad_ip8(); +void movea_l_ais_ad_ip8(); +void movea_l_aips_ad_ip8(); +void movea_l_pais_ad_ip8(); +void movea_l_das_ad_ip8(); +void movea_l_dais_ad_ip8(); +void movea_l_adr16_ad_ip8(); +void movea_l_adr32_ad_ip8(); +void movea_l_dpc_ad_ip8(); +void movea_l_dpci_ad_ip8(); +void movea_l_imm32_ad_ip8(); +void move_l_ds_aid_ip8(); +void move_l_as_aid_ip8(); +void move_l_ais_aid_ip8(); +void move_l_aips_aid_ip8(); +void move_l_pais_aid_ip8(); +void move_l_das_aid_ip8(); +void move_l_dais_aid_ip8(); +void move_l_adr16_aid_ip8(); +void move_l_adr32_aid_ip8(); +void move_l_dpc_aid_ip8(); +void move_l_dpci_aid_ip8(); +void move_l_imm32_aid_ip8(); +void move_l_ds_aipd_ip8(); +void move_l_as_aipd_ip8(); +void move_l_ais_aipd_ip8(); +void move_l_aips_aipd_ip8(); +void move_l_pais_aipd_ip8(); +void move_l_das_aipd_ip8(); +void move_l_dais_aipd_ip8(); +void move_l_adr16_aipd_ip8(); +void move_l_adr32_aipd_ip8(); +void move_l_dpc_aipd_ip8(); +void move_l_dpci_aipd_ip8(); +void move_l_imm32_aipd_ip8(); +void move_l_ds_paid_ip8(); +void move_l_as_paid_ip8(); +void move_l_ais_paid_ip8(); +void move_l_aips_paid_ip8(); +void move_l_pais_paid_ip8(); +void move_l_das_paid_ip8(); +void move_l_dais_paid_ip8(); +void move_l_adr16_paid_ip8(); +void move_l_adr32_paid_ip8(); +void move_l_dpc_paid_ip8(); +void move_l_dpci_paid_ip8(); +void move_l_imm32_paid_ip8(); +void move_l_ds_dad_ip8(); +void move_l_as_dad_ip8(); +void move_l_ais_dad_ip8(); +void move_l_aips_dad_ip8(); +void move_l_pais_dad_ip8(); +void move_l_das_dad_ip8(); +void move_l_dais_dad_ip8(); +void move_l_adr16_dad_ip8(); +void move_l_adr32_dad_ip8(); +void move_l_dpc_dad_ip8(); +void move_l_dpci_dad_ip8(); +void move_l_imm32_dad_ip8(); +void move_l_ds_daid_ip8(); +void move_l_as_daid_ip8(); +void move_l_ais_daid_ip8(); +void move_l_aips_daid_ip8(); +void move_l_pais_daid_ip8(); +void move_l_das_daid_ip8(); +void move_l_dais_daid_ip8(); +void move_l_adr16_daid_ip8(); +void move_l_adr32_daid_ip8(); +void move_l_dpc_daid_ip8(); +void move_l_dpci_daid_ip8(); +void move_l_imm32_daid_ip8(); +void move_l_ds_adr16_ip8(); +void move_l_as_adr16_ip8(); +void move_l_ais_adr16_ip8(); +void move_l_aips_adr16_ip8(); +void move_l_pais_adr16_ip8(); +void move_l_das_adr16_ip8(); +void move_l_dais_adr16_ip8(); +void move_l_adr16_adr16_ip8(); +void move_l_adr32_adr16_ip8(); +void move_l_dpc_adr16_ip8(); +void move_l_dpci_adr16_ip8(); +void move_l_imm32_adr16_ip8(); +void move_l_ds_adr32_ip8(); +void move_l_as_adr32_ip8(); +void move_l_ais_adr32_ip8(); +void move_l_aips_adr32_ip8(); +void move_l_pais_adr32_ip8(); +void move_l_das_adr32_ip8(); +void move_l_dais_adr32_ip8(); +void move_l_adr16_adr32_ip8(); +void move_l_adr32_adr32_ip8(); +void move_l_dpc_adr32_ip8(); +void move_l_dpci_adr32_ip8(); +void move_l_imm32_adr32_ip8(); +void move_w_ds_dd_ip8(); +void move_w_as_dd_ip8(); +void move_w_ais_dd_ip8(); +void move_w_aips_dd_ip8(); +void move_w_pais_dd_ip8(); +void move_w_das_dd_ip8(); +void move_w_dais_dd_ip8(); +void move_w_adr16_dd_ip8(); +void move_w_adr32_dd_ip8(); +void move_w_dpc_dd_ip8(); +void move_w_dpci_dd_ip8(); +void move_w_imm16_dd_ip8(); +void movea_w_ds_ad_ip8(); +void movea_w_as_ad_ip8(); +void movea_w_ais_ad_ip8(); +void movea_w_aips_ad_ip8(); +void movea_w_pais_ad_ip8(); +void movea_w_das_ad_ip8(); +void movea_w_dais_ad_ip8(); +void movea_w_adr16_ad_ip8(); +void movea_w_adr32_ad_ip8(); +void movea_w_dpc_ad_ip8(); +void movea_w_dpci_ad_ip8(); +void movea_w_imm16_ad_ip8(); +void move_w_ds_aid_ip8(); +void move_w_as_aid_ip8(); +void move_w_ais_aid_ip8(); +void move_w_aips_aid_ip8(); +void move_w_pais_aid_ip8(); +void move_w_das_aid_ip8(); +void move_w_dais_aid_ip8(); +void move_w_adr16_aid_ip8(); +void move_w_adr32_aid_ip8(); +void move_w_dpc_aid_ip8(); +void move_w_dpci_aid_ip8(); +void move_w_imm16_aid_ip8(); +void move_w_ds_aipd_ip8(); +void move_w_as_aipd_ip8(); +void move_w_ais_aipd_ip8(); +void move_w_aips_aipd_ip8(); +void move_w_pais_aipd_ip8(); +void move_w_das_aipd_ip8(); +void move_w_dais_aipd_ip8(); +void move_w_adr16_aipd_ip8(); +void move_w_adr32_aipd_ip8(); +void move_w_dpc_aipd_ip8(); +void move_w_dpci_aipd_ip8(); +void move_w_imm16_aipd_ip8(); +void move_w_ds_paid_ip8(); +void move_w_as_paid_ip8(); +void move_w_ais_paid_ip8(); +void move_w_aips_paid_ip8(); +void move_w_pais_paid_ip8(); +void move_w_das_paid_ip8(); +void move_w_dais_paid_ip8(); +void move_w_adr16_paid_ip8(); +void move_w_adr32_paid_ip8(); +void move_w_dpc_paid_ip8(); +void move_w_dpci_paid_ip8(); +void move_w_imm16_paid_ip8(); +void move_w_ds_dad_ip8(); +void move_w_as_dad_ip8(); +void move_w_ais_dad_ip8(); +void move_w_aips_dad_ip8(); +void move_w_pais_dad_ip8(); +void move_w_das_dad_ip8(); +void move_w_dais_dad_ip8(); +void move_w_adr16_dad_ip8(); +void move_w_adr32_dad_ip8(); +void move_w_dpc_dad_ip8(); +void move_w_dpci_dad_ip8(); +void move_w_imm16_dad_ip8(); +void move_w_ds_daid_ip8(); +void move_w_as_daid_ip8(); +void move_w_ais_daid_ip8(); +void move_w_aips_daid_ip8(); +void move_w_pais_daid_ip8(); +void move_w_das_daid_ip8(); +void move_w_dais_daid_ip8(); +void move_w_adr16_daid_ip8(); +void move_w_adr32_daid_ip8(); +void move_w_dpc_daid_ip8(); +void move_w_dpci_daid_ip8(); +void move_w_imm16_daid_ip8(); +void move_w_ds_adr16_ip8(); +void move_w_as_adr16_ip8(); +void move_w_ais_adr16_ip8(); +void move_w_aips_adr16_ip8(); +void move_w_pais_adr16_ip8(); +void move_w_das_adr16_ip8(); +void move_w_dais_adr16_ip8(); +void move_w_adr16_adr16_ip8(); +void move_w_adr32_adr16_ip8(); +void move_w_dpc_adr16_ip8(); +void move_w_dpci_adr16_ip8(); +void move_w_imm16_adr16_ip8(); +void move_w_ds_adr32_ip8(); +void move_w_as_adr32_ip8(); +void move_w_ais_adr32_ip8(); +void move_w_aips_adr32_ip8(); +void move_w_pais_adr32_ip8(); +void move_w_das_adr32_ip8(); +void move_w_dais_adr32_ip8(); +void move_w_adr16_adr32_ip8(); +void move_w_adr32_adr32_ip8(); +void move_w_dpc_adr32_ip8(); +void move_w_dpci_adr32_ip8(); +void move_w_imm16_adr32_ip8(); +void negx_b_ds_ip8(); +void negx_b_ais_ip8(); +void negx_b_aips_ip8(); +void negx_b_pais_ip8(); +void negx_b_das_ip8(); +void negx_b_dais_ip8(); +void negx_b_adr16_ip8(); +void negx_b_adr32_ip8(); +void negx_w_ds_ip8(); +void negx_w_ais_ip8(); +void negx_w_aips_ip8(); +void negx_w_pais_ip8(); +void negx_w_das_ip8(); +void negx_w_dais_ip8(); +void negx_w_adr16_ip8(); +void negx_w_adr32_ip8(); +void negx_l_ds_ip8(); +void negx_l_ais_ip8(); +void negx_l_aips_ip8(); +void negx_l_pais_ip8(); +void negx_l_das_ip8(); +void negx_l_dais_ip8(); +void negx_l_adr16_ip8(); +void negx_l_adr32_ip8(); +void move_sr_ds_ip8(); +void move_sr_ais_ip8(); +void move_sr_aips_ip8(); +void move_sr_pais_ip8(); +void move_sr_das_ip8(); +void move_sr_dais_ip8(); +void move_sr_adr16_ip8(); +void move_sr_adr32_ip8(); +void chk_w_ds_dd_ip8(); +void chk_w_ais_dd_ip8(); +void chk_w_aips_dd_ip8(); +void chk_w_pais_dd_ip8(); +void chk_w_das_dd_ip8(); +void chk_w_dais_dd_ip8(); +void chk_w_adr16_dd_ip8(); +void chk_w_adr32_dd_ip8(); +void chk_w_dpc_dd_ip8(); +void chk_w_dpci_dd_ip8(); +void chk_w_imm16_dd_ip8(); +void lea_ais_ad_ip8(); +void lea_das_ad_ip8(); +void lea_dais_ad_ip8(); +void lea_adr16_ad_ip8(); +void lea_adr32_ad_ip8(); +void lea_dpc_ad_ip8(); +void lea_dpci_ad_ip8(); +void clr_b_ds_ip8(); +void clr_b_ais_ip8(); +void clr_b_aips_ip8(); +void clr_b_pais_ip8(); +void clr_b_das_ip8(); +void clr_b_dais_ip8(); +void clr_b_adr16_ip8(); +void clr_b_adr32_ip8(); +void clr_w_ds_ip8(); +void clr_w_ais_ip8(); +void clr_w_aips_ip8(); +void clr_w_pais_ip8(); +void clr_w_das_ip8(); +void clr_w_dais_ip8(); +void clr_w_adr16_ip8(); +void clr_w_adr32_ip8(); +void clr_l_ds_ip8(); +void clr_l_ais_ip8(); +void clr_l_aips_ip8(); +void clr_l_pais_ip8(); +void clr_l_das_ip8(); +void clr_l_dais_ip8(); +void clr_l_adr16_ip8(); +void clr_l_adr32_ip8(); +void neg_b_ds_ip8(); +void neg_b_ais_ip8(); +void neg_b_aips_ip8(); +void neg_b_pais_ip8(); +void neg_b_das_ip8(); +void neg_b_dais_ip8(); +void neg_b_adr16_ip8(); +void neg_b_adr32_ip8(); +void neg_w_ds_ip8(); +void neg_w_ais_ip8(); +void neg_w_aips_ip8(); +void neg_w_pais_ip8(); +void neg_w_das_ip8(); +void neg_w_dais_ip8(); +void neg_w_adr16_ip8(); +void neg_w_adr32_ip8(); +void neg_l_ds_ip8(); +void neg_l_ais_ip8(); +void neg_l_aips_ip8(); +void neg_l_pais_ip8(); +void neg_l_das_ip8(); +void neg_l_dais_ip8(); +void neg_l_adr16_ip8(); +void neg_l_adr32_ip8(); +void move_ds_ccr_ip8(); +void move_ais_ccr_ip8(); +void move_aips_ccr_ip8(); +void move_pais_ccr_ip8(); +void move_das_ccr_ip8(); +void move_dais_ccr_ip8(); +void move_adr16_ccr_ip8(); +void move_adr32_ccr_ip8(); +void move_dpc_ccr_ip8(); +void move_dpci_ccr_ip8(); +void move_imm8_ccr_ip8(); +void not_b_ds_ip8(); +void not_b_ais_ip8(); +void not_b_aips_ip8(); +void not_b_pais_ip8(); +void not_b_das_ip8(); +void not_b_dais_ip8(); +void not_b_adr16_ip8(); +void not_b_adr32_ip8(); +void not_w_ds_ip8(); +void not_w_ais_ip8(); +void not_w_aips_ip8(); +void not_w_pais_ip8(); +void not_w_das_ip8(); +void not_w_dais_ip8(); +void not_w_adr16_ip8(); +void not_w_adr32_ip8(); +void not_l_ds_ip8(); +void not_l_ais_ip8(); +void not_l_aips_ip8(); +void not_l_pais_ip8(); +void not_l_das_ip8(); +void not_l_dais_ip8(); +void not_l_adr16_ip8(); +void not_l_adr32_ip8(); +void move_ds_sr_ip8(); +void move_ais_sr_ip8(); +void move_aips_sr_ip8(); +void move_pais_sr_ip8(); +void move_das_sr_ip8(); +void move_dais_sr_ip8(); +void move_adr16_sr_ip8(); +void move_adr32_sr_ip8(); +void move_dpc_sr_ip8(); +void move_dpci_sr_ip8(); +void move_i16u_sr_ip8(); +void nbcd_b_ds_ip8(); +void nbcd_b_ais_ip8(); +void nbcd_b_aips_ip8(); +void nbcd_b_pais_ip8(); +void nbcd_b_das_ip8(); +void nbcd_b_dais_ip8(); +void nbcd_b_adr16_ip8(); +void nbcd_b_adr32_ip8(); +void swap_ds_ip8(); +void pea_ais_ip8(); +void pea_das_ip8(); +void pea_dais_ip8(); +void pea_adr16_ip8(); +void pea_adr32_ip8(); +void pea_dpc_ip8(); +void pea_dpci_ip8(); +void ext_w_ds_ip8(); +void movem_w_list_ais_ip8(); +void movem_w_listp_pais_ip8(); +void movem_w_list_das_ip8(); +void movem_w_list_dais_ip8(); +void movem_w_list_adr16_ip8(); +void movem_w_list_adr32_ip8(); +void ext_l_ds_ip8(); +void movem_l_list_ais_ip8(); +void movem_l_listp_pais_ip8(); +void movem_l_list_das_ip8(); +void movem_l_list_dais_ip8(); +void movem_l_list_adr16_ip8(); +void movem_l_list_adr32_ip8(); +void tst_b_ds_ip8(); +void tst_b_ais_ip8(); +void tst_b_aips_ip8(); +void tst_b_pais_ip8(); +void tst_b_das_ip8(); +void tst_b_dais_ip8(); +void tst_b_adr16_ip8(); +void tst_b_adr32_ip8(); +void tst_w_ds_ip8(); +void tst_w_ais_ip8(); +void tst_w_aips_ip8(); +void tst_w_pais_ip8(); +void tst_w_das_ip8(); +void tst_w_dais_ip8(); +void tst_w_adr16_ip8(); +void tst_w_adr32_ip8(); +void tst_l_ds_ip8(); +void tst_l_ais_ip8(); +void tst_l_aips_ip8(); +void tst_l_pais_ip8(); +void tst_l_das_ip8(); +void tst_l_dais_ip8(); +void tst_l_adr16_ip8(); +void tst_l_adr32_ip8(); +void tas_ds_ip8(); +void tas_ais_ip8(); +void tas_aips_ip8(); +void tas_pais_ip8(); +void tas_das_ip8(); +void tas_dais_ip8(); +void tas_adr16_ip8(); +void tas_adr32_ip8(); +void movem_w_ais_list_ip8(); +void movem_w_aips_list_ip8(); +void movem_w_das_list_ip8(); +void movem_w_dais_list_ip8(); +void movem_w_adr16_list_ip8(); +void movem_w_adr32_list_ip8(); +void movem_w_dpc_list_ip8(); +void movem_w_dpci_list_ip8(); +void movem_l_ais_list_ip8(); +void movem_l_aips_list_ip8(); +void movem_l_das_list_ip8(); +void movem_l_dais_list_ip8(); +void movem_l_adr16_list_ip8(); +void movem_l_adr32_list_ip8(); +void movem_l_dpc_list_ip8(); +void movem_l_dpci_list_ip8(); +void trap_imm4_ip8(); +void link_as_imm16_ip8(); +void unlk_as_ip8(); +void move_as_usp_ip8(); +void move_usp_as_ip8(); +void reset_ip8(); +void nop_ip8(); +void stop_i16u_ip8(); +void rte_ip8(); +void rts_ip8(); +void trapv_ip8(); +void rtr_ip8(); +void jsr_ais_ip8(); +void jsr_das_ip8(); +void jsr_dais_ip8(); +void jsr_adr16_ip8(); +void jsr_adr32_ip8(); +void jsr_dpc_ip8(); +void jsr_dpci_ip8(); +void jmp_ais_ip8(); +void jmp_das_ip8(); +void jmp_dais_ip8(); +void jmp_adr16_ip8(); +void jmp_adr32_ip8(); +void jmp_dpc_ip8(); +void jmp_dpci_ip8(); +void addq_b_imm3_ds_ip8(); +void addq_b_imm3_ais_ip8(); +void addq_b_imm3_aips_ip8(); +void addq_b_imm3_pais_ip8(); +void addq_b_imm3_das_ip8(); +void addq_b_imm3_dais_ip8(); +void addq_b_imm3_adr16_ip8(); +void addq_b_imm3_adr32_ip8(); +void addq_w_imm3_ds_ip8(); +void addq_w_imm3_as_ip8(); +void addq_w_imm3_ais_ip8(); +void addq_w_imm3_aips_ip8(); +void addq_w_imm3_pais_ip8(); +void addq_w_imm3_das_ip8(); +void addq_w_imm3_dais_ip8(); +void addq_w_imm3_adr16_ip8(); +void addq_w_imm3_adr32_ip8(); +void addq_l_imm3_ds_ip8(); +void addq_l_imm3_as_ip8(); +void addq_l_imm3_ais_ip8(); +void addq_l_imm3_aips_ip8(); +void addq_l_imm3_pais_ip8(); +void addq_l_imm3_das_ip8(); +void addq_l_imm3_dais_ip8(); +void addq_l_imm3_adr16_ip8(); +void addq_l_imm3_adr32_ip8(); +void st_ds_ip8(); +void dbt_ds_rel16_ip8(); +void st_ais_ip8(); +void st_aips_ip8(); +void st_pais_ip8(); +void st_das_ip8(); +void st_dais_ip8(); +void st_adr16_ip8(); +void st_adr32_ip8(); +void subq_b_imm3_ds_ip8(); +void subq_b_imm3_ais_ip8(); +void subq_b_imm3_aips_ip8(); +void subq_b_imm3_pais_ip8(); +void subq_b_imm3_das_ip8(); +void subq_b_imm3_dais_ip8(); +void subq_b_imm3_adr16_ip8(); +void subq_b_imm3_adr32_ip8(); +void subq_w_imm3_ds_ip8(); +void subq_w_imm3_as_ip8(); +void subq_w_imm3_ais_ip8(); +void subq_w_imm3_aips_ip8(); +void subq_w_imm3_pais_ip8(); +void subq_w_imm3_das_ip8(); +void subq_w_imm3_dais_ip8(); +void subq_w_imm3_adr16_ip8(); +void subq_w_imm3_adr32_ip8(); +void subq_l_imm3_ds_ip8(); +void subq_l_imm3_as_ip8(); +void subq_l_imm3_ais_ip8(); +void subq_l_imm3_aips_ip8(); +void subq_l_imm3_pais_ip8(); +void subq_l_imm3_das_ip8(); +void subq_l_imm3_dais_ip8(); +void subq_l_imm3_adr16_ip8(); +void subq_l_imm3_adr32_ip8(); +void sf_ds_ip8(); +void dbra_ds_rel16_ip8(); +void sf_ais_ip8(); +void sf_aips_ip8(); +void sf_pais_ip8(); +void sf_das_ip8(); +void sf_dais_ip8(); +void sf_adr16_ip8(); +void sf_adr32_ip8(); +void shi_ds_ip8(); +void dbhi_ds_rel16_ip8(); +void shi_ais_ip8(); +void shi_aips_ip8(); +void shi_pais_ip8(); +void shi_das_ip8(); +void shi_dais_ip8(); +void shi_adr16_ip8(); +void shi_adr32_ip8(); +void sls_ds_ip8(); +void dbls_ds_rel16_ip8(); +void sls_ais_ip8(); +void sls_aips_ip8(); +void sls_pais_ip8(); +void sls_das_ip8(); +void sls_dais_ip8(); +void sls_adr16_ip8(); +void sls_adr32_ip8(); +void scc_ds_ip8(); +void dbcc_ds_rel16_ip8(); +void scc_ais_ip8(); +void scc_aips_ip8(); +void scc_pais_ip8(); +void scc_das_ip8(); +void scc_dais_ip8(); +void scc_adr16_ip8(); +void scc_adr32_ip8(); +void scs_ds_ip8(); +void dbcs_ds_rel16_ip8(); +void scs_ais_ip8(); +void scs_aips_ip8(); +void scs_pais_ip8(); +void scs_das_ip8(); +void scs_dais_ip8(); +void scs_adr16_ip8(); +void scs_adr32_ip8(); +void sne_ds_ip8(); +void dbne_ds_rel16_ip8(); +void sne_ais_ip8(); +void sne_aips_ip8(); +void sne_pais_ip8(); +void sne_das_ip8(); +void sne_dais_ip8(); +void sne_adr16_ip8(); +void sne_adr32_ip8(); +void seq_ds_ip8(); +void dbeq_ds_rel16_ip8(); +void seq_ais_ip8(); +void seq_aips_ip8(); +void seq_pais_ip8(); +void seq_das_ip8(); +void seq_dais_ip8(); +void seq_adr16_ip8(); +void seq_adr32_ip8(); +void svc_ds_ip8(); +void dbvc_ds_rel16_ip8(); +void svc_ais_ip8(); +void svc_aips_ip8(); +void svc_pais_ip8(); +void svc_das_ip8(); +void svc_dais_ip8(); +void svc_adr16_ip8(); +void svc_adr32_ip8(); +void svs_ds_ip8(); +void dbvs_ds_rel16_ip8(); +void svs_ais_ip8(); +void svs_aips_ip8(); +void svs_pais_ip8(); +void svs_das_ip8(); +void svs_dais_ip8(); +void svs_adr16_ip8(); +void svs_adr32_ip8(); +void spl_ds_ip8(); +void dbpl_ds_rel16_ip8(); +void spl_ais_ip8(); +void spl_aips_ip8(); +void spl_pais_ip8(); +void spl_das_ip8(); +void spl_dais_ip8(); +void spl_adr16_ip8(); +void spl_adr32_ip8(); +void smi_ds_ip8(); +void dbmi_ds_rel16_ip8(); +void smi_ais_ip8(); +void smi_aips_ip8(); +void smi_pais_ip8(); +void smi_das_ip8(); +void smi_dais_ip8(); +void smi_adr16_ip8(); +void smi_adr32_ip8(); +void sge_ds_ip8(); +void dbge_ds_rel16_ip8(); +void sge_ais_ip8(); +void sge_aips_ip8(); +void sge_pais_ip8(); +void sge_das_ip8(); +void sge_dais_ip8(); +void sge_adr16_ip8(); +void sge_adr32_ip8(); +void slt_ds_ip8(); +void dblt_ds_rel16_ip8(); +void slt_ais_ip8(); +void slt_aips_ip8(); +void slt_pais_ip8(); +void slt_das_ip8(); +void slt_dais_ip8(); +void slt_adr16_ip8(); +void slt_adr32_ip8(); +void sgt_ds_ip8(); +void dbgt_ds_rel16_ip8(); +void sgt_ais_ip8(); +void sgt_aips_ip8(); +void sgt_pais_ip8(); +void sgt_das_ip8(); +void sgt_dais_ip8(); +void sgt_adr16_ip8(); +void sgt_adr32_ip8(); +void sle_ds_ip8(); +void dble_ds_rel16_ip8(); +void sle_ais_ip8(); +void sle_aips_ip8(); +void sle_pais_ip8(); +void sle_das_ip8(); +void sle_dais_ip8(); +void sle_adr16_ip8(); +void sle_adr32_ip8(); +void bra_rel16_ip8(); +void bra_rel8_ip8(); +void bsr_rel16_ip8(); +void bsr_rel8_ip8(); +void bhi_rel16_ip8(); +void bhi_rel8_ip8(); +void bls_rel16_ip8(); +void bls_rel8_ip8(); +void bcc_rel16_ip8(); +void bcc_rel8_ip8(); +void bcs_rel16_ip8(); +void bcs_rel8_ip8(); +void bne_rel16_ip8(); +void bne_rel8_ip8(); +void beq_rel16_ip8(); +void beq_rel8_ip8(); +void bvc_rel16_ip8(); +void bvc_rel8_ip8(); +void bvs_rel16_ip8(); +void bvs_rel8_ip8(); +void bpl_rel16_ip8(); +void bpl_rel8_ip8(); +void bmi_rel16_ip8(); +void bmi_rel8_ip8(); +void bge_rel16_ip8(); +void bge_rel8_ip8(); +void blt_rel16_ip8(); +void blt_rel8_ip8(); +void bgt_rel16_ip8(); +void bgt_rel8_ip8(); +void ble_rel16_ip8(); +void ble_rel8_ip8(); +void moveq_imm8o_dd_ip8(); +void or_b_ds_dd_ip8(); +void or_b_ais_dd_ip8(); +void or_b_aips_dd_ip8(); +void or_b_pais_dd_ip8(); +void or_b_das_dd_ip8(); +void or_b_dais_dd_ip8(); +void or_b_adr16_dd_ip8(); +void or_b_adr32_dd_ip8(); +void or_b_dpc_dd_ip8(); +void or_b_dpci_dd_ip8(); +void or_b_imm8_dd_ip8(); +void or_w_ds_dd_ip8(); +void or_w_ais_dd_ip8(); +void or_w_aips_dd_ip8(); +void or_w_pais_dd_ip8(); +void or_w_das_dd_ip8(); +void or_w_dais_dd_ip8(); +void or_w_adr16_dd_ip8(); +void or_w_adr32_dd_ip8(); +void or_w_dpc_dd_ip8(); +void or_w_dpci_dd_ip8(); +void or_w_imm16_dd_ip8(); +void or_l_ds_dd_ip8(); +void or_l_ais_dd_ip8(); +void or_l_aips_dd_ip8(); +void or_l_pais_dd_ip8(); +void or_l_das_dd_ip8(); +void or_l_dais_dd_ip8(); +void or_l_adr16_dd_ip8(); +void or_l_adr32_dd_ip8(); +void or_l_dpc_dd_ip8(); +void or_l_dpci_dd_ip8(); +void or_l_imm32_dd_ip8(); +void divu_w_ds_dd_ip8(); +void divu_w_ais_dd_ip8(); +void divu_w_aips_dd_ip8(); +void divu_w_pais_dd_ip8(); +void divu_w_das_dd_ip8(); +void divu_w_dais_dd_ip8(); +void divu_w_adr16_dd_ip8(); +void divu_w_adr32_dd_ip8(); +void divu_w_dpc_dd_ip8(); +void divu_w_dpci_dd_ip8(); +void divu_w_imm16_dd_ip8(); +void sbcd_ds_dd_ip8(); +void sbcd_pais_paid_ip8(); +void or_b_dd_ais_ip8(); +void or_b_dd_aips_ip8(); +void or_b_dd_pais_ip8(); +void or_b_dd_das_ip8(); +void or_b_dd_dais_ip8(); +void or_b_dd_adr16_ip8(); +void or_b_dd_adr32_ip8(); +void or_w_dd_ais_ip8(); +void or_w_dd_aips_ip8(); +void or_w_dd_pais_ip8(); +void or_w_dd_das_ip8(); +void or_w_dd_dais_ip8(); +void or_w_dd_adr16_ip8(); +void or_w_dd_adr32_ip8(); +void or_l_dd_ais_ip8(); +void or_l_dd_aips_ip8(); +void or_l_dd_pais_ip8(); +void or_l_dd_das_ip8(); +void or_l_dd_dais_ip8(); +void or_l_dd_adr16_ip8(); +void or_l_dd_adr32_ip8(); +void divs_w_ds_dd_ip8(); +void divs_w_ais_dd_ip8(); +void divs_w_aips_dd_ip8(); +void divs_w_pais_dd_ip8(); +void divs_w_das_dd_ip8(); +void divs_w_dais_dd_ip8(); +void divs_w_adr16_dd_ip8(); +void divs_w_adr32_dd_ip8(); +void divs_w_dpc_dd_ip8(); +void divs_w_dpci_dd_ip8(); +void divs_w_imm16_dd_ip8(); +void sub_b_ds_dd_ip8(); +void sub_b_ais_dd_ip8(); +void sub_b_aips_dd_ip8(); +void sub_b_pais_dd_ip8(); +void sub_b_das_dd_ip8(); +void sub_b_dais_dd_ip8(); +void sub_b_adr16_dd_ip8(); +void sub_b_adr32_dd_ip8(); +void sub_b_dpc_dd_ip8(); +void sub_b_dpci_dd_ip8(); +void sub_b_imm8_dd_ip8(); +void sub_w_ds_dd_ip8(); +void sub_w_as_dd_ip8(); +void sub_w_ais_dd_ip8(); +void sub_w_aips_dd_ip8(); +void sub_w_pais_dd_ip8(); +void sub_w_das_dd_ip8(); +void sub_w_dais_dd_ip8(); +void sub_w_adr16_dd_ip8(); +void sub_w_adr32_dd_ip8(); +void sub_w_dpc_dd_ip8(); +void sub_w_dpci_dd_ip8(); +void sub_w_imm16_dd_ip8(); +void sub_l_ds_dd_ip8(); +void sub_l_as_dd_ip8(); +void sub_l_ais_dd_ip8(); +void sub_l_aips_dd_ip8(); +void sub_l_pais_dd_ip8(); +void sub_l_das_dd_ip8(); +void sub_l_dais_dd_ip8(); +void sub_l_adr16_dd_ip8(); +void sub_l_adr32_dd_ip8(); +void sub_l_dpc_dd_ip8(); +void sub_l_dpci_dd_ip8(); +void sub_l_imm32_dd_ip8(); +void suba_w_ds_ad_ip8(); +void suba_w_as_ad_ip8(); +void suba_w_ais_ad_ip8(); +void suba_w_aips_ad_ip8(); +void suba_w_pais_ad_ip8(); +void suba_w_das_ad_ip8(); +void suba_w_dais_ad_ip8(); +void suba_w_adr16_ad_ip8(); +void suba_w_adr32_ad_ip8(); +void suba_w_dpc_ad_ip8(); +void suba_w_dpci_ad_ip8(); +void suba_w_imm16_ad_ip8(); +void subx_b_ds_dd_ip8(); +void subx_b_pais_paid_ip8(); +void sub_b_dd_ais_ip8(); +void sub_b_dd_aips_ip8(); +void sub_b_dd_pais_ip8(); +void sub_b_dd_das_ip8(); +void sub_b_dd_dais_ip8(); +void sub_b_dd_adr16_ip8(); +void sub_b_dd_adr32_ip8(); +void subx_w_ds_dd_ip8(); +void subx_w_pais_paid_ip8(); +void sub_w_dd_ais_ip8(); +void sub_w_dd_aips_ip8(); +void sub_w_dd_pais_ip8(); +void sub_w_dd_das_ip8(); +void sub_w_dd_dais_ip8(); +void sub_w_dd_adr16_ip8(); +void sub_w_dd_adr32_ip8(); +void subx_l_ds_dd_ip8(); +void subx_l_pais_paid_ip8(); +void sub_l_dd_ais_ip8(); +void sub_l_dd_aips_ip8(); +void sub_l_dd_pais_ip8(); +void sub_l_dd_das_ip8(); +void sub_l_dd_dais_ip8(); +void sub_l_dd_adr16_ip8(); +void sub_l_dd_adr32_ip8(); +void suba_l_ds_ad_ip8(); +void suba_l_as_ad_ip8(); +void suba_l_ais_ad_ip8(); +void suba_l_aips_ad_ip8(); +void suba_l_pais_ad_ip8(); +void suba_l_das_ad_ip8(); +void suba_l_dais_ad_ip8(); +void suba_l_adr16_ad_ip8(); +void suba_l_adr32_ad_ip8(); +void suba_l_dpc_ad_ip8(); +void suba_l_dpci_ad_ip8(); +void suba_l_imm32_ad_ip8(); +void cmp_b_ds_dd_ip8(); +void cmp_b_ais_dd_ip8(); +void cmp_b_aips_dd_ip8(); +void cmp_b_pais_dd_ip8(); +void cmp_b_das_dd_ip8(); +void cmp_b_dais_dd_ip8(); +void cmp_b_adr16_dd_ip8(); +void cmp_b_adr32_dd_ip8(); +void cmp_b_dpc_dd_ip8(); +void cmp_b_dpci_dd_ip8(); +void cmp_b_imm8_dd_ip8(); +void cmp_w_ds_dd_ip8(); +void cmp_w_as_dd_ip8(); +void cmp_w_ais_dd_ip8(); +void cmp_w_aips_dd_ip8(); +void cmp_w_pais_dd_ip8(); +void cmp_w_das_dd_ip8(); +void cmp_w_dais_dd_ip8(); +void cmp_w_adr16_dd_ip8(); +void cmp_w_adr32_dd_ip8(); +void cmp_w_dpc_dd_ip8(); +void cmp_w_dpci_dd_ip8(); +void cmp_w_imm16_dd_ip8(); +void cmp_l_ds_dd_ip8(); +void cmp_l_as_dd_ip8(); +void cmp_l_ais_dd_ip8(); +void cmp_l_aips_dd_ip8(); +void cmp_l_pais_dd_ip8(); +void cmp_l_das_dd_ip8(); +void cmp_l_dais_dd_ip8(); +void cmp_l_adr16_dd_ip8(); +void cmp_l_adr32_dd_ip8(); +void cmp_l_dpc_dd_ip8(); +void cmp_l_dpci_dd_ip8(); +void cmp_l_imm32_dd_ip8(); +void cmpa_w_ds_ad_ip8(); +void cmpa_w_as_ad_ip8(); +void cmpa_w_ais_ad_ip8(); +void cmpa_w_aips_ad_ip8(); +void cmpa_w_pais_ad_ip8(); +void cmpa_w_das_ad_ip8(); +void cmpa_w_dais_ad_ip8(); +void cmpa_w_adr16_ad_ip8(); +void cmpa_w_adr32_ad_ip8(); +void cmpa_w_dpc_ad_ip8(); +void cmpa_w_dpci_ad_ip8(); +void cmpa_w_imm16_ad_ip8(); +void eor_b_dd_ds_ip8(); +void cmpm_b_aips_aipd_ip8(); +void eor_b_dd_ais_ip8(); +void eor_b_dd_aips_ip8(); +void eor_b_dd_pais_ip8(); +void eor_b_dd_das_ip8(); +void eor_b_dd_dais_ip8(); +void eor_b_dd_adr16_ip8(); +void eor_b_dd_adr32_ip8(); +void eor_w_dd_ds_ip8(); +void cmpm_w_aips_aipd_ip8(); +void eor_w_dd_ais_ip8(); +void eor_w_dd_aips_ip8(); +void eor_w_dd_pais_ip8(); +void eor_w_dd_das_ip8(); +void eor_w_dd_dais_ip8(); +void eor_w_dd_adr16_ip8(); +void eor_w_dd_adr32_ip8(); +void eor_l_dd_ds_ip8(); +void cmpm_l_aips_aipd_ip8(); +void eor_l_dd_ais_ip8(); +void eor_l_dd_aips_ip8(); +void eor_l_dd_pais_ip8(); +void eor_l_dd_das_ip8(); +void eor_l_dd_dais_ip8(); +void eor_l_dd_adr16_ip8(); +void eor_l_dd_adr32_ip8(); +void cmpa_l_ds_ad_ip8(); +void cmpa_l_as_ad_ip8(); +void cmpa_l_ais_ad_ip8(); +void cmpa_l_aips_ad_ip8(); +void cmpa_l_pais_ad_ip8(); +void cmpa_l_das_ad_ip8(); +void cmpa_l_dais_ad_ip8(); +void cmpa_l_adr16_ad_ip8(); +void cmpa_l_adr32_ad_ip8(); +void cmpa_l_dpc_ad_ip8(); +void cmpa_l_dpci_ad_ip8(); +void cmpa_l_imm32_ad_ip8(); +void and_b_ds_dd_ip8(); +void and_b_ais_dd_ip8(); +void and_b_aips_dd_ip8(); +void and_b_pais_dd_ip8(); +void and_b_das_dd_ip8(); +void and_b_dais_dd_ip8(); +void and_b_adr16_dd_ip8(); +void and_b_adr32_dd_ip8(); +void and_b_dpc_dd_ip8(); +void and_b_dpci_dd_ip8(); +void and_b_imm8_dd_ip8(); +void and_w_ds_dd_ip8(); +void and_w_ais_dd_ip8(); +void and_w_aips_dd_ip8(); +void and_w_pais_dd_ip8(); +void and_w_das_dd_ip8(); +void and_w_dais_dd_ip8(); +void and_w_adr16_dd_ip8(); +void and_w_adr32_dd_ip8(); +void and_w_dpc_dd_ip8(); +void and_w_dpci_dd_ip8(); +void and_w_imm16_dd_ip8(); +void and_l_ds_dd_ip8(); +void and_l_ais_dd_ip8(); +void and_l_aips_dd_ip8(); +void and_l_pais_dd_ip8(); +void and_l_das_dd_ip8(); +void and_l_dais_dd_ip8(); +void and_l_adr16_dd_ip8(); +void and_l_adr32_dd_ip8(); +void and_l_dpc_dd_ip8(); +void and_l_dpci_dd_ip8(); +void and_l_imm32_dd_ip8(); +void mulu_w_ds_dd_ip8(); +void mulu_w_ais_dd_ip8(); +void mulu_w_aips_dd_ip8(); +void mulu_w_pais_dd_ip8(); +void mulu_w_das_dd_ip8(); +void mulu_w_dais_dd_ip8(); +void mulu_w_adr16_dd_ip8(); +void mulu_w_adr32_dd_ip8(); +void mulu_w_dpc_dd_ip8(); +void mulu_w_dpci_dd_ip8(); +void mulu_w_imm16_dd_ip8(); +void abcd_ds_dd_ip8(); +void abcd_pais_paid_ip8(); +void and_b_dd_ais_ip8(); +void and_b_dd_aips_ip8(); +void and_b_dd_pais_ip8(); +void and_b_dd_das_ip8(); +void and_b_dd_dais_ip8(); +void and_b_dd_adr16_ip8(); +void and_b_dd_adr32_ip8(); +void exg_dd_ds_ip8(); +void exg_ad_as_ip8(); +void and_w_dd_ais_ip8(); +void and_w_dd_aips_ip8(); +void and_w_dd_pais_ip8(); +void and_w_dd_das_ip8(); +void and_w_dd_dais_ip8(); +void and_w_dd_adr16_ip8(); +void and_w_dd_adr32_ip8(); +void exg_dd_as_ip8(); +void and_l_dd_ais_ip8(); +void and_l_dd_aips_ip8(); +void and_l_dd_pais_ip8(); +void and_l_dd_das_ip8(); +void and_l_dd_dais_ip8(); +void and_l_dd_adr16_ip8(); +void and_l_dd_adr32_ip8(); +void muls_w_ds_dd_ip8(); +void muls_w_ais_dd_ip8(); +void muls_w_aips_dd_ip8(); +void muls_w_pais_dd_ip8(); +void muls_w_das_dd_ip8(); +void muls_w_dais_dd_ip8(); +void muls_w_adr16_dd_ip8(); +void muls_w_adr32_dd_ip8(); +void muls_w_dpc_dd_ip8(); +void muls_w_dpci_dd_ip8(); +void muls_w_imm16_dd_ip8(); +void add_b_ds_dd_ip8(); +void add_b_ais_dd_ip8(); +void add_b_aips_dd_ip8(); +void add_b_pais_dd_ip8(); +void add_b_das_dd_ip8(); +void add_b_dais_dd_ip8(); +void add_b_adr16_dd_ip8(); +void add_b_adr32_dd_ip8(); +void add_b_dpc_dd_ip8(); +void add_b_dpci_dd_ip8(); +void add_b_imm8_dd_ip8(); +void add_w_ds_dd_ip8(); +void add_w_as_dd_ip8(); +void add_w_ais_dd_ip8(); +void add_w_aips_dd_ip8(); +void add_w_pais_dd_ip8(); +void add_w_das_dd_ip8(); +void add_w_dais_dd_ip8(); +void add_w_adr16_dd_ip8(); +void add_w_adr32_dd_ip8(); +void add_w_dpc_dd_ip8(); +void add_w_dpci_dd_ip8(); +void add_w_imm16_dd_ip8(); +void add_l_ds_dd_ip8(); +void add_l_as_dd_ip8(); +void add_l_ais_dd_ip8(); +void add_l_aips_dd_ip8(); +void add_l_pais_dd_ip8(); +void add_l_das_dd_ip8(); +void add_l_dais_dd_ip8(); +void add_l_adr16_dd_ip8(); +void add_l_adr32_dd_ip8(); +void add_l_dpc_dd_ip8(); +void add_l_dpci_dd_ip8(); +void add_l_imm32_dd_ip8(); +void adda_w_ds_ad_ip8(); +void adda_w_as_ad_ip8(); +void adda_w_ais_ad_ip8(); +void adda_w_aips_ad_ip8(); +void adda_w_pais_ad_ip8(); +void adda_w_das_ad_ip8(); +void adda_w_dais_ad_ip8(); +void adda_w_adr16_ad_ip8(); +void adda_w_adr32_ad_ip8(); +void adda_w_dpc_ad_ip8(); +void adda_w_dpci_ad_ip8(); +void adda_w_imm16_ad_ip8(); +void addx_b_ds_dd_ip8(); +void addx_b_pais_paid_ip8(); +void add_b_dd_ais_ip8(); +void add_b_dd_aips_ip8(); +void add_b_dd_pais_ip8(); +void add_b_dd_das_ip8(); +void add_b_dd_dais_ip8(); +void add_b_dd_adr16_ip8(); +void add_b_dd_adr32_ip8(); +void addx_w_ds_dd_ip8(); +void addx_w_pais_paid_ip8(); +void add_w_dd_ais_ip8(); +void add_w_dd_aips_ip8(); +void add_w_dd_pais_ip8(); +void add_w_dd_das_ip8(); +void add_w_dd_dais_ip8(); +void add_w_dd_adr16_ip8(); +void add_w_dd_adr32_ip8(); +void addx_l_ds_dd_ip8(); +void addx_l_pais_paid_ip8(); +void add_l_dd_ais_ip8(); +void add_l_dd_aips_ip8(); +void add_l_dd_pais_ip8(); +void add_l_dd_das_ip8(); +void add_l_dd_dais_ip8(); +void add_l_dd_adr16_ip8(); +void add_l_dd_adr32_ip8(); +void adda_l_ds_ad_ip8(); +void adda_l_as_ad_ip8(); +void adda_l_ais_ad_ip8(); +void adda_l_aips_ad_ip8(); +void adda_l_pais_ad_ip8(); +void adda_l_das_ad_ip8(); +void adda_l_dais_ad_ip8(); +void adda_l_adr16_ad_ip8(); +void adda_l_adr32_ad_ip8(); +void adda_l_dpc_ad_ip8(); +void adda_l_dpci_ad_ip8(); +void adda_l_imm32_ad_ip8(); +void asr_b_imm3_ds_ip8(); +void lsr_b_imm3_ds_ip8(); +void roxr_b_imm3_ds_ip8(); +void ror_b_imm3_ds_ip8(); +void asr_b_dd_ds_ip8(); +void lsr_b_dd_ds_ip8(); +void roxr_b_dd_ds_ip8(); +void ror_b_dd_ds_ip8(); +void asr_w_imm3_ds_ip8(); +void lsr_w_imm3_ds_ip8(); +void roxr_w_imm3_ds_ip8(); +void ror_w_imm3_ds_ip8(); +void asr_w_dd_ds_ip8(); +void lsr_w_dd_ds_ip8(); +void roxr_w_dd_ds_ip8(); +void ror_w_dd_ds_ip8(); +void asr_l_imm3_ds_ip8(); +void lsr_l_imm3_ds_ip8(); +void roxr_l_imm3_ds_ip8(); +void ror_l_imm3_ds_ip8(); +void asr_l_dd_ds_ip8(); +void lsr_l_dd_ds_ip8(); +void roxr_l_dd_ds_ip8(); +void ror_l_dd_ds_ip8(); +void asr_ais_ip8(); +void asr_aips_ip8(); +void asr_pais_ip8(); +void asr_das_ip8(); +void asr_dais_ip8(); +void asr_adr16_ip8(); +void asr_adr32_ip8(); +void asl_b_imm3_ds_ip8(); +void lsl_b_imm3_ds_ip8(); +void roxl_b_imm3_ds_ip8(); +void rol_b_imm3_ds_ip8(); +void asl_b_dd_ds_ip8(); +void lsl_b_dd_ds_ip8(); +void roxl_b_dd_ds_ip8(); +void rol_b_dd_ds_ip8(); +void asl_w_imm3_ds_ip8(); +void lsl_w_imm3_ds_ip8(); +void roxl_w_imm3_ds_ip8(); +void rol_w_imm3_ds_ip8(); +void asl_w_dd_ds_ip8(); +void lsl_w_dd_ds_ip8(); +void roxl_w_dd_ds_ip8(); +void rol_w_dd_ds_ip8(); +void asl_l_imm3_ds_ip8(); +void lsl_l_imm3_ds_ip8(); +void roxl_l_imm3_ds_ip8(); +void rol_l_imm3_ds_ip8(); +void asl_l_dd_ds_ip8(); +void lsl_l_dd_ds_ip8(); +void roxl_l_dd_ds_ip8(); +void rol_l_dd_ds_ip8(); +void asl_ais_ip8(); +void asl_aips_ip8(); +void asl_pais_ip8(); +void asl_das_ip8(); +void asl_dais_ip8(); +void asl_adr16_ip8(); +void asl_adr32_ip8(); +void lsr_ais_ip8(); +void lsr_aips_ip8(); +void lsr_pais_ip8(); +void lsr_das_ip8(); +void lsr_dais_ip8(); +void lsr_adr16_ip8(); +void lsr_adr32_ip8(); +void lsl_ais_ip8(); +void lsl_aips_ip8(); +void lsl_pais_ip8(); +void lsl_das_ip8(); +void lsl_dais_ip8(); +void lsl_adr16_ip8(); +void lsl_adr32_ip8(); +void roxr_ais_ip8(); +void roxr_aips_ip8(); +void roxr_pais_ip8(); +void roxr_das_ip8(); +void roxr_dais_ip8(); +void roxr_adr16_ip8(); +void roxr_adr32_ip8(); +void roxl_ais_ip8(); +void roxl_aips_ip8(); +void roxl_pais_ip8(); +void roxl_das_ip8(); +void roxl_dais_ip8(); +void roxl_adr16_ip8(); +void roxl_adr32_ip8(); +void ror_ais_ip8(); +void ror_aips_ip8(); +void ror_pais_ip8(); +void ror_das_ip8(); +void ror_dais_ip8(); +void ror_adr16_ip8(); +void ror_adr32_ip8(); +void rol_ais_ip8(); +void rol_aips_ip8(); +void rol_pais_ip8(); +void rol_das_ip8(); +void rol_dais_ip8(); +void rol_adr16_ip8(); +void rol_adr32_ip8(); diff --git a/src/devices/cpu/m68000/m68008-sdf8.cpp b/src/devices/cpu/m68000/m68008-sdf8.cpp new file mode 100644 index 00000000000..bac20755586 --- /dev/null +++ b/src/devices/cpu/m68000/m68008-sdf8.cpp @@ -0,0 +1,239435 @@ +// Instruction handlers for the m68000 (direct, full, cpu) +// +// Generated by m68000gen.py sdf8 m68000.lst m68008-sdf8.cpp + +#include "emu.h" +#include "m68008.h" + +void m68008_device::state_reset_df8() +{ + // 002 rstp3 + m_icount -= 2; + // 296 rstp4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 27e rstp5 + debugger_exception_hook(0x00); + m_ftu = 0x0000; + m_icount -= 2; + // 27f rstp6 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_sr |= 0x0700; + update_interrupt(); + m_au = ext32(m_ftu); + m_icount -= 2; + // 2fb rstp7 + m_aob = m_au; + set_16h(m_da[16], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2ff rstp8 + m_aob = m_au; + set_16h(m_da[16], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 300 rstp9 + m_aob = m_au; + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + set_16l(m_da[16], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 11e rstpa + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::state_bus_error_df8() +{ + // 003 bser1 + m_ssw = m_base_ssw | (m_sr & SR_S ? SSW_S : 0); + m_at = m_aob; + m_ftu = m_sr; + m_au = m_pc; + m_icount -= 2; + // 3a7 bser2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3ca bser3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0a2 bser4 + m_aob = m_au; + m_dbout = m_aluo; + m_ftu = m_ird; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3c6 bser5 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 088 bser6 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_pc = m_at; + m_ftu = (m_ftu & ~0x1f) | m_ssw; + m_au = m_au - 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x02); + m_da[16] = m_au; + m_ftu = 0x0008; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::state_address_error_df8() +{ + // 003 bser1 + m_ssw = m_base_ssw | (m_sr & SR_S ? SSW_S : 0); + m_at = m_aob; + m_ftu = m_sr; + m_au = m_pc; + m_icount -= 2; + // 3a7 bser2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3ca bser3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0a2 bser4 + m_aob = m_au; + m_dbout = m_aluo; + m_ftu = m_ird; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3c6 bser5 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 088 bser6 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_pc = m_at; + m_ftu = (m_ftu & ~0x1f) | m_ssw; + m_au = m_au - 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x03); + m_da[16] = m_au; + m_ftu = 0x000c; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::state_double_fault_df8() +{ + // 001 halt1 + m_icount = 0; +} + +void m68008_device::state_interrupt_df8() +{ + // 1c4 itlx1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 234 itlx2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_alub = m_ftu; + m_pc = m_au; + m_sr = (m_sr & ~SR_I) | ((m_next_state >> 16) & SR_I); + update_interrupt(); + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_icount -= 2; + // 235 itlx3 + m_ftu = 0xfff1 | ((m_next_state >> 23) & 0xe); + m_au = m_da[16] - 2; + m_icount -= 2; + // 0eb itlx4 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 236 itlx5 + m_aob = m_at; + m_base_ssw = SSW_CPU | SSW_R | SSW_N; + start_interrupt_vector_lookup(); + m_edb = m_cpu_space8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + end_interrupt_vector_lookup(); + m_irc = m_edb; + // 118 itlx6 + m_ir = m_irc; + m_icount -= 2; + // 292 itlx7 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook((m_int_vector) >> 2); + m_da[16] = m_au; + m_ftu = m_int_vector; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::state_trace_df8() +{ + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x09); + m_da[16] = m_au; + m_ftu = 0x0024; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::state_illegal_df8() +{ + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x04); + m_da[16] = m_au; + m_ftu = 0x0010; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::state_priviledge_df8() +{ + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x08); + m_da[16] = m_au; + m_ftu = 0x0020; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::state_linea_df8() +{ + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x0a); + m_da[16] = m_au; + m_ftu = 0x0028; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::state_linef_df8() +{ + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x0b); + m_da[16] = m_au; + m_ftu = 0x002c; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_b_imm8_ds_df8() // 0000 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or8(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_b_imm8_ais_df8() // 0010 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_b_imm8_aips_df8() // 0018 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_b_imm8_pais_df8() // 0020 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_b_imm8_das_df8() // 0028 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_b_imm8_dais_df8() // 0030 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_b_imm8_adr16_df8() // 0038 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_b_imm8_adr32_df8() // 0039 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_imm8_ccr_df8() // 003c ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dtl:m_dt + alu_or8(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_w_imm16_ds_df8() // 0040 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_w_imm16_ais_df8() // 0050 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_w_imm16_aips_df8() // 0058 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_w_imm16_pais_df8() // 0060 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_w_imm16_das_df8() // 0068 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_w_imm16_dais_df8() // 0070 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_w_imm16_adr16_df8() // 0078 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_w_imm16_adr32_df8() // 0079 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_i16u_sr_df8() // 007c ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=14 c=2 m=..... i=....... ALU.or_ a=R.ftu:m_ftu d=R.dtl:m_dt + alu_or(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_l_imm32_ds_df8() // 0080 fff8 +{ + int ry = m_irdi & 7; + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or(m_dt, m_da[ry]); + sr_nzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=18:m_da[ry] + alu_or(high16(m_dt), high16(m_da[ry])); + sr_nzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_l_imm32_ais_df8() // 0090 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_l_imm32_aips_df8() // 0098 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_l_imm32_pais_df8() // 00a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_l_imm32_das_df8() // 00a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_l_imm32_dais_df8() // 00b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_l_imm32_adr16_df8() // 00b8 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_l_imm32_adr32_df8() // 00b9 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_ds_df8() // 0100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 3e7 btsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor(m_da[rx], m_da[ry]); + // 0e7 btsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto btsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +btsr3: + // 044 btsr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_and(high16(m_da[ry]), 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movep_w_das_dd_df8() // 0108 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1d2 mpiw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 29a mpiw2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + set_8h(m_dbin, m_edb); + // 368 mpiw3 + m_aob = m_au; + m_ir = m_irc; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_8(m_dbin, m_edb); + // 36a mpiw4 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_ais_df8() // 0110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_aips_df8() // 0118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_pais_df8() // 0120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_das_df8() // 0128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_dais_df8() // 0130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_adr16_df8() // 0138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_adr32_df8() // 0139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_dpc_df8() // 013a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_dpci_df8() // 013b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_imm_df8() // 013c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0ab btsi1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16h(m_dt, high16(m_at)); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + // 0e7 btsr2 + m_t = m_dcr & 0x10; + m_alub = m_dt; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto btsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_dt, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +btsr3: + // 044 btsr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=23:m_dt d=R.dcro8:m_dcro8 + alu_and8(high16(m_dt), 1 << (m_dcr & 7)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_dd_ds_df8() // 0140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 3ef bcsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor(m_da[rx], m_da[ry]); + // 06a bcsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=13 c=2 m=..... i=....... ALU.eor a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_eor(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bcsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bcsr3: + // 084 bcsr3 + m_alub = high16(m_da[ry]); + // alu r=13 c=2 m=..... i=....... ALU.eor a=18:m_da[ry] d=R.dcro:m_dcro + alu_eor(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movep_l_das_dd_df8() // 0148 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1d6 mpil1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 29e mpil2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + set_8h(m_dbin, m_edb); + // 34e mpil3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_8(m_dbin, m_edb); + // 34f mpil4 + m_aob = m_au; + set_16h(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + set_8h(m_dbin, m_edb); + // 368 mpiw3 + m_aob = m_au; + m_ir = m_irc; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_8(m_dbin, m_edb); + // 36a mpiw4 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_dd_ais_df8() // 0150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_dd_aips_df8() // 0158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_dd_pais_df8() // 0160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_dd_das_df8() // 0168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_dd_dais_df8() // 0170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_dd_adr16_df8() // 0178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_dd_adr32_df8() // 0179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_dd_ds_df8() // 0180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 3eb bclr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_or(m_da[rx], m_da[ry]); + // 06e bclr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=14 c=2 m=..... i=.l..... ALU.or_ a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_or(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bclr3; + else + goto bclr4; +bclr4: + // 0cc bclr4 + // alu r=14 c=4 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=R.dcro:m_dcro + alu_eor(m_aluo, 1 << (m_dcr & 15)); + m_icount -= 2; + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.l...i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bclr3: + // 08c bclr3 + m_alub = high16(m_da[ry]); + // alu r=14 c=2 m=..... i=.l..... ALU.or_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_or(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0c8 bclr5 + // alu r=14 c=4 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=R.dcro:m_dcro + alu_eor(m_aluo, 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.l...i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movep_w_dd_das_df8() // 0188 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1ca mpow1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 36d mpow2 + m_aob = m_au; + m_ir = m_irc; + set_8xh(m_dbout, m_da[rx]); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dxl:m_da[rx] + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + // 36e mpow3 + m_aob = m_au; + set_8xl(m_dbout, m_da[rx]); + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_dd_ais_df8() // 0190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_dd_aips_df8() // 0198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_dd_pais_df8() // 01a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_dd_das_df8() // 01a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_dd_dais_df8() // 01b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_dd_adr16_df8() // 01b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_dd_adr32_df8() // 01b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_dd_ds_df8() // 01c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 3ef bcsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_or(m_da[rx], m_da[ry]); + // 06a bcsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=14 c=2 m=..... i=....... ALU.or_ a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_or(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bcsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bcsr3: + // 084 bcsr3 + m_alub = high16(m_da[ry]); + // alu r=14 c=2 m=..... i=....... ALU.or_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_or(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movep_l_dd_das_df8() // 01c8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1ce mpol1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 36b mpol2 + m_aob = m_au; + set_8xh(m_dbout, high16(m_da[rx])); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=16:m_da[rx] d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + // 36c mpol3 + m_aob = m_au; + set_8xl(m_dbout, high16(m_da[rx])); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=16:m_da[rx] d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 36d mpow2 + m_aob = m_au; + m_ir = m_irc; + set_8xh(m_dbout, m_da[rx]); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dxl:m_da[rx] + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + // 36e mpow3 + m_aob = m_au; + set_8xl(m_dbout, m_da[rx]); + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_dd_ais_df8() // 01d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_dd_aips_df8() // 01d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_dd_pais_df8() // 01e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_dd_das_df8() // 01e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_dd_dais_df8() // 01f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_dd_adr16_df8() // 01f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_dd_adr32_df8() // 01f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_b_imm8_ds_df8() // 0200 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_and8(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_b_imm8_ais_df8() // 0210 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_b_imm8_aips_df8() // 0218 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_b_imm8_pais_df8() // 0220 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_b_imm8_das_df8() // 0228 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_b_imm8_dais_df8() // 0230 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_b_imm8_adr16_df8() // 0238 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_b_imm8_adr32_df8() // 0239 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_imm8_ccr_df8() // 023c ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=4 c=2 m=..... i=b...... ALU.and_ a=R.ftu:m_ftu d=R.dtl:m_dt + alu_and8(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_w_imm16_ds_df8() // 0240 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_and(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_w_imm16_ais_df8() // 0250 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_w_imm16_aips_df8() // 0258 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_w_imm16_pais_df8() // 0260 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_w_imm16_das_df8() // 0268 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_w_imm16_dais_df8() // 0270 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_w_imm16_adr16_df8() // 0278 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_w_imm16_adr32_df8() // 0279 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_i16u_sr_df8() // 027c ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=4 c=2 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=R.dtl:m_dt + alu_and(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_l_imm32_ds_df8() // 0280 fff8 +{ + int ry = m_irdi & 7; + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_and(m_dt, m_da[ry]); + sr_nzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=18:m_da[ry] + alu_and(high16(m_dt), high16(m_da[ry])); + sr_nzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_l_imm32_ais_df8() // 0290 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_l_imm32_aips_df8() // 0298 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_l_imm32_pais_df8() // 02a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_l_imm32_das_df8() // 02a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_l_imm32_dais_df8() // 02b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_l_imm32_adr16_df8() // 02b8 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_l_imm32_adr32_df8() // 02b9 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_b_imm8_ds_df8() // 0400 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub8(m_dt, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_b_imm8_ais_df8() // 0410 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_b_imm8_aips_df8() // 0418 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_b_imm8_pais_df8() // 0420 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_b_imm8_das_df8() // 0428 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_b_imm8_dais_df8() // 0430 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_b_imm8_adr16_df8() // 0438 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_b_imm8_adr32_df8() // 0439 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_w_imm16_ds_df8() // 0440 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub(m_dt, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_w_imm16_ais_df8() // 0450 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_w_imm16_aips_df8() // 0458 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_w_imm16_pais_df8() // 0460 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_w_imm16_das_df8() // 0468 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_w_imm16_dais_df8() // 0470 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_w_imm16_adr16_df8() // 0478 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_w_imm16_adr32_df8() // 0479 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_l_imm32_ds_df8() // 0480 fff8 +{ + int ry = m_irdi & 7; + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub(m_dt, m_da[ry]); + sr_xnzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=18:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + sr_xnzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_l_imm32_ais_df8() // 0490 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_l_imm32_aips_df8() // 0498 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_l_imm32_pais_df8() // 04a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_l_imm32_das_df8() // 04a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_l_imm32_dais_df8() // 04b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_l_imm32_adr16_df8() // 04b8 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_l_imm32_adr32_df8() // 04b9 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_b_imm8_ds_df8() // 0600 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_add8(m_dt, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_b_imm8_ais_df8() // 0610 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_b_imm8_aips_df8() // 0618 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_b_imm8_pais_df8() // 0620 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_b_imm8_das_df8() // 0628 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_b_imm8_dais_df8() // 0630 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_b_imm8_adr16_df8() // 0638 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_b_imm8_adr32_df8() // 0639 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_w_imm16_ds_df8() // 0640 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_add(m_dt, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_w_imm16_ais_df8() // 0650 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_w_imm16_aips_df8() // 0658 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_w_imm16_pais_df8() // 0660 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_w_imm16_das_df8() // 0668 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_w_imm16_dais_df8() // 0670 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_w_imm16_adr16_df8() // 0678 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_w_imm16_adr32_df8() // 0679 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_l_imm32_ds_df8() // 0680 fff8 +{ + int ry = m_irdi & 7; + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_add(m_dt, m_da[ry]); + sr_xnzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=18:m_da[ry] + alu_addc(high16(m_dt), high16(m_da[ry])); + sr_xnzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_l_imm32_ais_df8() // 0690 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_l_imm32_aips_df8() // 0698 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_l_imm32_pais_df8() // 06a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_l_imm32_das_df8() // 06a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_l_imm32_dais_df8() // 06b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_l_imm32_adr16_df8() // 06b8 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_l_imm32_adr32_df8() // 06b9 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_ds_df8() // 0800 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3e7 btsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_dt; + m_at = m_dt; + m_au = m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor(m_dt, m_da[ry]); + // 0e7 btsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto btsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +btsr3: + // 044 btsr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_and(high16(m_da[ry]), 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_ais_df8() // 0810 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_aips_df8() // 0818 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_pais_df8() // 0820 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_das_df8() // 0828 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_dais_df8() // 0830 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_adr16_df8() // 0838 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_adr32_df8() // 0839 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_dpc_df8() // 083a ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_dpci_df8() // 083b ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_imm8_ds_df8() // 0840 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3ef bcsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_dt; + m_at = m_dt; + m_au = m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor(m_dt, m_da[ry]); + // 06a bcsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=13 c=2 m=..... i=....... ALU.eor a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_eor(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bcsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bcsr3: + // 084 bcsr3 + m_alub = high16(m_da[ry]); + // alu r=13 c=2 m=..... i=....... ALU.eor a=18:m_da[ry] d=R.dcro:m_dcro + alu_eor(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_imm8_ais_df8() // 0850 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_imm8_aips_df8() // 0858 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_imm8_pais_df8() // 0860 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_imm8_das_df8() // 0868 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_imm8_dais_df8() // 0870 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_imm8_adr16_df8() // 0878 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_imm8_adr32_df8() // 0879 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_imm8_ds_df8() // 0880 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3eb bclr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_dt; + m_at = m_dt; + m_au = m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or(m_dt, m_da[ry]); + // 06e bclr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=14 c=2 m=..... i=.l..... ALU.or_ a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_or(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bclr3; + else + goto bclr4; +bclr4: + // 0cc bclr4 + // alu r=14 c=4 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=R.dcro:m_dcro + alu_eor(m_aluo, 1 << (m_dcr & 15)); + m_icount -= 2; + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.l...i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bclr3: + // 08c bclr3 + m_alub = high16(m_da[ry]); + // alu r=14 c=2 m=..... i=.l..... ALU.or_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_or(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0c8 bclr5 + // alu r=14 c=4 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=R.dcro:m_dcro + alu_eor(m_aluo, 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.l...i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_imm8_ais_df8() // 0890 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_imm8_aips_df8() // 0898 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_imm8_pais_df8() // 08a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_imm8_das_df8() // 08a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_imm8_dais_df8() // 08b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_imm8_adr16_df8() // 08b8 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_imm8_adr32_df8() // 08b9 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_imm8_ds_df8() // 08c0 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3ef bcsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_dt; + m_at = m_dt; + m_au = m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or(m_dt, m_da[ry]); + // 06a bcsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=14 c=2 m=..... i=....... ALU.or_ a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_or(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bcsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bcsr3: + // 084 bcsr3 + m_alub = high16(m_da[ry]); + // alu r=14 c=2 m=..... i=....... ALU.or_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_or(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_imm8_ais_df8() // 08d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_imm8_aips_df8() // 08d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_imm8_pais_df8() // 08e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_imm8_das_df8() // 08e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_imm8_dais_df8() // 08f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_imm8_adr16_df8() // 08f8 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_imm8_adr32_df8() // 08f9 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_b_imm8_ds_df8() // 0a00 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor8(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_b_imm8_ais_df8() // 0a10 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_b_imm8_aips_df8() // 0a18 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_b_imm8_pais_df8() // 0a20 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_b_imm8_das_df8() // 0a28 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_b_imm8_dais_df8() // 0a30 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_b_imm8_adr16_df8() // 0a38 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_b_imm8_adr32_df8() // 0a39 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_imm8_ccr_df8() // 0a3c ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.ftu:m_ftu d=R.dtl:m_dt + alu_eor8(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_w_imm16_ds_df8() // 0a40 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_w_imm16_ais_df8() // 0a50 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_w_imm16_aips_df8() // 0a58 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_w_imm16_pais_df8() // 0a60 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_w_imm16_das_df8() // 0a68 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_w_imm16_dais_df8() // 0a70 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_w_imm16_adr16_df8() // 0a78 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_w_imm16_adr32_df8() // 0a79 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_i16u_sr_df8() // 0a7c ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=13 c=2 m=..... i=....... ALU.eor a=R.ftu:m_ftu d=R.dtl:m_dt + alu_eor(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_l_imm32_ds_df8() // 0a80 fff8 +{ + int ry = m_irdi & 7; + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor(m_dt, m_da[ry]); + sr_nzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=18:m_da[ry] + alu_eor(high16(m_dt), high16(m_da[ry])); + sr_nzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_l_imm32_ais_df8() // 0a90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_l_imm32_aips_df8() // 0a98 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_l_imm32_pais_df8() // 0aa0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_l_imm32_das_df8() // 0aa8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_l_imm32_dais_df8() // 0ab0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=13 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_l_imm32_adr16_df8() // 0ab8 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_l_imm32_adr32_df8() // 0ab9 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_b_imm8_ds_df8() // 0c00 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 108 rcaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub8(m_dt, m_da[ry]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_b_imm8_ais_df8() // 0c10 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_b_imm8_aips_df8() // 0c18 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_b_imm8_pais_df8() // 0c20 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_b_imm8_das_df8() // 0c28 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_b_imm8_dais_df8() // 0c30 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_b_imm8_adr16_df8() // 0c38 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_b_imm8_adr32_df8() // 0c39 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_w_imm16_ds_df8() // 0c40 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 108 rcaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub(m_dt, m_da[ry]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_w_imm16_ais_df8() // 0c50 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_w_imm16_aips_df8() // 0c58 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_w_imm16_pais_df8() // 0c60 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_w_imm16_das_df8() // 0c68 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_w_imm16_dais_df8() // 0c70 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_w_imm16_adr16_df8() // 0c78 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_w_imm16_adr32_df8() // 0c79 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_l_imm32_ds_df8() // 0c80 fff8 +{ + int ry = m_irdi & 7; + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + if(!m_cmpild_instr_callback.isnull()) (m_cmpild_instr_callback)(ry, (m_dt & 0xffff0000) | m_dbin); + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 104 rcal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub(m_dt, m_da[ry]); + sr_nzvc(); + // 239 rcal2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=18:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_l_imm32_ais_df8() // 0c90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_l_imm32_aips_df8() // 0c98 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_l_imm32_pais_df8() // 0ca0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_l_imm32_das_df8() // 0ca8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_l_imm32_dais_df8() // 0cb0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_l_imm32_adr16_df8() // 0cb8 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_l_imm32_adr32_df8() // 0cb9 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ds_dd_df8() // 1000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ais_dd_df8() // 1010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_aips_dd_df8() // 1018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_pais_dd_df8() // 1020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_das_dd_df8() // 1028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dais_dd_df8() // 1030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr16_dd_df8() // 1038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr32_dd_df8() // 1039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpc_dd_df8() // 103a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpci_dd_df8() // 103b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_imm8_dd_df8() // 103c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ds_aid_df8() // 1080 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ais_aid_df8() // 1090 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_aips_aid_df8() // 1098 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_pais_aid_df8() // 10a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_das_aid_df8() // 10a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dais_aid_df8() // 10b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr16_aid_df8() // 10b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr32_aid_df8() // 10b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpc_aid_df8() // 10ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpci_aid_df8() // 10bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_imm8_aid_df8() // 10bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dt); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ds_aipd_df8() // 10c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ais_aipd_df8() // 10d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_aips_aipd_df8() // 10d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_pais_aipd_df8() // 10e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_das_aipd_df8() // 10e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dais_aipd_df8() // 10f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr16_aipd_df8() // 10f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr32_aipd_df8() // 10f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpc_aipd_df8() // 10fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpci_aipd_df8() // 10fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_imm8_aipd_df8() // 10fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dt); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ds_paid_df8() // 1100 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ais_paid_df8() // 1110 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_aips_paid_df8() // 1118 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_pais_paid_df8() // 1120 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_das_paid_df8() // 1128 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dais_paid_df8() // 1130 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr16_paid_df8() // 1138 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr32_paid_df8() // 1139 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpc_paid_df8() // 113a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpci_paid_df8() // 113b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_imm8_paid_df8() // 113c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ds_dad_df8() // 1140 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + set_8xl(m_dbout, m_da[ry]); + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ais_dad_df8() // 1150 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_aips_dad_df8() // 1158 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_pais_dad_df8() // 1160 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_das_dad_df8() // 1168 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dais_dad_df8() // 1170 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr16_dad_df8() // 1178 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr32_dad_df8() // 1179 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpc_dad_df8() // 117a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpci_dad_df8() // 117b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_imm8_dad_df8() // 117c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + set_8xl(m_dbout, m_dt); + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ds_daid_df8() // 1180 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + set_8xl(m_dbout, m_da[ry]); + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ais_daid_df8() // 1190 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_aips_daid_df8() // 1198 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_pais_daid_df8() // 11a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_das_daid_df8() // 11a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dais_daid_df8() // 11b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr16_daid_df8() // 11b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr32_daid_df8() // 11b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpc_daid_df8() // 11ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpci_daid_df8() // 11bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_imm8_daid_df8() // 11bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + set_8xl(m_dbout, m_dt); + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ds_adr16_df8() // 11c0 fff8 +{ + int ry = m_irdi & 7; + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ais_adr16_df8() // 11d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_aips_adr16_df8() // 11d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_pais_adr16_df8() // 11e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_das_adr16_df8() // 11e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dais_adr16_df8() // 11f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr16_adr16_df8() // 11f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr32_adr16_df8() // 11f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpc_adr16_df8() // 11fa ffff +{ + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpci_adr16_df8() // 11fb ffff +{ + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_imm8_adr16_df8() // 11fc ffff +{ + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ds_adr32_df8() // 13c0 fff8 +{ + int ry = m_irdi & 7; + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ais_adr32_df8() // 13d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_aips_adr32_df8() // 13d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_pais_adr32_df8() // 13e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_das_adr32_df8() // 13e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dais_adr32_df8() // 13f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr16_adr32_df8() // 13f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr32_adr32_df8() // 13f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpc_adr32_df8() // 13fa ffff +{ + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpci_adr32_df8() // 13fb ffff +{ + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_imm8_adr32_df8() // 13fc ffff +{ + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ds_dd_df8() // 2000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_da[rx] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_as_dd_df8() // 2008 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ais_dd_df8() // 2010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_aips_dd_df8() // 2018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_pais_dd_df8() // 2020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_das_dd_df8() // 2028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dais_dd_df8() // 2030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr16_dd_df8() // 2038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr32_dd_df8() // 2039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpc_dd_df8() // 203a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpci_dd_df8() // 203b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_imm32_dd_df8() // 203c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_ds_ad_df8() // 2040 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_as_ad_df8() // 2048 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + m_da[rx] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_ais_ad_df8() // 2050 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_aips_ad_df8() // 2058 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_pais_ad_df8() // 2060 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_das_ad_df8() // 2068 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_dais_ad_df8() // 2070 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_adr16_ad_df8() // 2078 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_adr32_ad_df8() // 2079 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_dpc_ad_df8() // 207a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_dpci_ad_df8() // 207b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_imm32_ad_df8() // 207c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ds_aid_df8() // 2080 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2f9 rmrl1 + m_aob = m_da[rx]; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23f rmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_as_aid_df8() // 2088 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2f9 rmrl1 + m_aob = m_da[rx]; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23f rmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ais_aid_df8() // 2090 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_aips_aid_df8() // 2098 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_pais_aid_df8() // 20a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_das_aid_df8() // 20a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dais_aid_df8() // 20b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr16_aid_df8() // 20b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr32_aid_df8() // 20b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpc_aid_df8() // 20ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpci_aid_df8() // 20bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_imm32_aid_df8() // 20bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f9 rmrl1 + m_aob = m_da[rx]; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23f rmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ds_aipd_df8() // 20c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2fd rmil1 + m_aob = m_da[rx]; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23c rmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23d rmil3 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_as_aipd_df8() // 20c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2fd rmil1 + m_aob = m_da[rx]; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23c rmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23d rmil3 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ais_aipd_df8() // 20d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_aips_aipd_df8() // 20d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_pais_aipd_df8() // 20e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_das_aipd_df8() // 20e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dais_aipd_df8() // 20f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr16_aipd_df8() // 20f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr32_aipd_df8() // 20f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpc_aipd_df8() // 20fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpci_aipd_df8() // 20fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_imm32_aipd_df8() // 20fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fd rmil1 + m_aob = m_da[rx]; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23c rmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23d rmil3 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ds_paid_df8() // 2100 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2fc rmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 23e rmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_as_paid_df8() // 2108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2fc rmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 23e rmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ais_paid_df8() // 2110 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_aips_paid_df8() // 2118 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_pais_paid_df8() // 2120 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_das_paid_df8() // 2128 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dais_paid_df8() // 2130 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr16_paid_df8() // 2138 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr32_paid_df8() // 2139 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpc_paid_df8() // 213a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpci_paid_df8() // 213b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_imm32_paid_df8() // 213c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fc rmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 23e rmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ds_dad_df8() // 2140 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2de rmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_as_dad_df8() // 2148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2de rmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ais_dad_df8() // 2150 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_aips_dad_df8() // 2158 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_pais_dad_df8() // 2160 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_das_dad_df8() // 2168 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dais_dad_df8() // 2170 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr16_dad_df8() // 2178 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr32_dad_df8() // 2179 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpc_dad_df8() // 217a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpci_dad_df8() // 217b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_imm32_dad_df8() // 217c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2de rmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ds_daid_df8() // 2180 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1ef rmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 105 rmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxl3; + else + goto rmxl2; +rmxl2: + // 12c rmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmxl3: + // 1ec rmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmdl2: + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_as_daid_df8() // 2188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1ef rmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 105 rmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxl3; + else + goto rmxl2; +rmxl2: + // 12c rmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmxl3: + // 1ec rmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmdl2: + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ais_daid_df8() // 2190 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_aips_daid_df8() // 2198 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_pais_daid_df8() // 21a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_das_daid_df8() // 21a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dais_daid_df8() // 21b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr16_daid_df8() // 21b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr32_daid_df8() // 21b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpc_daid_df8() // 21ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpci_daid_df8() // 21bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_imm32_daid_df8() // 21bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1ef rmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 105 rmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxl3; + else + goto rmxl2; +rmxl2: + // 12c rmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmxl3: + // 1ec rmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmdl2: + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ds_adr16_df8() // 21c0 fff8 +{ + int ry = m_irdi & 7; + // 2dd rawl1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_as_adr16_df8() // 21c8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2dd rawl1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ais_adr16_df8() // 21d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_aips_adr16_df8() // 21d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_pais_adr16_df8() // 21e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_das_adr16_df8() // 21e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dais_adr16_df8() // 21f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr16_adr16_df8() // 21f8 ffff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr32_adr16_df8() // 21f9 ffff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpc_adr16_df8() // 21fa ffff +{ + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpci_adr16_df8() // 21fb ffff +{ + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_imm32_adr16_df8() // 21fc ffff +{ + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2dd rawl1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ds_adr32_df8() // 23c0 fff8 +{ + int ry = m_irdi & 7; + // 1ee rall1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bf rall2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_as_adr32_df8() // 23c8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1ee rall1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bf rall2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ais_adr32_df8() // 23d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_aips_adr32_df8() // 23d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_pais_adr32_df8() // 23e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_das_adr32_df8() // 23e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dais_adr32_df8() // 23f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr16_adr32_df8() // 23f8 ffff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr32_adr32_df8() // 23f9 ffff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpc_adr32_df8() // 23fa ffff +{ + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpci_adr32_df8() // 23fb ffff +{ + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_imm32_adr32_df8() // 23fc ffff +{ + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1ee rall1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bf rall2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ds_dd_df8() // 3000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_as_dd_df8() // 3008 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ais_dd_df8() // 3010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_aips_dd_df8() // 3018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_pais_dd_df8() // 3020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_das_dd_df8() // 3028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dais_dd_df8() // 3030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr16_dd_df8() // 3038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr32_dd_df8() // 3039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpc_dd_df8() // 303a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpci_dd_df8() // 303b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_imm16_dd_df8() // 303c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_ds_ad_df8() // 3040 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 279 rrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + m_au = m_au + 2; + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_as_ad_df8() // 3048 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 279 rrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + m_au = m_au + 2; + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + m_da[rx] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_ais_ad_df8() // 3050 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_aips_ad_df8() // 3058 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_pais_ad_df8() // 3060 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_das_ad_df8() // 3068 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_dais_ad_df8() // 3070 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_adr16_ad_df8() // 3078 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_adr32_ad_df8() // 3079 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_dpc_ad_df8() // 307a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_dpci_ad_df8() // 307b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_imm16_ad_df8() // 307c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 279 rrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + m_au = m_au + 2; + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ds_aid_df8() // 3080 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_as_aid_df8() // 3088 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ais_aid_df8() // 3090 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_aips_aid_df8() // 3098 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_pais_aid_df8() // 30a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_das_aid_df8() // 30a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dais_aid_df8() // 30b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr16_aid_df8() // 30b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr32_aid_df8() // 30b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpc_aid_df8() // 30ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpci_aid_df8() // 30bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_imm16_aid_df8() // 30bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dt; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ds_aipd_df8() // 30c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_as_aipd_df8() // 30c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ais_aipd_df8() // 30d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_aips_aipd_df8() // 30d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_pais_aipd_df8() // 30e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_das_aipd_df8() // 30e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dais_aipd_df8() // 30f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr16_aipd_df8() // 30f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr32_aipd_df8() // 30f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpc_aipd_df8() // 30fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpci_aipd_df8() // 30fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_imm16_aipd_df8() // 30fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dt; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ds_paid_df8() // 3100 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_as_paid_df8() // 3108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ais_paid_df8() // 3110 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_aips_paid_df8() // 3118 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_pais_paid_df8() // 3120 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_das_paid_df8() // 3128 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dais_paid_df8() // 3130 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr16_paid_df8() // 3138 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr32_paid_df8() // 3139 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpc_paid_df8() // 313a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpci_paid_df8() // 313b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_imm16_paid_df8() // 313c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ds_dad_df8() // 3140 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_as_dad_df8() // 3148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ais_dad_df8() // 3150 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_aips_dad_df8() // 3158 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_pais_dad_df8() // 3160 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_das_dad_df8() // 3168 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dais_dad_df8() // 3170 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr16_dad_df8() // 3178 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr32_dad_df8() // 3179 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpc_dad_df8() // 317a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpci_dad_df8() // 317b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_imm16_dad_df8() // 317c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ds_daid_df8() // 3180 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_as_daid_df8() // 3188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ais_daid_df8() // 3190 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_aips_daid_df8() // 3198 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_pais_daid_df8() // 31a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_das_daid_df8() // 31a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dais_daid_df8() // 31b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr16_daid_df8() // 31b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr32_daid_df8() // 31b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpc_daid_df8() // 31ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpci_daid_df8() // 31bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_imm16_daid_df8() // 31bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ds_adr16_df8() // 31c0 fff8 +{ + int ry = m_irdi & 7; + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_as_adr16_df8() // 31c8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ais_adr16_df8() // 31d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_aips_adr16_df8() // 31d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_pais_adr16_df8() // 31e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_das_adr16_df8() // 31e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dais_adr16_df8() // 31f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr16_adr16_df8() // 31f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr32_adr16_df8() // 31f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpc_adr16_df8() // 31fa ffff +{ + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpci_adr16_df8() // 31fb ffff +{ + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_imm16_adr16_df8() // 31fc ffff +{ + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ds_adr32_df8() // 33c0 fff8 +{ + int ry = m_irdi & 7; + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_as_adr32_df8() // 33c8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ais_adr32_df8() // 33d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_aips_adr32_df8() // 33d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_pais_adr32_df8() // 33e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_das_adr32_df8() // 33e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dais_adr32_df8() // 33f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr16_adr32_df8() // 33f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr32_adr32_df8() // 33f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpc_adr32_df8() // 33fa ffff +{ + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpci_adr32_df8() // 33fb ffff +{ + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_imm16_adr32_df8() // 33fc ffff +{ + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_b_ds_df8() // 4000 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dyl:m_da[ry] d=0 + alu_subx8(m_da[ry], 0x0000); + sr_xnzvc_u(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_b_ais_df8() // 4010 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_b_aips_df8() // 4018 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_b_pais_df8() // 4020 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_b_das_df8() // 4028 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_b_dais_df8() // 4030 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=10 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_b_adr16_df8() // 4038 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_b_adr32_df8() // 4039 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_w_ds_df8() // 4040 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dyl:m_da[ry] d=0 + alu_subx(m_da[ry], 0x0000); + sr_xnzvc_u(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_w_ais_df8() // 4050 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_w_aips_df8() // 4058 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_w_pais_df8() // 4060 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_w_das_df8() // 4068 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_w_dais_df8() // 4070 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=10 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_w_adr16_df8() // 4078 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_w_adr32_df8() // 4079 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_l_ds_df8() // 4080 fff8 +{ + int ry = m_irdi & 7; + // 137 nnrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dyl:m_da[ry] d=0 + alu_subx(m_da[ry], 0x0000); + sr_xnzvc_u(); + // 15e nnrl2 + set_16l(m_da[ry], m_aluo); + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=18:m_da[ry] d=0 + alu_subc(high16(m_da[ry]), 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_l_ais_df8() // 4090 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_l_aips_df8() // 4098 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_l_pais_df8() // 40a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_l_das_df8() // 40a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_l_dais_df8() // 40b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=10 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_l_adr16_df8() // 40b8 ffff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_l_adr32_df8() // 40b9 ffff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_sr_ds_df8() // 40c0 fff8 +{ + int ry = m_irdi & 7; + // 3a5 strw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 340 strw2 + set_16l(m_da[ry], m_ftu); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_sr_ais_df8() // 40d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_sr_aips_df8() // 40d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_sr_pais_df8() // 40e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_sr_das_df8() // 40e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_sr_dais_df8() // 40f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=10 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_sr_adr16_df8() // 40f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_sr_adr32_df8() // 40f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::chk_w_ds_dd_df8() // 4180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 152 chkr1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_sub(m_da[rx], m_da[ry]); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_ais_dd_df8() // 4190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_aips_dd_df8() // 4198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_pais_dd_df8() // 41a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_das_dd_df8() // 41a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_dais_dd_df8() // 41b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_adr16_dd_df8() // 41b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_adr32_dd_df8() // 41b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_dpc_dd_df8() // 41ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_dpci_dd_df8() // 41bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_imm16_dd_df8() // 41bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 152 chkr1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dtl:m_dt + alu_sub(m_da[rx], m_dt); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::lea_ais_ad_df8() // 41d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2f1 leaa1 + m_aob = m_au; + m_ir = m_irc; + m_movemr = m_dbin; + m_pc = m_au; + m_at = m_da[ry]; + m_ftu = m_dbin; + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lea_das_ad_df8() // 41e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2f2 lead1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // 309 lead2 + m_da[rx] = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lea_dais_ad_df8() // 41f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1fb leax0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3ea leax1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto leax3; + else + goto leax2; +leax2: + // 130 leax2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto leax4; +leax3: + // 1f0 leax3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto leax4; +leax4: + // 30a leax4 + m_da[rx] = m_au; + m_au = m_pc + 4; + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lea_adr16_ad_df8() // 41f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 275 laaw1 + m_aob = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lea_adr32_ad_df8() // 41f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 3e4 laal1 + m_aob = m_au; + set_16h(m_da[rx], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bd laal2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lea_dpc_ad_df8() // 41fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 2f2 lead1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // 309 lead2 + m_da[rx] = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lea_dpci_ad_df8() // 41fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1fb leax0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3ea leax1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto leax3; + else + goto leax2; +leax2: + // 130 leax2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto leax4; +leax3: + // 1f0 leax3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto leax4; +leax4: + // 30a leax4 + m_da[rx] = m_au; + m_au = m_pc + 4; + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_b_ds_df8() // 4200 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=0 + alu_and8(m_da[ry], 0x0000); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_b_ais_df8() // 4210 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_b_aips_df8() // 4218 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and8(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_b_pais_df8() // 4220 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and8(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_b_das_df8() // 4228 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_b_dais_df8() // 4230 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_b_adr16_df8() // 4238 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_b_adr32_df8() // 4239 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_w_ds_df8() // 4240 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=0 + alu_and(m_da[ry], 0x0000); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_w_ais_df8() // 4250 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_w_aips_df8() // 4258 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_w_pais_df8() // 4260 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_w_das_df8() // 4268 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_w_dais_df8() // 4270 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_w_adr16_df8() // 4278 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_w_adr32_df8() // 4279 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_l_ds_df8() // 4280 fff8 +{ + int ry = m_irdi & 7; + // 137 nnrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=0 + alu_and(m_da[ry], 0x0000); + sr_nzvc(); + // 15e nnrl2 + set_16l(m_da[ry], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=18:m_da[ry] d=0 + alu_and(high16(m_da[ry]), 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_l_ais_df8() // 4290 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_l_aips_df8() // 4298 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_l_pais_df8() // 42a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_l_das_df8() // 42a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_l_dais_df8() // 42b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_l_adr16_df8() // 42b8 ffff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_l_adr32_df8() // 42b9 ffff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_b_ds_df8() // 4400 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dyl:m_da[ry] d=0 + alu_sub8(m_da[ry], 0x0000); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_b_ais_df8() // 4410 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_b_aips_df8() // 4418 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_b_pais_df8() // 4420 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_b_das_df8() // 4428 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_b_dais_df8() // 4430 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_b_adr16_df8() // 4438 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_b_adr32_df8() // 4439 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_w_ds_df8() // 4440 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=0 + alu_sub(m_da[ry], 0x0000); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_w_ais_df8() // 4450 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_w_aips_df8() // 4458 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_w_pais_df8() // 4460 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_w_das_df8() // 4468 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_w_dais_df8() // 4470 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_w_adr16_df8() // 4478 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_w_adr32_df8() // 4479 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_l_ds_df8() // 4480 fff8 +{ + int ry = m_irdi & 7; + // 137 nnrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dyl:m_da[ry] d=0 + alu_sub(m_da[ry], 0x0000); + sr_xnzvc(); + // 15e nnrl2 + set_16l(m_da[ry], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=18:m_da[ry] d=0 + alu_subc(high16(m_da[ry]), 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_l_ais_df8() // 4490 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_l_aips_df8() // 4498 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_l_pais_df8() // 44a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_l_das_df8() // 44a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_l_dais_df8() // 44b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_l_adr16_df8() // 44b8 ffff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_l_adr32_df8() // 44b9 ffff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_ds_ccr_df8() // 44c0 fff8 +{ + int ry = m_irdi & 7; + // 301 rstw1 + m_movemr = m_dbin; + m_ftu = m_da[ry]; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_ais_ccr_df8() // 44d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_aips_ccr_df8() // 44d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_pais_ccr_df8() // 44e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_das_ccr_df8() // 44e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_dais_ccr_df8() // 44f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_adr16_ccr_df8() // 44f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_adr32_ccr_df8() // 44f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_dpc_ccr_df8() // 44fa ffff +{ + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_dpci_ccr_df8() // 44fb ffff +{ + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_imm8_ccr_df8() // 44fc ffff +{ + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 301 rstw1 + m_movemr = m_dbin; + m_ftu = m_dt; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_b_ds_df8() // 4600 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dyl:m_da[ry] d=0 + alu_not8(m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_b_ais_df8() // 4610 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_b_aips_df8() // 4618 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=alub d=-1 + alu_and8x(m_alub, 0xff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_b_pais_df8() // 4620 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=alub d=-1 + alu_and8x(m_alub, 0xff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_b_das_df8() // 4628 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_b_dais_df8() // 4630 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_b_adr16_df8() // 4638 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_b_adr32_df8() // 4639 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_w_ds_df8() // 4640 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dyl:m_da[ry] d=0 + alu_not(m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_w_ais_df8() // 4650 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_w_aips_df8() // 4658 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_w_pais_df8() // 4660 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_w_das_df8() // 4668 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_w_dais_df8() // 4670 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_w_adr16_df8() // 4678 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_w_adr32_df8() // 4679 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_l_ds_df8() // 4680 fff8 +{ + int ry = m_irdi & 7; + // 137 nnrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dyl:m_da[ry] d=0 + alu_not(m_da[ry]); + sr_nzvc(); + // 15e nnrl2 + set_16l(m_da[ry], m_aluo); + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=18:m_da[ry] d=0 + alu_not(high16(m_da[ry])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_l_ais_df8() // 4690 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_l_aips_df8() // 4698 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_l_pais_df8() // 46a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_l_das_df8() // 46a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_l_dais_df8() // 46b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=11 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_l_adr16_df8() // 46b8 ffff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_l_adr32_df8() // 46b9 ffff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_ds_sr_df8() // 46c0 fff8 +{ + int ry = m_irdi & 7; + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 301 rstw1 + m_movemr = m_dbin; + m_ftu = m_da[ry]; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_ais_sr_df8() // 46d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_aips_sr_df8() // 46d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_pais_sr_df8() // 46e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_das_sr_df8() // 46e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_dais_sr_df8() // 46f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_adr16_sr_df8() // 46f8 ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_adr32_sr_df8() // 46f9 ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_dpc_sr_df8() // 46fa ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_dpci_sr_df8() // 46fb ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_i16u_sr_df8() // 46fc ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 301 rstw1 + m_movemr = m_dbin; + m_ftu = m_dt; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nbcd_b_ds_df8() // 4800 fff8 +{ + int ry = m_irdi & 7; + // 13b nbcr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dyl:m_da[ry] d=0 + alu_sbcd8(m_da[ry], 0x0000); + sr_xnzvc_u(); + // 117 nbcr2 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nbcd_b_ais_df8() // 4810 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nbcd_b_aips_df8() // 4818 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nbcd_b_pais_df8() // 4820 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nbcd_b_das_df8() // 4828 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nbcd_b_dais_df8() // 4830 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=9 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nbcd_b_adr16_df8() // 4838 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nbcd_b_adr32_df8() // 4839 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::swap_ds_df8() // 4840 fff8 +{ + int ry = m_irdi & 7; + // 341 swap1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[ry]; + m_pc = m_au; + set_16h(m_at, m_da[ry]); + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nzvc(); + // 342 swap2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[ry] = merge_16_32(high16(m_at), m_aluo); + m_au = m_au + 2; + // alu r=9 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::pea_ais_df8() // 4850 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 17c peaa1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[m_sp] - 4; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::pea_das_df8() // 4868 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 17d pead1 + m_aob = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 17e pead2 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_aluo) + m_at; + // 17f pead3 + m_at = m_au; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::pea_dais_df8() // 4870 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1ff peax0 + // alu r=9 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3ee peax1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto peax3; + else + goto peax2; +peax2: + // 134 peax2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto peax4; +peax3: + // 1f4 peax3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto peax4; +peax4: + // 218 peax4 + m_ir = m_irc; + m_at = m_au; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_pc + 4; + m_icount -= 2; + // 219 peax5 + m_aob = m_au; + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::pea_adr16_df8() // 4878 ffff +{ + // 178 paaw1 + m_aob = m_au; + m_pc = m_au; + m_at = ext32(m_dbin); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 10a paaw2 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::pea_adr32_df8() // 4879 ffff +{ + // 1fa paal1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15f paal2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 10a paaw2 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::pea_dpc_df8() // 487a ffff +{ + // 17d pead1 + m_aob = m_au; + m_at = m_pc; + m_au = m_au + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 17e pead2 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_aluo) + m_at; + // 17f pead3 + m_at = m_au; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::pea_dpci_df8() // 487b ffff +{ + // 1ff peax0 + // alu r=9 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3ee peax1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto peax3; + else + goto peax2; +peax2: + // 134 peax2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto peax4; +peax3: + // 1f4 peax3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto peax4; +peax4: + // 218 peax4 + m_ir = m_irc; + m_at = m_au; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_pc + 4; + m_icount -= 2; + // 219 peax5 + m_aob = m_au; + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ext_w_ds_df8() // 4880 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=2 m=.nzvc i=.l...i. ALU.ext a=R.dyl:m_da[ry] d=0 + alu_ext(m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_list_ais_df8() // 4890 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3a0 stmr1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + // 323 stmr2 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_listp_pais_df8() // 48a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3a4 push1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + // 21e push2 + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] - 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + step_movem_predec(); + if(m_t) + goto push3; + else + goto push5; +push5: + // 083 push5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_at = m_au; + m_au = m_au - 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem_predec(); + if(m_t) + goto push3; + else + goto push5; +push3: + // 043 push3 + m_aob = m_pc; + m_ir = m_irc; + m_da[ry] = m_at; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_list_das_df8() // 48a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1f1 stmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c9 stmd2 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 322 stmd3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_da[ry] + ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_list_dais_df8() // 48b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 325 stmx1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 326 stmx2 + m_pc = m_au; + set_16l(m_at, m_dbin); + m_au = m_au - 2; + // alu r=8 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02f stmx3 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto stmx5; + else + goto stmx4; +stmx4: + // 138 stmx4 + m_t = !m_movemr; + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmx5: + // 1f8 stmx5 + m_t = !m_movemr; + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_list_adr16_df8() // 48b8 ffff +{ + // 1ed smaw1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c1 smaw2 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 04b smaw3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_list_adr32_df8() // 48b9 ffff +{ + // 1e5 smal1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 112 smal2 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 305 smal3 + m_aob = m_au; + set_16l(m_at, m_dbin); + m_au = m_au + 2; + // 04b smaw3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ext_l_ds_df8() // 48c0 fff8 +{ + int ry = m_irdi & 7; + // 232 extr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=8 c=3 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 233 extr2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[ry] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_list_ais_df8() // 48d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3a0 stmr1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + // 323 stmr2 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_listp_pais_df8() // 48e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3a4 push1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + // 21e push2 + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] - 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + step_movem_predec(); + if(m_t) + goto push3; + else + goto push4; +push4: + // 0c3 push4 + m_aob = m_au; + m_dbout = m_da[m_movems]; + m_at = m_au; + m_au = m_au - 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 21f push5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = high16(m_da[m_movems]); + m_at = m_au; + m_au = m_au - 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem_predec(); + if(m_t) + goto push3; + else + goto push4; +push3: + // 043 push3 + m_aob = m_pc; + m_ir = m_irc; + m_da[ry] = m_at; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_list_das_df8() // 48e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1f1 stmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c9 stmd2 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 322 stmd3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_da[ry] + ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_list_dais_df8() // 48f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 325 stmx1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 326 stmx2 + m_pc = m_au; + set_16l(m_at, m_dbin); + m_au = m_au - 2; + // alu r=8 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02f stmx3 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto stmx5; + else + goto stmx4; +stmx4: + // 138 stmx4 + m_t = !m_movemr; + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmx5: + // 1f8 stmx5 + m_t = !m_movemr; + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_list_adr16_df8() // 48f8 ffff +{ + // 1ed smaw1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c1 smaw2 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 04b smaw3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_list_adr32_df8() // 48f9 ffff +{ + // 1e5 smal1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 112 smal2 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 305 smal3 + m_aob = m_au; + set_16l(m_at, m_dbin); + m_au = m_au + 2; + // 04b smaw3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_b_ds_df8() // 4a00 fff8 +{ + int ry = m_irdi & 7; + // 12d tsrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_b_ais_df8() // 4a10 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_b_aips_df8() // 4a18 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_b_pais_df8() // 4a20 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_b_das_df8() // 4a28 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_b_dais_df8() // 4a30 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_b_adr16_df8() // 4a38 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_b_adr32_df8() // 4a39 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_w_ds_df8() // 4a40 fff8 +{ + int ry = m_irdi & 7; + // 12d tsrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_w_ais_df8() // 4a50 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_w_aips_df8() // 4a58 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_w_pais_df8() // 4a60 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_w_das_df8() // 4a68 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_w_dais_df8() // 4a70 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_w_adr16_df8() // 4a78 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_w_adr32_df8() // 4a79 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_l_ds_df8() // 4a80 fff8 +{ + int ry = m_irdi & 7; + // 125 tsrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 362 tsrl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_l_ais_df8() // 4a90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_l_aips_df8() // 4a98 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_l_pais_df8() // 4aa0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_l_das_df8() // 4aa8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_l_dais_df8() // 4ab0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=15 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_l_adr16_df8() // 4ab8 ffff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_l_adr32_df8() // 4ab9 ffff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tas_ds_df8() // 4ac0 fff8 +{ + int ry = m_irdi & 7; + // 345 tasr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[ry]; + m_pc = m_au; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_or8(m_ftu, m_da[ry]); + // 346 tasr2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tas_ais_df8() // 4ad0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + return; + } + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 4; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tas_aips_df8() // 4ad8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + return; + } + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 4; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tas_pais_df8() // 4ae0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + return; + } + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 4; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tas_das_df8() // 4ae8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + return; + } + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 8; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tas_dais_df8() // 4af0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + return; + } + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 8; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tas_adr16_df8() // 4af8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + return; + } + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 8; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tas_adr32_df8() // 4af9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + return; + } + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 12; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_ais_list_df8() // 4c90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 127 ldmr1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 111 ldmr2 + m_aob = m_da[ry]; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_aips_list_df8() // 4c98 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 123 popm1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 115 popm2 + m_aob = m_da[ry]; + m_ir = m_irc; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto popm6; + else + goto popm4; +popm4: + // 3ac popm4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto popm6; + else + goto popm4; +popm6: + // 32c popm6 + m_aob = m_pc; + m_da[ry] = m_at; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_das_list_df8() // 4ca8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1fd ldmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f6 ldmd2 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // 276 ldmd3 + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 237 ldmd4 + m_aob = m_at; + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_dais_list_df8() // 4cb0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1f5 ldmx0 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 027 ldmx1 + // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02b ldmx2 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto ldmx4; + else + goto ldmx3; +ldmx3: + // 021 ldmx3 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx4: + // 0e1 ldmx4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx5: + // 02e ldmx5 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=0 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 277 ldmx6 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_adr16_list_df8() // 4cb8 ffff +{ + // 1f9 lmaw1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 30e lmaw2 + m_aob = m_au; + m_dt = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 111 ldmr2 + m_aob = m_dt; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_dt; + m_au = m_dt + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_adr32_list_df8() // 4cb9 ffff +{ + // 1e9 lmal1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0af lmal2 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ee lmal3 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 111 ldmr2 + m_aob = m_dt; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_dt; + m_au = m_dt + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_dpc_list_df8() // 4cba ffff +{ + // 1fd ldmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f6 ldmd2 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // 276 ldmd3 + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 237 ldmd4 + m_aob = m_at; + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_dpci_list_df8() // 4cbb ffff +{ + // 1f5 ldmx0 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 027 ldmx1 + // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02b ldmx2 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto ldmx4; + else + goto ldmx3; +ldmx3: + // 021 ldmx3 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx4: + // 0e1 ldmx4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx5: + // 02e ldmx5 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=0 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 277 ldmx6 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_ais_list_df8() // 4cd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 127 ldmr1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 111 ldmr2 + m_aob = m_da[ry]; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_aips_list_df8() // 4cd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 123 popm1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 115 popm2 + m_aob = m_da[ry]; + m_ir = m_irc; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto popm6; + else + goto popm3; +popm3: + // 3ec popm3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f4 popm5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto popm6; + else + goto popm3; +popm6: + // 32c popm6 + m_aob = m_pc; + m_da[ry] = m_at; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_das_list_df8() // 4ce8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1fd ldmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f6 ldmd2 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // 276 ldmd3 + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 237 ldmd4 + m_aob = m_at; + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_dais_list_df8() // 4cf0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1f5 ldmx0 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 027 ldmx1 + // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02b ldmx2 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto ldmx4; + else + goto ldmx3; +ldmx3: + // 021 ldmx3 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx4: + // 0e1 ldmx4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx5: + // 02e ldmx5 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 277 ldmx6 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_adr16_list_df8() // 4cf8 ffff +{ + // 1f9 lmaw1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 30e lmaw2 + m_aob = m_au; + m_dt = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 111 ldmr2 + m_aob = m_dt; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_dt; + m_au = m_dt + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_adr32_list_df8() // 4cf9 ffff +{ + // 1e9 lmal1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0af lmal2 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ee lmal3 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 111 ldmr2 + m_aob = m_dt; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_dt; + m_au = m_dt + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_dpc_list_df8() // 4cfa ffff +{ + // 1fd ldmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f6 ldmd2 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // 276 ldmd3 + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 237 ldmd4 + m_aob = m_at; + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_dpci_list_df8() // 4cfb ffff +{ + // 1f5 ldmx0 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 027 ldmx1 + // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02b ldmx2 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto ldmx4; + else + goto ldmx3; +ldmx3: + // 021 ldmx3 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx4: + // 0e1 ldmx4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx5: + // 02e ldmx5 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 277 ldmx6 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::trap_imm4_df8() // 4e40 fff0 +{ + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook((0x80 | ((m_ird & 0xf) << 2)) >> 2); + m_da[16] = m_au; + m_ftu = 0x80 | ((m_ird & 0xf) << 2); + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::link_as_imm16_df8() // 4e50 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 30b link1 + m_aob = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 2b5 link2 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 30c link3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = high16(m_at); + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 30d link4 + m_aob = m_au; + m_dbout = m_aluo; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[m_sp] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::unlk_as_df8() // 4e58 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 119 unlk1 + m_aob = m_da[ry]; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + // 1fe unlk2 + m_aob = m_au; + m_ir = m_irc; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 27c unlk3 + m_aob = m_pc; + m_da[m_sp] = m_au; + m_au = m_pc + 2; + // 27d unlk4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[ry] = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_as_usp_df8() // 4e60 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 2f5 lusp1 + m_aob = m_au; + m_ir = m_irc; + m_movemr = m_dbin; + m_pc = m_au; + m_at = m_da[ry]; + m_ftu = m_dbin; + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[15] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_usp_as_df8() // 4e68 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 230 susp1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[15]; + m_at = m_da[15]; + m_au = m_da[ry]; + // 233 extr2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[ry] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::reset_df8() // 4e70 ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 3a6 rset1 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + m_icount -= 2; + // 27b rset2 + m_ir = m_irc; + m_au = ext32(m_aluo) - 2; + m_icount -= 2; + m_reset_cb(1); + goto rset3; +rset3: + // 0e4 rset3 + m_au = m_au - 2; + m_icount -= 2; + // 114 rset4 + m_t = !(m_au & 0x3f); + m_icount -= 2; + if(m_t) + goto rset5; + else + goto rset3; +rset5: + m_reset_cb(0); + // 064 rset5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nop_df8() // 4e71 ffff +{ + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::stop_i16u_df8() // 4e72 ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 3a2 stop1 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + m_icount -= 2; + // 327 aaa01 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_au = m_au - 2; + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + return; +} + +void m68008_device::rte_df8() // 4e73 ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 12a rtr1 + if(!m_rte_instr_callback.isnull()) (m_rte_instr_callback)(1); + m_aob = m_da[m_sp]; + m_au = m_da[m_sp] + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 12b rtr2 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c5 rtr3 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 302 rtr4 + set_16h(m_at, m_dbin); + m_da[m_sp] = m_au; + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b3 jmal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rts_df8() // 4e75 ffff +{ + // 126 rts1 + m_aob = m_da[m_sp]; + m_au = m_da[m_sp] + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 116 rts2 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 303 rts3 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_da[m_sp] = m_au; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::trapv_df8() // 4e76 ffff +{ + // 06d trpv1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_isr & SR_V; + m_alub = m_dbin; + m_ftu = m_sr; + if(m_t) + goto trpv3; + else + goto trpv2; +trpv2: + // 0e2 trpv2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +trpv3: + // 022 trpv3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x07); + m_da[16] = m_au; + m_ftu = 0x001c; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rtr_df8() // 4e77 ffff +{ + // 12a rtr1 + m_aob = m_da[m_sp]; + m_au = m_da[m_sp] + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 12b rtr2 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c5 rtr3 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 302 rtr4 + set_16h(m_at, m_dbin); + m_da[m_sp] = m_au; + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b3 jmal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jsr_ais_df8() // 4e90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 273 jsra1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jsr_das_df8() // 4ea8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b0 jsrd1 + m_au = ext32(m_dbin) + m_da[ry]; + m_icount -= 2; + // 274 jsrd2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 2; + // 2b1 jsrd3 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jsr_dais_df8() // 4eb0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1f3 jsrx0 + // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 2b2 jsrx1 + m_t = m_irc & 0x0800; + m_au = ext32(m_aluo) + m_da[ry]; + m_icount -= 2; + if(m_t) + goto jsrx3; + else + goto jsrx2; +jsrx2: + // 029 jsrx2 + m_au = m_au + ext32(m_da[map_sp(m_irc >> 12)]); + m_icount -= 2; + goto jsrd2; +jsrx3: + // 0e9 jsrx3 + m_au = m_au + m_da[map_sp(m_irc >> 12)]; + m_icount -= 2; + goto jsrd2; +jsrd2: + // 274 jsrd2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 2; + // 2b1 jsrd3 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jsr_adr16_df8() // 4eb8 ffff +{ + // 293 jsaw0 + m_at = ext32(m_dbin); + m_icount -= 2; + // 270 jsaw1 + m_aob = m_at; + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jsr_adr32_df8() // 4eb9 ffff +{ + // 1f2 jsal1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 256 jsal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_pc = m_au; + set_16l(m_at, m_dbin); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jsr_dpc_df8() // 4eba ffff +{ + // 2b0 jsrd1 + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + // 274 jsrd2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 2; + // 2b1 jsrd3 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jsr_dpci_df8() // 4ebb ffff +{ + // 1f3 jsrx0 + // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 2b2 jsrx1 + m_t = m_irc & 0x0800; + m_au = ext32(m_aluo) + m_pc; + m_icount -= 2; + if(m_t) + goto jsrx3; + else + goto jsrx2; +jsrx2: + // 029 jsrx2 + m_au = m_au + ext32(m_da[map_sp(m_irc >> 12)]); + m_icount -= 2; + goto jsrd2; +jsrx3: + // 0e9 jsrx3 + m_au = m_au + m_da[map_sp(m_irc >> 12)]; + m_icount -= 2; + goto jsrd2; +jsrd2: + // 274 jsrd2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 2; + // 2b1 jsrd3 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jmp_ais_df8() // 4ed0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 255 jmpa1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jmp_das_df8() // 4ee8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b4 jmpd1 + m_au = ext32(m_dbin) + m_da[ry]; + m_icount -= 2; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jmp_dais_df8() // 4ef0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1f7 jmpx0 + // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 2b6 jmpx1 + m_t = m_irc & 0x0800; + m_au = ext32(m_aluo) + m_da[ry]; + m_icount -= 2; + if(m_t) + goto jmpx3; + else + goto jmpx2; +jmpx2: + // 02d jmpx2 + m_au = m_au + ext32(m_da[map_sp(m_irc >> 12)]); + m_icount -= 2; + goto bbci3; +jmpx3: + // 0ed jmpx3 + m_au = m_au + m_da[map_sp(m_irc >> 12)]; + m_icount -= 2; + goto bbci3; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jmp_adr16_df8() // 4ef8 ffff +{ + // 297 jmaw1 + m_at = ext32(m_dbin); + m_icount -= 2; + // 2b3 jmal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jmp_adr32_df8() // 4ef9 ffff +{ + // 1f6 jmal1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b3 jmal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jmp_dpc_df8() // 4efa ffff +{ + // 2b4 jmpd1 + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jmp_dpci_df8() // 4efb ffff +{ + // 1f7 jmpx0 + // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 2b6 jmpx1 + m_t = m_irc & 0x0800; + m_au = ext32(m_aluo) + m_pc; + m_icount -= 2; + if(m_t) + goto jmpx3; + else + goto jmpx2; +jmpx2: + // 02d jmpx2 + m_au = m_au + ext32(m_da[map_sp(m_irc >> 12)]); + m_icount -= 2; + goto bbci3; +jmpx3: + // 0ed jmpx3 + m_au = m_au + m_da[map_sp(m_irc >> 12)]; + m_icount -= 2; + goto bbci3; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_b_imm3_ds_df8() // 5000 f1f8 +{ + int ry = m_irdi & 7; + // 2d8 raqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_add8(m_ftu, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_b_imm3_ais_df8() // 5010 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_b_imm3_aips_df8() // 5018 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_b_imm3_pais_df8() // 5020 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_b_imm3_das_df8() // 5028 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_b_imm3_dais_df8() // 5030 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_b_imm3_adr16_df8() // 5038 f1ff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_b_imm3_adr32_df8() // 5039 f1ff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_ds_df8() // 5040 f1f8 +{ + int ry = m_irdi & 7; + // 2d8 raqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_add(m_ftu, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_as_df8() // 5048 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.ftu:m_ftu d=R.ayl:m_da[ry] + alu_add(m_ftu, m_da[ry]); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=23:m_dt d=17:m_da[ry] + alu_addc(high16(m_dt), high16(m_da[ry])); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_ais_df8() // 5050 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_aips_df8() // 5058 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_pais_df8() // 5060 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_das_df8() // 5068 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_dais_df8() // 5070 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_adr16_df8() // 5078 f1ff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_adr32_df8() // 5079 f1ff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_ds_df8() // 5080 f1f8 +{ + int ry = m_irdi & 7; + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_add(m_ftu, m_da[ry]); + sr_xnzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=18:m_da[ry] + alu_addc(high16(m_dt), high16(m_da[ry])); + sr_xnzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_as_df8() // 5088 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=..... i=.l...i. ALU.add a=R.ftu:m_ftu d=R.ayl:m_da[ry] + alu_add(m_ftu, m_da[ry]); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=2 c=3 m=..... i=.l....f ALU.addc a=23:m_dt d=17:m_da[ry] + alu_addc(high16(m_dt), high16(m_da[ry])); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_ais_df8() // 5090 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_aips_df8() // 5098 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_pais_df8() // 50a0 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_das_df8() // 50a8 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_dais_df8() // 50b0 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_adr16_df8() // 50b8 f1ff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_adr32_df8() // 50b9 f1ff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::st_ds_df8() // 50c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbt_ds_rel16_df8() // 50c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = 1; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::st_ais_df8() // 50d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::st_aips_df8() // 50d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::st_pais_df8() // 50e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::st_das_df8() // 50e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::st_dais_df8() // 50f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::st_adr16_df8() // 50f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::st_adr32_df8() // 50f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_b_imm3_ds_df8() // 5100 f1f8 +{ + int ry = m_irdi & 7; + // 2d8 raqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_sub8(m_ftu, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_b_imm3_ais_df8() // 5110 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_b_imm3_aips_df8() // 5118 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_b_imm3_pais_df8() // 5120 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_b_imm3_das_df8() // 5128 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_b_imm3_dais_df8() // 5130 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_b_imm3_adr16_df8() // 5138 f1ff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_b_imm3_adr32_df8() // 5139 f1ff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_ds_df8() // 5140 f1f8 +{ + int ry = m_irdi & 7; + // 2d8 raqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_sub(m_ftu, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_as_df8() // 5148 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.ftu:m_ftu d=R.ayl:m_da[ry] + alu_sub(m_ftu, m_da[ry]); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=23:m_dt d=17:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_ais_df8() // 5150 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_aips_df8() // 5158 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_pais_df8() // 5160 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_das_df8() // 5168 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_dais_df8() // 5170 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_adr16_df8() // 5178 f1ff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_adr32_df8() // 5179 f1ff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_ds_df8() // 5180 f1f8 +{ + int ry = m_irdi & 7; + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_sub(m_ftu, m_da[ry]); + sr_xnzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=18:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + sr_xnzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_as_df8() // 5188 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=..... i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.ayl:m_da[ry] + alu_sub(m_ftu, m_da[ry]); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=5 c=3 m=..... i=.l....f ALU.subc a=23:m_dt d=17:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_ais_df8() // 5190 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_aips_df8() // 5198 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_pais_df8() // 51a0 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_das_df8() // 51a8 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_dais_df8() // 51b0 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_adr16_df8() // 51b8 f1ff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_adr32_df8() // 51b9 f1ff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sf_ds_df8() // 51c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbra_ds_rel16_df8() // 51c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = 0; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::sf_ais_df8() // 51d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sf_aips_df8() // 51d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sf_pais_df8() // 51e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sf_das_df8() // 51e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sf_dais_df8() // 51f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sf_adr16_df8() // 51f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sf_adr32_df8() // 51f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::shi_ds_df8() // 52c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbhi_ds_rel16_df8() // 52c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::shi_ais_df8() // 52d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::shi_aips_df8() // 52d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::shi_pais_df8() // 52e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::shi_das_df8() // 52e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::shi_dais_df8() // 52f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::shi_adr16_df8() // 52f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::shi_adr32_df8() // 52f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sls_ds_df8() // 53c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbls_ds_rel16_df8() // 53c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::sls_ais_df8() // 53d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sls_aips_df8() // 53d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sls_pais_df8() // 53e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sls_das_df8() // 53e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sls_dais_df8() // 53f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sls_adr16_df8() // 53f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sls_adr32_df8() // 53f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scc_ds_df8() // 54c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbcc_ds_rel16_df8() // 54c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = !(m_sr & SR_C); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::scc_ais_df8() // 54d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scc_aips_df8() // 54d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scc_pais_df8() // 54e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scc_das_df8() // 54e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scc_dais_df8() // 54f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scc_adr16_df8() // 54f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scc_adr32_df8() // 54f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scs_ds_df8() // 55c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbcs_ds_rel16_df8() // 55c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = m_sr & SR_C; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::scs_ais_df8() // 55d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scs_aips_df8() // 55d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scs_pais_df8() // 55e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scs_das_df8() // 55e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scs_dais_df8() // 55f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scs_adr16_df8() // 55f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scs_adr32_df8() // 55f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sne_ds_df8() // 56c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbne_ds_rel16_df8() // 56c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = !(m_sr & SR_Z); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::sne_ais_df8() // 56d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sne_aips_df8() // 56d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sne_pais_df8() // 56e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sne_das_df8() // 56e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sne_dais_df8() // 56f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sne_adr16_df8() // 56f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sne_adr32_df8() // 56f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::seq_ds_df8() // 57c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbeq_ds_rel16_df8() // 57c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = m_sr & SR_Z; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::seq_ais_df8() // 57d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::seq_aips_df8() // 57d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::seq_pais_df8() // 57e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::seq_das_df8() // 57e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::seq_dais_df8() // 57f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::seq_adr16_df8() // 57f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::seq_adr32_df8() // 57f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svc_ds_df8() // 58c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbvc_ds_rel16_df8() // 58c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = !(m_sr & SR_V); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::svc_ais_df8() // 58d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svc_aips_df8() // 58d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svc_pais_df8() // 58e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svc_das_df8() // 58e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svc_dais_df8() // 58f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svc_adr16_df8() // 58f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svc_adr32_df8() // 58f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svs_ds_df8() // 59c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbvs_ds_rel16_df8() // 59c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = m_sr & SR_V; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::svs_ais_df8() // 59d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svs_aips_df8() // 59d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svs_pais_df8() // 59e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svs_das_df8() // 59e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svs_dais_df8() // 59f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svs_adr16_df8() // 59f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svs_adr32_df8() // 59f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::spl_ds_df8() // 5ac0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbpl_ds_rel16_df8() // 5ac8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = !(m_sr & SR_N); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::spl_ais_df8() // 5ad0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::spl_aips_df8() // 5ad8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::spl_pais_df8() // 5ae0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::spl_das_df8() // 5ae8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::spl_dais_df8() // 5af0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::spl_adr16_df8() // 5af8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::spl_adr32_df8() // 5af9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::smi_ds_df8() // 5bc0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbmi_ds_rel16_df8() // 5bc8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = m_sr & SR_N; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::smi_ais_df8() // 5bd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::smi_aips_df8() // 5bd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::smi_pais_df8() // 5be0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::smi_das_df8() // 5be8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::smi_dais_df8() // 5bf0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::smi_adr16_df8() // 5bf8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::smi_adr32_df8() // 5bf9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sge_ds_df8() // 5cc0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbge_ds_rel16_df8() // 5cc8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::sge_ais_df8() // 5cd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sge_aips_df8() // 5cd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sge_pais_df8() // 5ce0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sge_das_df8() // 5ce8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sge_dais_df8() // 5cf0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sge_adr16_df8() // 5cf8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sge_adr32_df8() // 5cf9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::slt_ds_df8() // 5dc0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dblt_ds_rel16_df8() // 5dc8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::slt_ais_df8() // 5dd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::slt_aips_df8() // 5dd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::slt_pais_df8() // 5de0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::slt_das_df8() // 5de8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::slt_dais_df8() // 5df0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::slt_adr16_df8() // 5df8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::slt_adr32_df8() // 5df9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sgt_ds_df8() // 5ec0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbgt_ds_rel16_df8() // 5ec8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::sgt_ais_df8() // 5ed0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sgt_aips_df8() // 5ed8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sgt_pais_df8() // 5ee0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sgt_das_df8() // 5ee8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sgt_dais_df8() // 5ef0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sgt_adr16_df8() // 5ef8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sgt_adr32_df8() // 5ef9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sle_ds_df8() // 5fc0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dble_ds_rel16_df8() // 5fc8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::sle_ais_df8() // 5fd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sle_aips_df8() // 5fd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sle_pais_df8() // 5fe0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sle_das_df8() // 5fe8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sle_dais_df8() // 5ff0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sle_adr16_df8() // 5ff8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sle_adr32_df8() // 5ff9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bra_rel16_df8() // 6000 ffff +{ + // 068 bbcw1 + m_t = 1; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bra_rel8_df8() // 6000 ff00 +{ + // 308 bbci1 + m_t = 1; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bsr_rel16_df8() // 6100 ffff +{ + // 0a9 bsrw1 + m_at = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[m_sp] - 4; + m_icount -= 2; + // 10e bsrw2 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0aa bsrw3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bsr_rel8_df8() // 6100 ff00 +{ + // 089 bsri1 + m_at = m_pc; + m_au = m_da[m_sp] - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 102 bsri2 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0a8 bsri3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = ext32(m_ftu) + m_pc; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bhi_rel16_df8() // 6200 ffff +{ + // 068 bbcw1 + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bhi_rel8_df8() // 6200 ff00 +{ + // 308 bbci1 + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bls_rel16_df8() // 6300 ffff +{ + // 068 bbcw1 + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bls_rel8_df8() // 6300 ff00 +{ + // 308 bbci1 + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bcc_rel16_df8() // 6400 ffff +{ + // 068 bbcw1 + m_t = !(m_sr & SR_C); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bcc_rel8_df8() // 6400 ff00 +{ + // 308 bbci1 + m_t = !(m_sr & SR_C); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bcs_rel16_df8() // 6500 ffff +{ + // 068 bbcw1 + m_t = m_sr & SR_C; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bcs_rel8_df8() // 6500 ff00 +{ + // 308 bbci1 + m_t = m_sr & SR_C; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bne_rel16_df8() // 6600 ffff +{ + // 068 bbcw1 + m_t = !(m_sr & SR_Z); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bne_rel8_df8() // 6600 ff00 +{ + // 308 bbci1 + m_t = !(m_sr & SR_Z); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::beq_rel16_df8() // 6700 ffff +{ + // 068 bbcw1 + m_t = m_sr & SR_Z; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::beq_rel8_df8() // 6700 ff00 +{ + // 308 bbci1 + m_t = m_sr & SR_Z; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bvc_rel16_df8() // 6800 ffff +{ + // 068 bbcw1 + m_t = !(m_sr & SR_V); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bvc_rel8_df8() // 6800 ff00 +{ + // 308 bbci1 + m_t = !(m_sr & SR_V); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bvs_rel16_df8() // 6900 ffff +{ + // 068 bbcw1 + m_t = m_sr & SR_V; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bvs_rel8_df8() // 6900 ff00 +{ + // 308 bbci1 + m_t = m_sr & SR_V; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bpl_rel16_df8() // 6a00 ffff +{ + // 068 bbcw1 + m_t = !(m_sr & SR_N); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bpl_rel8_df8() // 6a00 ff00 +{ + // 308 bbci1 + m_t = !(m_sr & SR_N); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bmi_rel16_df8() // 6b00 ffff +{ + // 068 bbcw1 + m_t = m_sr & SR_N; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bmi_rel8_df8() // 6b00 ff00 +{ + // 308 bbci1 + m_t = m_sr & SR_N; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bge_rel16_df8() // 6c00 ffff +{ + // 068 bbcw1 + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bge_rel8_df8() // 6c00 ff00 +{ + // 308 bbci1 + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::blt_rel16_df8() // 6d00 ffff +{ + // 068 bbcw1 + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::blt_rel8_df8() // 6d00 ff00 +{ + // 308 bbci1 + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bgt_rel16_df8() // 6e00 ffff +{ + // 068 bbcw1 + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bgt_rel8_df8() // 6e00 ff00 +{ + // 308 bbci1 + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ble_rel16_df8() // 6f00 ffff +{ + // 068 bbcw1 + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ble_rel8_df8() // 6f00 ff00 +{ + // 308 bbci1 + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::moveq_imm8o_dd_df8() // 7000 f100 +{ + int rx = (m_irdi >> 9) & 7; + // 23b rlql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_ftu); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_ds_dd_df8() // 8000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_or8(m_da[ry], m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_ais_dd_df8() // 8010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_aips_dd_df8() // 8018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_pais_dd_df8() // 8020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_das_dd_df8() // 8028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dais_dd_df8() // 8030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_adr16_dd_df8() // 8038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_adr32_dd_df8() // 8039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dpc_dd_df8() // 803a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dpci_dd_df8() // 803b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_imm8_dd_df8() // 803c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_or8(m_dt, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_ds_dd_df8() // 8040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_or(m_da[ry], m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_ais_dd_df8() // 8050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_aips_dd_df8() // 8058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_pais_dd_df8() // 8060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_das_dd_df8() // 8068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dais_dd_df8() // 8070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_adr16_dd_df8() // 8078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_adr32_dd_df8() // 8079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dpc_dd_df8() // 807a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dpci_dd_df8() // 807b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_imm16_dd_df8() // 807c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_or(m_dt, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_ds_dd_df8() // 8080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_or(m_da[ry], m_da[rx]); + sr_nzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=18:m_da[ry] d=16:m_da[rx] + alu_or(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_ais_dd_df8() // 8090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_aips_dd_df8() // 8098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_pais_dd_df8() // 80a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_das_dd_df8() // 80a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dais_dd_df8() // 80b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_adr16_dd_df8() // 80b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_adr32_dd_df8() // 80b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dpc_dd_df8() // 80ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dpci_dd_df8() // 80bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e7 aixw0 + // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_imm32_dd_df8() // 80bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_or(m_dt, m_da[rx]); + sr_nzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=16:m_da[rx] + alu_or(high16(m_dt), high16(m_da[rx])); + sr_nzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_ds_dd_df8() // 80c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 0a6 dvur1 + m_alub = m_da[ry]; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_da[ry]); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_ais_dd_df8() // 80d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_aips_dd_df8() // 80d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_pais_dd_df8() // 80e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_das_dd_df8() // 80e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_dais_dd_df8() // 80f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=1 c=5 m=..... i=.l.d... ALU.over a=R.dbin:m_dbin d=0 + alu_over(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_adr16_dd_df8() // 80f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_adr32_dd_df8() // 80f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_dpc_dd_df8() // 80fa f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_dpci_dd_df8() // 80fb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=1 c=5 m=..... i=.l.d... ALU.over a=R.dbin:m_dbin d=0 + alu_over(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_imm16_dd_df8() // 80fc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0a6 dvur1 + m_alub = m_dt; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dt); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sbcd_ds_dd_df8() // 8100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1cd rbrb1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sbcd8(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 11b rbrb2 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 238 rbrb3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sbcd_pais_paid_df8() // 8108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 107 asbb1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 135 asbb2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 136 asbb3 + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 04e asbb4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_dbin = m_edb; + // 040 asbb5 + m_aob = m_pc; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=alub d=R.dbin:m_dbin + alu_sbcd8(m_alub, m_dbin); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dd_ais_df8() // 8110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dd_aips_df8() // 8118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dd_pais_df8() // 8120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dd_das_df8() // 8128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dd_dais_df8() // 8130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dd_adr16_df8() // 8138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dd_adr32_df8() // 8139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dd_ais_df8() // 8150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dd_aips_df8() // 8158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dd_pais_df8() // 8160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dd_das_df8() // 8168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dd_dais_df8() // 8170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dd_adr16_df8() // 8178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dd_adr32_df8() // 8179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dd_ais_df8() // 8190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dd_aips_df8() // 8198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dd_pais_df8() // 81a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dd_das_df8() // 81a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dd_dais_df8() // 81b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dd_adr16_df8() // 81b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dd_adr32_df8() // 81b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divs_w_ds_dd_df8() // 81c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 0ae dvs02 + m_alub = m_da[ry]; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_da[ry]); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_ais_dd_df8() // 81d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_aips_dd_df8() // 81d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_pais_dd_df8() // 81e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_das_dd_df8() // 81e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_dais_dd_df8() // 81f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=1 c=5 m=..... i=.l.d... ALU.over a=R.dbin:m_dbin d=0 + alu_over(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_adr16_dd_df8() // 81f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_adr32_dd_df8() // 81f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_dpc_dd_df8() // 81fa f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_dpci_dd_df8() // 81fb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=1 c=5 m=..... i=.l.d... ALU.over a=R.dbin:m_dbin d=0 + alu_over(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_imm16_dd_df8() // 81fc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0ae dvs02 + m_alub = m_dt; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dt); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::sub_b_ds_dd_df8() // 9000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub8(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_ais_dd_df8() // 9010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_aips_dd_df8() // 9018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_pais_dd_df8() // 9020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_das_dd_df8() // 9028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dais_dd_df8() // 9030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_adr16_dd_df8() // 9038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_adr32_dd_df8() // 9039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dpc_dd_df8() // 903a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dpci_dd_df8() // 903b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_imm8_dd_df8() // 903c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub8(m_dt, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_ds_dd_df8() // 9040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_as_dd_df8() // 9048 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_ais_dd_df8() // 9050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_aips_dd_df8() // 9058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_pais_dd_df8() // 9060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_das_dd_df8() // 9068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dais_dd_df8() // 9070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_adr16_dd_df8() // 9078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_adr32_dd_df8() // 9079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dpc_dd_df8() // 907a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dpci_dd_df8() // 907b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_imm16_dd_df8() // 907c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_ds_dd_df8() // 9080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=18:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_as_dd_df8() // 9088 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=17:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_ais_dd_df8() // 9090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_aips_dd_df8() // 9098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_pais_dd_df8() // 90a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_das_dd_df8() // 90a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dais_dd_df8() // 90b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_adr16_dd_df8() // 90b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_adr32_dd_df8() // 90b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dpc_dd_df8() // 90ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dpci_dd_df8() // 90bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_imm32_dd_df8() // 90bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=16:m_da[rx] + alu_subc(high16(m_dt), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_ds_ad_df8() // 90c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_as_ad_df8() // 90c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_ais_ad_df8() // 90d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_aips_ad_df8() // 90d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_pais_ad_df8() // 90e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_das_ad_df8() // 90e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_dais_ad_df8() // 90f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_adr16_ad_df8() // 90f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_adr32_ad_df8() // 90f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_dpc_ad_df8() // 90fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_dpci_ad_df8() // 90fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_imm16_ad_df8() // 90fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subx_b_ds_dd_df8() // 9100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_subx8(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subx_b_pais_paid_df8() // 9108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 10f asxw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 131 asxw2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 132 asxw3 + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 04a asxw4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_dbin = m_edb; + // 065 asxw5 + m_aob = m_pc; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=alub d=R.dbin:m_dbin + alu_subx8(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dd_ais_df8() // 9110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dd_aips_df8() // 9118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dd_pais_df8() // 9120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dd_das_df8() // 9128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dd_dais_df8() // 9130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dd_adr16_df8() // 9138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dd_adr32_df8() // 9139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subx_w_ds_dd_df8() // 9140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_subx(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subx_w_pais_paid_df8() // 9148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 10f asxw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 131 asxw2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 132 asxw3 + m_au = m_da[rx] - 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 04a asxw4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 065 asxw5 + m_aob = m_pc; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=alub d=R.dbin:m_dbin + alu_subx(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dd_ais_df8() // 9150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dd_aips_df8() // 9158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dd_pais_df8() // 9160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dd_das_df8() // 9168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dd_dais_df8() // 9170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dd_adr16_df8() // 9178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dd_adr32_df8() // 9179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subx_l_ds_dd_df8() // 9180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_subx(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=18:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subx_l_pais_paid_df8() // 9188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 10b asxl1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 048 asxl2 + m_aob = m_au; + m_alub = m_dbin; + m_au = m_au - 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 139 asxl3 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 13a asxl4 + m_au = m_da[rx] - 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 04c asxl5 + m_aob = m_au; + m_alub = m_dbin; + m_au = m_au - 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 047 asxl6 + m_aob = m_au; + m_at = m_au; + m_da[rx] = m_au; + m_au = m_au + 2; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_subx(m_aluo, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 061 asxl7 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = ext32(m_dbin); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 062 asxl8 + m_aob = m_pc; + m_au = m_at; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=R.dbin:m_dbin + alu_subc(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dd_ais_df8() // 9190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dd_aips_df8() // 9198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dd_pais_df8() // 91a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dd_das_df8() // 91a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dd_dais_df8() // 91b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dd_adr16_df8() // 91b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dd_adr32_df8() // 91b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_ds_ad_df8() // 91c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=18:m_da[ry] d=15:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_as_ad_df8() // 91c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=17:m_da[ry] d=15:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_ais_ad_df8() // 91d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_aips_ad_df8() // 91d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_pais_ad_df8() // 91e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_das_ad_df8() // 91e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_dais_ad_df8() // 91f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_adr16_ad_df8() // 91f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_adr32_ad_df8() // 91f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_dpc_ad_df8() // 91fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_dpci_ad_df8() // 91fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_imm32_ad_df8() // 91fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=23:m_dt d=15:m_da[rx] + alu_subc(high16(m_dt), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_ds_dd_df8() // b000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub8(m_da[ry], m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_ais_dd_df8() // b010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_aips_dd_df8() // b018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_pais_dd_df8() // b020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_das_dd_df8() // b028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_dais_dd_df8() // b030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_adr16_dd_df8() // b038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_adr32_dd_df8() // b039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_dpc_dd_df8() // b03a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_dpci_dd_df8() // b03b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_imm8_dd_df8() // b03c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub8(m_dt, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_ds_dd_df8() // b040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_as_dd_df8() // b048 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_ais_dd_df8() // b050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_aips_dd_df8() // b058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_pais_dd_df8() // b060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_das_dd_df8() // b068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_dais_dd_df8() // b070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_adr16_dd_df8() // b078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_adr32_dd_df8() // b079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_dpc_dd_df8() // b07a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_dpci_dd_df8() // b07b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_imm16_dd_df8() // b07c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_ds_dd_df8() // b080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=18:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_as_dd_df8() // b088 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=17:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_ais_dd_df8() // b090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_aips_dd_df8() // b098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_pais_dd_df8() // b0a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_das_dd_df8() // b0a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_dais_dd_df8() // b0b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_adr16_dd_df8() // b0b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_adr32_dd_df8() // b0b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_dpc_dd_df8() // b0ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_dpci_dd_df8() // b0bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_imm32_dd_df8() // b0bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=16:m_da[rx] + alu_subc(high16(m_dt), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_ds_ad_df8() // b0c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1d9 cprm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_as_ad_df8() // b0c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1d9 cprm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_ais_ad_df8() // b0d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_aips_ad_df8() // b0d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_pais_ad_df8() // b0e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_das_ad_df8() // b0e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_dais_ad_df8() // b0f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_adr16_ad_df8() // b0f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_adr32_ad_df8() // b0f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_dpc_ad_df8() // b0fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_dpci_ad_df8() // b0fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_imm16_ad_df8() // b0fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d9 cprm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_b_dd_ds_df8() // b100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor8(m_da[rx], m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpm_b_aips_aipd_df8() // b108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 06b cmmw1 + m_aob = m_da[ry]; + m_pc = m_au; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 086 cmmw2 + m_at = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 122 cmmw3 + m_aob = m_da[rx]; + m_ir = m_irc; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_dbin = m_edb; + // 170 cmmw4 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_sub8(m_aluo, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_b_dd_ais_df8() // b110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_b_dd_aips_df8() // b118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_b_dd_pais_df8() // b120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_b_dd_das_df8() // b128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_b_dd_dais_df8() // b130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_b_dd_adr16_df8() // b138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_b_dd_adr32_df8() // b139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_w_dd_ds_df8() // b140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor(m_da[rx], m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpm_w_aips_aipd_df8() // b148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 06b cmmw1 + m_aob = m_da[ry]; + m_pc = m_au; + m_au = m_da[ry] + 2; + // 086 cmmw2 + m_at = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 122 cmmw3 + m_aob = m_da[rx]; + m_ir = m_irc; + m_au = m_da[rx] + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 170 cmmw4 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_sub(m_aluo, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_w_dd_ais_df8() // b150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_w_dd_aips_df8() // b158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_w_dd_pais_df8() // b160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_w_dd_das_df8() // b168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_w_dd_dais_df8() // b170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_w_dd_adr16_df8() // b178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_w_dd_adr32_df8() // b179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_l_dd_ds_df8() // b180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor(m_da[rx], m_da[ry]); + sr_nzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=18:m_da[ry] + alu_eor(high16(m_da[rx]), high16(m_da[ry])); + sr_nzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpm_l_aips_aipd_df8() // b188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 06f cmml1 + m_aob = m_da[ry]; + m_pc = m_au; + m_au = m_da[ry] + 2; + // 08e cmml2 + m_at = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 154 cmml3 + m_aob = m_at; + m_alub = m_dbin; + m_da[ry] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 12e cmml4 + m_aob = m_da[rx]; + m_ir = m_irc; + m_au = m_da[rx] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 155 cmml5 + m_aob = m_au; + m_alue = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 156 cmml6 + m_aob = m_pc; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_sub(m_aluo, m_dbin); + sr_nzvc(); + // 157 cmml7 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=R.alue:m_alue + alu_subc(m_alub, m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_l_dd_ais_df8() // b190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_l_dd_aips_df8() // b198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_l_dd_pais_df8() // b1a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_l_dd_das_df8() // b1a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_l_dd_dais_df8() // b1b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=13 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_l_dd_adr16_df8() // b1b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_l_dd_adr32_df8() // b1b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_ds_ad_df8() // b1c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=18:m_da[ry] d=15:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_as_ad_df8() // b1c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=17:m_da[ry] d=15:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_ais_ad_df8() // b1d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_aips_ad_df8() // b1d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_pais_ad_df8() // b1e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_das_ad_df8() // b1e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_dais_ad_df8() // b1f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_adr16_ad_df8() // b1f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_adr32_ad_df8() // b1f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_dpc_ad_df8() // b1fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_dpci_ad_df8() // b1fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_imm32_ad_df8() // b1fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=23:m_dt d=15:m_da[rx] + alu_subc(high16(m_dt), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_ds_dd_df8() // c000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_and8(m_da[ry], m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_ais_dd_df8() // c010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_aips_dd_df8() // c018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_pais_dd_df8() // c020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_das_dd_df8() // c028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dais_dd_df8() // c030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_adr16_dd_df8() // c038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_adr32_dd_df8() // c039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dpc_dd_df8() // c03a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dpci_dd_df8() // c03b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_imm8_dd_df8() // c03c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_and8(m_dt, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_ds_dd_df8() // c040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_and(m_da[ry], m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_ais_dd_df8() // c050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_aips_dd_df8() // c058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_pais_dd_df8() // c060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_das_dd_df8() // c068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dais_dd_df8() // c070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_adr16_dd_df8() // c078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_adr32_dd_df8() // c079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dpc_dd_df8() // c07a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dpci_dd_df8() // c07b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_imm16_dd_df8() // c07c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_and(m_dt, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_ds_dd_df8() // c080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_and(m_da[ry], m_da[rx]); + sr_nzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=18:m_da[ry] d=16:m_da[rx] + alu_and(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_ais_dd_df8() // c090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_aips_dd_df8() // c098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_pais_dd_df8() // c0a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_das_dd_df8() // c0a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dais_dd_df8() // c0b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_adr16_dd_df8() // c0b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_adr32_dd_df8() // c0b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dpc_dd_df8() // c0ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dpci_dd_df8() // c0bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_imm32_dd_df8() // c0bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_and(m_dt, m_da[rx]); + sr_nzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=16:m_da[rx] + alu_and(high16(m_dt), high16(m_da[rx])); + sr_nzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_ds_dd_df8() // c0c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 15b mulr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_da[ry]; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_ais_dd_df8() // c0d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_aips_dd_df8() // c0d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_pais_dd_df8() // c0e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_das_dd_df8() // c0e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_dais_dd_df8() // c0f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=7 c=5 m=..... i=.lm.... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_adr16_dd_df8() // c0f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_adr32_dd_df8() // c0f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_dpc_dd_df8() // c0fa f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_dpci_dd_df8() // c0fb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=7 c=5 m=..... i=.lm.... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_imm16_dd_df8() // c0fc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15b mulr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dt; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::abcd_ds_dd_df8() // c100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1cd rbrb1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=3 c=2 m=xnzvc i=b....i. ALU.abcd a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_abcd8(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 11b rbrb2 + m_au = m_at; + // alu r=3 c=3 m=xnzvc i=b.....f ALU.add a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 238 rbrb3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::abcd_pais_paid_df8() // c108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 107 asbb1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 135 asbb2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=3 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 136 asbb3 + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 04e asbb4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_dbin = m_edb; + // 040 asbb5 + m_aob = m_pc; + // alu r=3 c=2 m=xnzvc i=b....i. ALU.abcd a=alub d=R.dbin:m_dbin + alu_abcd8(m_alub, m_dbin); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=3 c=3 m=xnzvc i=b.....f ALU.add a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dd_ais_df8() // c110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dd_aips_df8() // c118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dd_pais_df8() // c120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dd_das_df8() // c128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dd_dais_df8() // c130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dd_adr16_df8() // c138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dd_adr32_df8() // c139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::exg_dd_ds_df8() // c140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 3e3 exge1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // 231 exge2 + m_da[rx] = m_au; + m_da[ry] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::exg_ad_as_df8() // c148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 3e3 exge1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // 231 exge2 + m_da[rx] = m_au; + m_da[ry] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dd_ais_df8() // c150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dd_aips_df8() // c158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dd_pais_df8() // c160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dd_das_df8() // c168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dd_dais_df8() // c170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dd_adr16_df8() // c178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dd_adr32_df8() // c179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::exg_dd_as_df8() // c188 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 3e3 exge1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // 231 exge2 + m_da[rx] = m_au; + m_da[ry] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dd_ais_df8() // c190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dd_aips_df8() // c198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dd_pais_df8() // c1a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dd_das_df8() // c1a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dd_dais_df8() // c1b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dd_adr16_df8() // c1b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dd_adr32_df8() // c1b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::muls_w_ds_dd_df8() // c1c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 15b mulr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_da[ry]; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_ais_dd_df8() // c1d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_aips_dd_df8() // c1d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_pais_dd_df8() // c1e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_das_dd_df8() // c1e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_dais_dd_df8() // c1f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=7 c=5 m=..... i=.lm.... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_adr16_dd_df8() // c1f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_adr32_dd_df8() // c1f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_dpc_dd_df8() // c1fa f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_dpci_dd_df8() // c1fb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=7 c=5 m=..... i=.lm.... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_imm16_dd_df8() // c1fc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15b mulr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dt; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::add_b_ds_dd_df8() // d000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_add8(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_ais_dd_df8() // d010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_aips_dd_df8() // d018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_pais_dd_df8() // d020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_das_dd_df8() // d028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dais_dd_df8() // d030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_adr16_dd_df8() // d038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_adr32_dd_df8() // d039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dpc_dd_df8() // d03a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dpci_dd_df8() // d03b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_imm8_dd_df8() // d03c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_add8(m_dt, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_ds_dd_df8() // d040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_as_dd_df8() // d048 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_ais_dd_df8() // d050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_aips_dd_df8() // d058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_pais_dd_df8() // d060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_das_dd_df8() // d068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dais_dd_df8() // d070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_adr16_dd_df8() // d078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_adr32_dd_df8() // d079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dpc_dd_df8() // d07a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dpci_dd_df8() // d07b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_imm16_dd_df8() // d07c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_add(m_dt, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_ds_dd_df8() // d080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=18:m_da[ry] d=16:m_da[rx] + alu_addc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_as_dd_df8() // d088 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=17:m_da[ry] d=16:m_da[rx] + alu_addc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_ais_dd_df8() // d090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_aips_dd_df8() // d098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_pais_dd_df8() // d0a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_das_dd_df8() // d0a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dais_dd_df8() // d0b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_adr16_dd_df8() // d0b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_adr32_dd_df8() // d0b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dpc_dd_df8() // d0ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dpci_dd_df8() // d0bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_imm32_dd_df8() // d0bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_add(m_dt, m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=16:m_da[rx] + alu_addc(high16(m_dt), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_ds_ad_df8() // d0c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_as_ad_df8() // d0c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_ais_ad_df8() // d0d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_aips_ad_df8() // d0d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_pais_ad_df8() // d0e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_das_ad_df8() // d0e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_dais_ad_df8() // d0f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_adr16_ad_df8() // d0f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_adr32_ad_df8() // d0f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_dpc_ad_df8() // d0fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_dpci_ad_df8() // d0fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_imm16_ad_df8() // d0fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_add(m_dt, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addx_b_ds_dd_df8() // d100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=12 c=2 m=xnzvc i=b....i. ALU.addx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_addx8(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=b...... ALU.addx a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addx_b_pais_paid_df8() // d108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 10f asxw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=12 c=0 m=..... i=b...... ALU.addx a=none d=R.dbin:m_dbin + m_icount -= 2; + // 131 asxw2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=12 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 132 asxw3 + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=12 c=0 m=..... i=b...... ALU.addx a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 04a asxw4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + // alu r=12 c=0 m=..... i=b...... ALU.addx a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_dbin = m_edb; + // 065 asxw5 + m_aob = m_pc; + m_au = m_at; + // alu r=12 c=2 m=xnzvc i=b....i. ALU.addx a=alub d=R.dbin:m_dbin + alu_addx8(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=b...... ALU.addx a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dd_ais_df8() // d110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dd_aips_df8() // d118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dd_pais_df8() // d120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dd_das_df8() // d128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dd_dais_df8() // d130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dd_adr16_df8() // d138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dd_adr32_df8() // d139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addx_w_ds_dd_df8() // d140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=12 c=2 m=xnzvc i=.....i. ALU.addx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_addx(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=....... ALU.addx a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addx_w_pais_paid_df8() // d148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 10f asxw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + // alu r=12 c=0 m=..... i=....... ALU.addx a=none d=R.dbin:m_dbin + m_icount -= 2; + // 131 asxw2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=12 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 132 asxw3 + m_au = m_da[rx] - 2; + // alu r=12 c=0 m=..... i=....... ALU.addx a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 04a asxw4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + // alu r=12 c=0 m=..... i=....... ALU.addx a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 065 asxw5 + m_aob = m_pc; + m_au = m_at; + // alu r=12 c=2 m=xnzvc i=.....i. ALU.addx a=alub d=R.dbin:m_dbin + alu_addx(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=....... ALU.addx a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dd_ais_df8() // d150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dd_aips_df8() // d158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dd_pais_df8() // d160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dd_das_df8() // d168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dd_dais_df8() // d170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dd_adr16_df8() // d178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dd_adr32_df8() // d179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addx_l_ds_dd_df8() // d180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=12 c=2 m=xnzvc i=.l...i. ALU.addx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_addx(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=12 c=3 m=xnzvc i=.l....f ALU.addx a=18:m_da[ry] d=16:m_da[rx] + alu_addx(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addx_l_pais_paid_df8() // d188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 10b asxl1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=R.dbin:m_dbin + m_icount -= 2; + // 048 asxl2 + m_aob = m_au; + m_alub = m_dbin; + m_au = m_au - 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=R.dbin:m_dbin d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 139 asxl3 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=12 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 13a asxl4 + m_au = m_da[rx] - 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 04c asxl5 + m_aob = m_au; + m_alub = m_dbin; + m_au = m_au - 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=R.dbin:m_dbin d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 047 asxl6 + m_aob = m_au; + m_at = m_au; + m_da[rx] = m_au; + m_au = m_au + 2; + // alu r=12 c=2 m=xnzvc i=.l...i. ALU.addx a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_addx(m_aluo, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 061 asxl7 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = ext32(m_dbin); + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 062 asxl8 + m_aob = m_pc; + m_au = m_at; + // alu r=12 c=3 m=xnzvc i=.l....f ALU.addx a=alub d=R.dbin:m_dbin + alu_addx(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dd_ais_df8() // d190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dd_aips_df8() // d198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dd_pais_df8() // d1a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dd_das_df8() // d1a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dd_dais_df8() // d1b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dd_adr16_df8() // d1b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dd_adr32_df8() // d1b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_ds_ad_df8() // d1c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=18:m_da[ry] d=15:m_da[rx] + alu_addc(high16(m_da[ry]), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_as_ad_df8() // d1c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=17:m_da[ry] d=15:m_da[rx] + alu_addc(high16(m_da[ry]), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_ais_ad_df8() // d1d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_aips_ad_df8() // d1d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_pais_ad_df8() // d1e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_das_ad_df8() // d1e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_dais_ad_df8() // d1f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_adr16_ad_df8() // d1f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_adr32_ad_df8() // d1f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_dpc_ad_df8() // d1fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_dpci_ad_df8() // d1fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_imm32_ad_df8() // d1fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_add(m_dt, m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=23:m_dt d=15:m_da[rx] + alu_addc(high16(m_dt), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_b_imm3_ds_df8() // e000 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=b....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_b_imm3_ds_df8() // e008 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=b....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_b_imm3_ds_df8() // e010 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=8 c=1 m=..... i=b...r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_and8x(high16(m_da[ry]), 0xff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=b...ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8x(m_da[ry], 0xff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=b....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_b_imm3_ds_df8() // e018 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=b....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror8(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_b_dd_ds_df8() // e020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=b....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_b_dd_ds_df8() // e028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=b....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_b_dd_ds_df8() // e030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=8 c=1 m=..... i=b...r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_and8x(high16(m_da[ry]), 0xff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=b...ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8x(m_da[ry], 0xff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=b....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_b_dd_ds_df8() // e038 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=b....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror8(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_w_imm3_ds_df8() // e040 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_w_imm3_ds_df8() // e048 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=5 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_w_imm3_ds_df8() // e050 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_w_imm3_ds_df8() // e058 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=10 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_w_dd_ds_df8() // e060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_w_dd_ds_df8() // e068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=5 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_w_dd_ds_df8() // e070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_w_dd_ds_df8() // e078 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=10 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_l_imm3_ds_df8() // e080 f1f8 +{ + int ry = m_irdi & 7; + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=.l...i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_l_imm3_ds_df8() // e088 f1f8 +{ + int ry = m_irdi & 7; + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=.l...i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=5 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_l_imm3_ds_df8() // e090 f1f8 +{ + int ry = m_irdi & 7; + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=8 c=1 m=..... i=.l..r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=.l..ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=.l...i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=8 c=1 m=.nz.. i=.l..r.f ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_l_imm3_ds_df8() // e098 f1f8 +{ + int ry = m_irdi & 7; + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=.l...i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror32(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=10 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_l_dd_ds_df8() // e0a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=.l...i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_l_dd_ds_df8() // e0a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=.l...i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=5 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_l_dd_ds_df8() // e0b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=8 c=1 m=..... i=.l..r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=.l..ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=.l...i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=8 c=1 m=.nz.. i=.l..r.f ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_l_dd_ds_df8() // e0b8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=.l...i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror32(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=10 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_ais_df8() // e0d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_aips_df8() // e0d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_pais_df8() // e0e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_das_df8() // e0e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_dais_df8() // e0f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_adr16_df8() // e0f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_adr32_df8() // e0f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_b_imm3_ds_df8() // e100 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=3 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=b....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_b_imm3_ds_df8() // e108 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=b....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_b_imm3_ds_df8() // e110 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_and8x(high16(m_da[ry]), 0xff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=b...ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8x(m_da[ry], 0xff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=b....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_b_imm3_ds_df8() // e118 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=b....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol8(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_b_dd_ds_df8() // e120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=3 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=b....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_b_dd_ds_df8() // e128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=b....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_b_dd_ds_df8() // e130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_and8x(high16(m_da[ry]), 0xff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=b...ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8x(m_da[ry], 0xff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=b....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_b_dd_ds_df8() // e138 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=b....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol8(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_w_imm3_ds_df8() // e140 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=3 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_w_imm3_ds_df8() // e148 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=4 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_w_imm3_ds_df8() // e150 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_w_imm3_ds_df8() // e158 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=9 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_w_dd_ds_df8() // e160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=3 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_w_dd_ds_df8() // e168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=4 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_w_dd_ds_df8() // e170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_w_dd_ds_df8() // e178 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=9 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_l_imm3_ds_df8() // e180 f1f8 +{ + int ry = m_irdi & 7; + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=3 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=.l...i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=3 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_l_imm3_ds_df8() // e188 f1f8 +{ + int ry = m_irdi & 7; + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=.l...i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=R.alue:m_alue + alu_and(m_aluo, m_alue); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=4 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_l_imm3_ds_df8() // e190 f1f8 +{ + int ry = m_irdi & 7; + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=.l..ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=.l...i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=11 c=1 m=.nz.. i=.l..r.f ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_l_imm3_ds_df8() // e198 f1f8 +{ + int ry = m_irdi & 7; + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=9 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=.l...i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol32(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=9 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_l_dd_ds_df8() // e1a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=3 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=.l...i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=3 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_l_dd_ds_df8() // e1a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=.l...i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=R.alue:m_alue + alu_and(m_aluo, m_alue); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=4 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_l_dd_ds_df8() // e1b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=.l..ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=.l...i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=11 c=1 m=.nz.. i=.l..r.f ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_l_dd_ds_df8() // e1b8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=9 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=.l...i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol32(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=9 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_ais_df8() // e1d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_aips_df8() // e1d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_pais_df8() // e1e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_das_df8() // e1e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_dais_df8() // e1f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=3 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_adr16_df8() // e1f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_adr32_df8() // e1f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_ais_df8() // e2d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_aips_df8() // e2d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_pais_df8() // e2e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_das_df8() // e2e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_dais_df8() // e2f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_adr16_df8() // e2f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_adr32_df8() // e2f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_ais_df8() // e3d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_aips_df8() // e3d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_pais_df8() // e3e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_das_df8() // e3e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_dais_df8() // e3f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_adr16_df8() // e3f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_adr32_df8() // e3f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_ais_df8() // e4d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_aips_df8() // e4d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_pais_df8() // e4e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_das_df8() // e4e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_dais_df8() // e4f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=8 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_adr16_df8() // e4f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_adr32_df8() // e4f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_ais_df8() // e5d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_aips_df8() // e5d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_pais_df8() // e5e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_das_df8() // e5e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_dais_df8() // e5f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_adr16_df8() // e5f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_adr32_df8() // e5f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_ais_df8() // e6d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_aips_df8() // e6d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_pais_df8() // e6e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_das_df8() // e6e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_dais_df8() // e6f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=10 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_adr16_df8() // e6f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_adr32_df8() // e6f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_ais_df8() // e7d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_aips_df8() // e7d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_pais_df8() // e7e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_das_df8() // e7e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_dais_df8() // e7f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=9 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_adr16_df8() // e7f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_adr32_df8() // e7f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +const m68008_device::handler8 m68008_device::s_handlers_df8[] = { + &m68008_device::state_reset_df8, + &m68008_device::state_bus_error_df8, + &m68008_device::state_address_error_df8, + &m68008_device::state_double_fault_df8, + &m68008_device::state_interrupt_df8, + &m68008_device::state_trace_df8, + &m68008_device::state_illegal_df8, + &m68008_device::state_priviledge_df8, + &m68008_device::state_linea_df8, + &m68008_device::state_linef_df8, + &m68008_device::ori_b_imm8_ds_df8, + &m68008_device::ori_b_imm8_ais_df8, + &m68008_device::ori_b_imm8_aips_df8, + &m68008_device::ori_b_imm8_pais_df8, + &m68008_device::ori_b_imm8_das_df8, + &m68008_device::ori_b_imm8_dais_df8, + &m68008_device::ori_b_imm8_adr16_df8, + &m68008_device::ori_b_imm8_adr32_df8, + &m68008_device::ori_imm8_ccr_df8, + &m68008_device::ori_w_imm16_ds_df8, + &m68008_device::ori_w_imm16_ais_df8, + &m68008_device::ori_w_imm16_aips_df8, + &m68008_device::ori_w_imm16_pais_df8, + &m68008_device::ori_w_imm16_das_df8, + &m68008_device::ori_w_imm16_dais_df8, + &m68008_device::ori_w_imm16_adr16_df8, + &m68008_device::ori_w_imm16_adr32_df8, + &m68008_device::ori_i16u_sr_df8, + &m68008_device::ori_l_imm32_ds_df8, + &m68008_device::ori_l_imm32_ais_df8, + &m68008_device::ori_l_imm32_aips_df8, + &m68008_device::ori_l_imm32_pais_df8, + &m68008_device::ori_l_imm32_das_df8, + &m68008_device::ori_l_imm32_dais_df8, + &m68008_device::ori_l_imm32_adr16_df8, + &m68008_device::ori_l_imm32_adr32_df8, + &m68008_device::btst_dd_ds_df8, + &m68008_device::movep_w_das_dd_df8, + &m68008_device::btst_dd_ais_df8, + &m68008_device::btst_dd_aips_df8, + &m68008_device::btst_dd_pais_df8, + &m68008_device::btst_dd_das_df8, + &m68008_device::btst_dd_dais_df8, + &m68008_device::btst_dd_adr16_df8, + &m68008_device::btst_dd_adr32_df8, + &m68008_device::btst_dd_dpc_df8, + &m68008_device::btst_dd_dpci_df8, + &m68008_device::btst_dd_imm_df8, + &m68008_device::bchg_dd_ds_df8, + &m68008_device::movep_l_das_dd_df8, + &m68008_device::bchg_dd_ais_df8, + &m68008_device::bchg_dd_aips_df8, + &m68008_device::bchg_dd_pais_df8, + &m68008_device::bchg_dd_das_df8, + &m68008_device::bchg_dd_dais_df8, + &m68008_device::bchg_dd_adr16_df8, + &m68008_device::bchg_dd_adr32_df8, + &m68008_device::bclr_dd_ds_df8, + &m68008_device::movep_w_dd_das_df8, + &m68008_device::bclr_dd_ais_df8, + &m68008_device::bclr_dd_aips_df8, + &m68008_device::bclr_dd_pais_df8, + &m68008_device::bclr_dd_das_df8, + &m68008_device::bclr_dd_dais_df8, + &m68008_device::bclr_dd_adr16_df8, + &m68008_device::bclr_dd_adr32_df8, + &m68008_device::bset_dd_ds_df8, + &m68008_device::movep_l_dd_das_df8, + &m68008_device::bset_dd_ais_df8, + &m68008_device::bset_dd_aips_df8, + &m68008_device::bset_dd_pais_df8, + &m68008_device::bset_dd_das_df8, + &m68008_device::bset_dd_dais_df8, + &m68008_device::bset_dd_adr16_df8, + &m68008_device::bset_dd_adr32_df8, + &m68008_device::andi_b_imm8_ds_df8, + &m68008_device::andi_b_imm8_ais_df8, + &m68008_device::andi_b_imm8_aips_df8, + &m68008_device::andi_b_imm8_pais_df8, + &m68008_device::andi_b_imm8_das_df8, + &m68008_device::andi_b_imm8_dais_df8, + &m68008_device::andi_b_imm8_adr16_df8, + &m68008_device::andi_b_imm8_adr32_df8, + &m68008_device::andi_imm8_ccr_df8, + &m68008_device::andi_w_imm16_ds_df8, + &m68008_device::andi_w_imm16_ais_df8, + &m68008_device::andi_w_imm16_aips_df8, + &m68008_device::andi_w_imm16_pais_df8, + &m68008_device::andi_w_imm16_das_df8, + &m68008_device::andi_w_imm16_dais_df8, + &m68008_device::andi_w_imm16_adr16_df8, + &m68008_device::andi_w_imm16_adr32_df8, + &m68008_device::andi_i16u_sr_df8, + &m68008_device::andi_l_imm32_ds_df8, + &m68008_device::andi_l_imm32_ais_df8, + &m68008_device::andi_l_imm32_aips_df8, + &m68008_device::andi_l_imm32_pais_df8, + &m68008_device::andi_l_imm32_das_df8, + &m68008_device::andi_l_imm32_dais_df8, + &m68008_device::andi_l_imm32_adr16_df8, + &m68008_device::andi_l_imm32_adr32_df8, + &m68008_device::subi_b_imm8_ds_df8, + &m68008_device::subi_b_imm8_ais_df8, + &m68008_device::subi_b_imm8_aips_df8, + &m68008_device::subi_b_imm8_pais_df8, + &m68008_device::subi_b_imm8_das_df8, + &m68008_device::subi_b_imm8_dais_df8, + &m68008_device::subi_b_imm8_adr16_df8, + &m68008_device::subi_b_imm8_adr32_df8, + &m68008_device::subi_w_imm16_ds_df8, + &m68008_device::subi_w_imm16_ais_df8, + &m68008_device::subi_w_imm16_aips_df8, + &m68008_device::subi_w_imm16_pais_df8, + &m68008_device::subi_w_imm16_das_df8, + &m68008_device::subi_w_imm16_dais_df8, + &m68008_device::subi_w_imm16_adr16_df8, + &m68008_device::subi_w_imm16_adr32_df8, + &m68008_device::subi_l_imm32_ds_df8, + &m68008_device::subi_l_imm32_ais_df8, + &m68008_device::subi_l_imm32_aips_df8, + &m68008_device::subi_l_imm32_pais_df8, + &m68008_device::subi_l_imm32_das_df8, + &m68008_device::subi_l_imm32_dais_df8, + &m68008_device::subi_l_imm32_adr16_df8, + &m68008_device::subi_l_imm32_adr32_df8, + &m68008_device::addi_b_imm8_ds_df8, + &m68008_device::addi_b_imm8_ais_df8, + &m68008_device::addi_b_imm8_aips_df8, + &m68008_device::addi_b_imm8_pais_df8, + &m68008_device::addi_b_imm8_das_df8, + &m68008_device::addi_b_imm8_dais_df8, + &m68008_device::addi_b_imm8_adr16_df8, + &m68008_device::addi_b_imm8_adr32_df8, + &m68008_device::addi_w_imm16_ds_df8, + &m68008_device::addi_w_imm16_ais_df8, + &m68008_device::addi_w_imm16_aips_df8, + &m68008_device::addi_w_imm16_pais_df8, + &m68008_device::addi_w_imm16_das_df8, + &m68008_device::addi_w_imm16_dais_df8, + &m68008_device::addi_w_imm16_adr16_df8, + &m68008_device::addi_w_imm16_adr32_df8, + &m68008_device::addi_l_imm32_ds_df8, + &m68008_device::addi_l_imm32_ais_df8, + &m68008_device::addi_l_imm32_aips_df8, + &m68008_device::addi_l_imm32_pais_df8, + &m68008_device::addi_l_imm32_das_df8, + &m68008_device::addi_l_imm32_dais_df8, + &m68008_device::addi_l_imm32_adr16_df8, + &m68008_device::addi_l_imm32_adr32_df8, + &m68008_device::btst_imm8_ds_df8, + &m68008_device::btst_imm8_ais_df8, + &m68008_device::btst_imm8_aips_df8, + &m68008_device::btst_imm8_pais_df8, + &m68008_device::btst_imm8_das_df8, + &m68008_device::btst_imm8_dais_df8, + &m68008_device::btst_imm8_adr16_df8, + &m68008_device::btst_imm8_adr32_df8, + &m68008_device::btst_imm8_dpc_df8, + &m68008_device::btst_imm8_dpci_df8, + &m68008_device::bchg_imm8_ds_df8, + &m68008_device::bchg_imm8_ais_df8, + &m68008_device::bchg_imm8_aips_df8, + &m68008_device::bchg_imm8_pais_df8, + &m68008_device::bchg_imm8_das_df8, + &m68008_device::bchg_imm8_dais_df8, + &m68008_device::bchg_imm8_adr16_df8, + &m68008_device::bchg_imm8_adr32_df8, + &m68008_device::bclr_imm8_ds_df8, + &m68008_device::bclr_imm8_ais_df8, + &m68008_device::bclr_imm8_aips_df8, + &m68008_device::bclr_imm8_pais_df8, + &m68008_device::bclr_imm8_das_df8, + &m68008_device::bclr_imm8_dais_df8, + &m68008_device::bclr_imm8_adr16_df8, + &m68008_device::bclr_imm8_adr32_df8, + &m68008_device::bset_imm8_ds_df8, + &m68008_device::bset_imm8_ais_df8, + &m68008_device::bset_imm8_aips_df8, + &m68008_device::bset_imm8_pais_df8, + &m68008_device::bset_imm8_das_df8, + &m68008_device::bset_imm8_dais_df8, + &m68008_device::bset_imm8_adr16_df8, + &m68008_device::bset_imm8_adr32_df8, + &m68008_device::eori_b_imm8_ds_df8, + &m68008_device::eori_b_imm8_ais_df8, + &m68008_device::eori_b_imm8_aips_df8, + &m68008_device::eori_b_imm8_pais_df8, + &m68008_device::eori_b_imm8_das_df8, + &m68008_device::eori_b_imm8_dais_df8, + &m68008_device::eori_b_imm8_adr16_df8, + &m68008_device::eori_b_imm8_adr32_df8, + &m68008_device::eori_imm8_ccr_df8, + &m68008_device::eori_w_imm16_ds_df8, + &m68008_device::eori_w_imm16_ais_df8, + &m68008_device::eori_w_imm16_aips_df8, + &m68008_device::eori_w_imm16_pais_df8, + &m68008_device::eori_w_imm16_das_df8, + &m68008_device::eori_w_imm16_dais_df8, + &m68008_device::eori_w_imm16_adr16_df8, + &m68008_device::eori_w_imm16_adr32_df8, + &m68008_device::eori_i16u_sr_df8, + &m68008_device::eori_l_imm32_ds_df8, + &m68008_device::eori_l_imm32_ais_df8, + &m68008_device::eori_l_imm32_aips_df8, + &m68008_device::eori_l_imm32_pais_df8, + &m68008_device::eori_l_imm32_das_df8, + &m68008_device::eori_l_imm32_dais_df8, + &m68008_device::eori_l_imm32_adr16_df8, + &m68008_device::eori_l_imm32_adr32_df8, + &m68008_device::cmpi_b_imm8_ds_df8, + &m68008_device::cmpi_b_imm8_ais_df8, + &m68008_device::cmpi_b_imm8_aips_df8, + &m68008_device::cmpi_b_imm8_pais_df8, + &m68008_device::cmpi_b_imm8_das_df8, + &m68008_device::cmpi_b_imm8_dais_df8, + &m68008_device::cmpi_b_imm8_adr16_df8, + &m68008_device::cmpi_b_imm8_adr32_df8, + &m68008_device::cmpi_w_imm16_ds_df8, + &m68008_device::cmpi_w_imm16_ais_df8, + &m68008_device::cmpi_w_imm16_aips_df8, + &m68008_device::cmpi_w_imm16_pais_df8, + &m68008_device::cmpi_w_imm16_das_df8, + &m68008_device::cmpi_w_imm16_dais_df8, + &m68008_device::cmpi_w_imm16_adr16_df8, + &m68008_device::cmpi_w_imm16_adr32_df8, + &m68008_device::cmpi_l_imm32_ds_df8, + &m68008_device::cmpi_l_imm32_ais_df8, + &m68008_device::cmpi_l_imm32_aips_df8, + &m68008_device::cmpi_l_imm32_pais_df8, + &m68008_device::cmpi_l_imm32_das_df8, + &m68008_device::cmpi_l_imm32_dais_df8, + &m68008_device::cmpi_l_imm32_adr16_df8, + &m68008_device::cmpi_l_imm32_adr32_df8, + &m68008_device::move_b_ds_dd_df8, + &m68008_device::move_b_ais_dd_df8, + &m68008_device::move_b_aips_dd_df8, + &m68008_device::move_b_pais_dd_df8, + &m68008_device::move_b_das_dd_df8, + &m68008_device::move_b_dais_dd_df8, + &m68008_device::move_b_adr16_dd_df8, + &m68008_device::move_b_adr32_dd_df8, + &m68008_device::move_b_dpc_dd_df8, + &m68008_device::move_b_dpci_dd_df8, + &m68008_device::move_b_imm8_dd_df8, + &m68008_device::move_b_ds_aid_df8, + &m68008_device::move_b_ais_aid_df8, + &m68008_device::move_b_aips_aid_df8, + &m68008_device::move_b_pais_aid_df8, + &m68008_device::move_b_das_aid_df8, + &m68008_device::move_b_dais_aid_df8, + &m68008_device::move_b_adr16_aid_df8, + &m68008_device::move_b_adr32_aid_df8, + &m68008_device::move_b_dpc_aid_df8, + &m68008_device::move_b_dpci_aid_df8, + &m68008_device::move_b_imm8_aid_df8, + &m68008_device::move_b_ds_aipd_df8, + &m68008_device::move_b_ais_aipd_df8, + &m68008_device::move_b_aips_aipd_df8, + &m68008_device::move_b_pais_aipd_df8, + &m68008_device::move_b_das_aipd_df8, + &m68008_device::move_b_dais_aipd_df8, + &m68008_device::move_b_adr16_aipd_df8, + &m68008_device::move_b_adr32_aipd_df8, + &m68008_device::move_b_dpc_aipd_df8, + &m68008_device::move_b_dpci_aipd_df8, + &m68008_device::move_b_imm8_aipd_df8, + &m68008_device::move_b_ds_paid_df8, + &m68008_device::move_b_ais_paid_df8, + &m68008_device::move_b_aips_paid_df8, + &m68008_device::move_b_pais_paid_df8, + &m68008_device::move_b_das_paid_df8, + &m68008_device::move_b_dais_paid_df8, + &m68008_device::move_b_adr16_paid_df8, + &m68008_device::move_b_adr32_paid_df8, + &m68008_device::move_b_dpc_paid_df8, + &m68008_device::move_b_dpci_paid_df8, + &m68008_device::move_b_imm8_paid_df8, + &m68008_device::move_b_ds_dad_df8, + &m68008_device::move_b_ais_dad_df8, + &m68008_device::move_b_aips_dad_df8, + &m68008_device::move_b_pais_dad_df8, + &m68008_device::move_b_das_dad_df8, + &m68008_device::move_b_dais_dad_df8, + &m68008_device::move_b_adr16_dad_df8, + &m68008_device::move_b_adr32_dad_df8, + &m68008_device::move_b_dpc_dad_df8, + &m68008_device::move_b_dpci_dad_df8, + &m68008_device::move_b_imm8_dad_df8, + &m68008_device::move_b_ds_daid_df8, + &m68008_device::move_b_ais_daid_df8, + &m68008_device::move_b_aips_daid_df8, + &m68008_device::move_b_pais_daid_df8, + &m68008_device::move_b_das_daid_df8, + &m68008_device::move_b_dais_daid_df8, + &m68008_device::move_b_adr16_daid_df8, + &m68008_device::move_b_adr32_daid_df8, + &m68008_device::move_b_dpc_daid_df8, + &m68008_device::move_b_dpci_daid_df8, + &m68008_device::move_b_imm8_daid_df8, + &m68008_device::move_b_ds_adr16_df8, + &m68008_device::move_b_ais_adr16_df8, + &m68008_device::move_b_aips_adr16_df8, + &m68008_device::move_b_pais_adr16_df8, + &m68008_device::move_b_das_adr16_df8, + &m68008_device::move_b_dais_adr16_df8, + &m68008_device::move_b_adr16_adr16_df8, + &m68008_device::move_b_adr32_adr16_df8, + &m68008_device::move_b_dpc_adr16_df8, + &m68008_device::move_b_dpci_adr16_df8, + &m68008_device::move_b_imm8_adr16_df8, + &m68008_device::move_b_ds_adr32_df8, + &m68008_device::move_b_ais_adr32_df8, + &m68008_device::move_b_aips_adr32_df8, + &m68008_device::move_b_pais_adr32_df8, + &m68008_device::move_b_das_adr32_df8, + &m68008_device::move_b_dais_adr32_df8, + &m68008_device::move_b_adr16_adr32_df8, + &m68008_device::move_b_adr32_adr32_df8, + &m68008_device::move_b_dpc_adr32_df8, + &m68008_device::move_b_dpci_adr32_df8, + &m68008_device::move_b_imm8_adr32_df8, + &m68008_device::move_l_ds_dd_df8, + &m68008_device::move_l_as_dd_df8, + &m68008_device::move_l_ais_dd_df8, + &m68008_device::move_l_aips_dd_df8, + &m68008_device::move_l_pais_dd_df8, + &m68008_device::move_l_das_dd_df8, + &m68008_device::move_l_dais_dd_df8, + &m68008_device::move_l_adr16_dd_df8, + &m68008_device::move_l_adr32_dd_df8, + &m68008_device::move_l_dpc_dd_df8, + &m68008_device::move_l_dpci_dd_df8, + &m68008_device::move_l_imm32_dd_df8, + &m68008_device::movea_l_ds_ad_df8, + &m68008_device::movea_l_as_ad_df8, + &m68008_device::movea_l_ais_ad_df8, + &m68008_device::movea_l_aips_ad_df8, + &m68008_device::movea_l_pais_ad_df8, + &m68008_device::movea_l_das_ad_df8, + &m68008_device::movea_l_dais_ad_df8, + &m68008_device::movea_l_adr16_ad_df8, + &m68008_device::movea_l_adr32_ad_df8, + &m68008_device::movea_l_dpc_ad_df8, + &m68008_device::movea_l_dpci_ad_df8, + &m68008_device::movea_l_imm32_ad_df8, + &m68008_device::move_l_ds_aid_df8, + &m68008_device::move_l_as_aid_df8, + &m68008_device::move_l_ais_aid_df8, + &m68008_device::move_l_aips_aid_df8, + &m68008_device::move_l_pais_aid_df8, + &m68008_device::move_l_das_aid_df8, + &m68008_device::move_l_dais_aid_df8, + &m68008_device::move_l_adr16_aid_df8, + &m68008_device::move_l_adr32_aid_df8, + &m68008_device::move_l_dpc_aid_df8, + &m68008_device::move_l_dpci_aid_df8, + &m68008_device::move_l_imm32_aid_df8, + &m68008_device::move_l_ds_aipd_df8, + &m68008_device::move_l_as_aipd_df8, + &m68008_device::move_l_ais_aipd_df8, + &m68008_device::move_l_aips_aipd_df8, + &m68008_device::move_l_pais_aipd_df8, + &m68008_device::move_l_das_aipd_df8, + &m68008_device::move_l_dais_aipd_df8, + &m68008_device::move_l_adr16_aipd_df8, + &m68008_device::move_l_adr32_aipd_df8, + &m68008_device::move_l_dpc_aipd_df8, + &m68008_device::move_l_dpci_aipd_df8, + &m68008_device::move_l_imm32_aipd_df8, + &m68008_device::move_l_ds_paid_df8, + &m68008_device::move_l_as_paid_df8, + &m68008_device::move_l_ais_paid_df8, + &m68008_device::move_l_aips_paid_df8, + &m68008_device::move_l_pais_paid_df8, + &m68008_device::move_l_das_paid_df8, + &m68008_device::move_l_dais_paid_df8, + &m68008_device::move_l_adr16_paid_df8, + &m68008_device::move_l_adr32_paid_df8, + &m68008_device::move_l_dpc_paid_df8, + &m68008_device::move_l_dpci_paid_df8, + &m68008_device::move_l_imm32_paid_df8, + &m68008_device::move_l_ds_dad_df8, + &m68008_device::move_l_as_dad_df8, + &m68008_device::move_l_ais_dad_df8, + &m68008_device::move_l_aips_dad_df8, + &m68008_device::move_l_pais_dad_df8, + &m68008_device::move_l_das_dad_df8, + &m68008_device::move_l_dais_dad_df8, + &m68008_device::move_l_adr16_dad_df8, + &m68008_device::move_l_adr32_dad_df8, + &m68008_device::move_l_dpc_dad_df8, + &m68008_device::move_l_dpci_dad_df8, + &m68008_device::move_l_imm32_dad_df8, + &m68008_device::move_l_ds_daid_df8, + &m68008_device::move_l_as_daid_df8, + &m68008_device::move_l_ais_daid_df8, + &m68008_device::move_l_aips_daid_df8, + &m68008_device::move_l_pais_daid_df8, + &m68008_device::move_l_das_daid_df8, + &m68008_device::move_l_dais_daid_df8, + &m68008_device::move_l_adr16_daid_df8, + &m68008_device::move_l_adr32_daid_df8, + &m68008_device::move_l_dpc_daid_df8, + &m68008_device::move_l_dpci_daid_df8, + &m68008_device::move_l_imm32_daid_df8, + &m68008_device::move_l_ds_adr16_df8, + &m68008_device::move_l_as_adr16_df8, + &m68008_device::move_l_ais_adr16_df8, + &m68008_device::move_l_aips_adr16_df8, + &m68008_device::move_l_pais_adr16_df8, + &m68008_device::move_l_das_adr16_df8, + &m68008_device::move_l_dais_adr16_df8, + &m68008_device::move_l_adr16_adr16_df8, + &m68008_device::move_l_adr32_adr16_df8, + &m68008_device::move_l_dpc_adr16_df8, + &m68008_device::move_l_dpci_adr16_df8, + &m68008_device::move_l_imm32_adr16_df8, + &m68008_device::move_l_ds_adr32_df8, + &m68008_device::move_l_as_adr32_df8, + &m68008_device::move_l_ais_adr32_df8, + &m68008_device::move_l_aips_adr32_df8, + &m68008_device::move_l_pais_adr32_df8, + &m68008_device::move_l_das_adr32_df8, + &m68008_device::move_l_dais_adr32_df8, + &m68008_device::move_l_adr16_adr32_df8, + &m68008_device::move_l_adr32_adr32_df8, + &m68008_device::move_l_dpc_adr32_df8, + &m68008_device::move_l_dpci_adr32_df8, + &m68008_device::move_l_imm32_adr32_df8, + &m68008_device::move_w_ds_dd_df8, + &m68008_device::move_w_as_dd_df8, + &m68008_device::move_w_ais_dd_df8, + &m68008_device::move_w_aips_dd_df8, + &m68008_device::move_w_pais_dd_df8, + &m68008_device::move_w_das_dd_df8, + &m68008_device::move_w_dais_dd_df8, + &m68008_device::move_w_adr16_dd_df8, + &m68008_device::move_w_adr32_dd_df8, + &m68008_device::move_w_dpc_dd_df8, + &m68008_device::move_w_dpci_dd_df8, + &m68008_device::move_w_imm16_dd_df8, + &m68008_device::movea_w_ds_ad_df8, + &m68008_device::movea_w_as_ad_df8, + &m68008_device::movea_w_ais_ad_df8, + &m68008_device::movea_w_aips_ad_df8, + &m68008_device::movea_w_pais_ad_df8, + &m68008_device::movea_w_das_ad_df8, + &m68008_device::movea_w_dais_ad_df8, + &m68008_device::movea_w_adr16_ad_df8, + &m68008_device::movea_w_adr32_ad_df8, + &m68008_device::movea_w_dpc_ad_df8, + &m68008_device::movea_w_dpci_ad_df8, + &m68008_device::movea_w_imm16_ad_df8, + &m68008_device::move_w_ds_aid_df8, + &m68008_device::move_w_as_aid_df8, + &m68008_device::move_w_ais_aid_df8, + &m68008_device::move_w_aips_aid_df8, + &m68008_device::move_w_pais_aid_df8, + &m68008_device::move_w_das_aid_df8, + &m68008_device::move_w_dais_aid_df8, + &m68008_device::move_w_adr16_aid_df8, + &m68008_device::move_w_adr32_aid_df8, + &m68008_device::move_w_dpc_aid_df8, + &m68008_device::move_w_dpci_aid_df8, + &m68008_device::move_w_imm16_aid_df8, + &m68008_device::move_w_ds_aipd_df8, + &m68008_device::move_w_as_aipd_df8, + &m68008_device::move_w_ais_aipd_df8, + &m68008_device::move_w_aips_aipd_df8, + &m68008_device::move_w_pais_aipd_df8, + &m68008_device::move_w_das_aipd_df8, + &m68008_device::move_w_dais_aipd_df8, + &m68008_device::move_w_adr16_aipd_df8, + &m68008_device::move_w_adr32_aipd_df8, + &m68008_device::move_w_dpc_aipd_df8, + &m68008_device::move_w_dpci_aipd_df8, + &m68008_device::move_w_imm16_aipd_df8, + &m68008_device::move_w_ds_paid_df8, + &m68008_device::move_w_as_paid_df8, + &m68008_device::move_w_ais_paid_df8, + &m68008_device::move_w_aips_paid_df8, + &m68008_device::move_w_pais_paid_df8, + &m68008_device::move_w_das_paid_df8, + &m68008_device::move_w_dais_paid_df8, + &m68008_device::move_w_adr16_paid_df8, + &m68008_device::move_w_adr32_paid_df8, + &m68008_device::move_w_dpc_paid_df8, + &m68008_device::move_w_dpci_paid_df8, + &m68008_device::move_w_imm16_paid_df8, + &m68008_device::move_w_ds_dad_df8, + &m68008_device::move_w_as_dad_df8, + &m68008_device::move_w_ais_dad_df8, + &m68008_device::move_w_aips_dad_df8, + &m68008_device::move_w_pais_dad_df8, + &m68008_device::move_w_das_dad_df8, + &m68008_device::move_w_dais_dad_df8, + &m68008_device::move_w_adr16_dad_df8, + &m68008_device::move_w_adr32_dad_df8, + &m68008_device::move_w_dpc_dad_df8, + &m68008_device::move_w_dpci_dad_df8, + &m68008_device::move_w_imm16_dad_df8, + &m68008_device::move_w_ds_daid_df8, + &m68008_device::move_w_as_daid_df8, + &m68008_device::move_w_ais_daid_df8, + &m68008_device::move_w_aips_daid_df8, + &m68008_device::move_w_pais_daid_df8, + &m68008_device::move_w_das_daid_df8, + &m68008_device::move_w_dais_daid_df8, + &m68008_device::move_w_adr16_daid_df8, + &m68008_device::move_w_adr32_daid_df8, + &m68008_device::move_w_dpc_daid_df8, + &m68008_device::move_w_dpci_daid_df8, + &m68008_device::move_w_imm16_daid_df8, + &m68008_device::move_w_ds_adr16_df8, + &m68008_device::move_w_as_adr16_df8, + &m68008_device::move_w_ais_adr16_df8, + &m68008_device::move_w_aips_adr16_df8, + &m68008_device::move_w_pais_adr16_df8, + &m68008_device::move_w_das_adr16_df8, + &m68008_device::move_w_dais_adr16_df8, + &m68008_device::move_w_adr16_adr16_df8, + &m68008_device::move_w_adr32_adr16_df8, + &m68008_device::move_w_dpc_adr16_df8, + &m68008_device::move_w_dpci_adr16_df8, + &m68008_device::move_w_imm16_adr16_df8, + &m68008_device::move_w_ds_adr32_df8, + &m68008_device::move_w_as_adr32_df8, + &m68008_device::move_w_ais_adr32_df8, + &m68008_device::move_w_aips_adr32_df8, + &m68008_device::move_w_pais_adr32_df8, + &m68008_device::move_w_das_adr32_df8, + &m68008_device::move_w_dais_adr32_df8, + &m68008_device::move_w_adr16_adr32_df8, + &m68008_device::move_w_adr32_adr32_df8, + &m68008_device::move_w_dpc_adr32_df8, + &m68008_device::move_w_dpci_adr32_df8, + &m68008_device::move_w_imm16_adr32_df8, + &m68008_device::negx_b_ds_df8, + &m68008_device::negx_b_ais_df8, + &m68008_device::negx_b_aips_df8, + &m68008_device::negx_b_pais_df8, + &m68008_device::negx_b_das_df8, + &m68008_device::negx_b_dais_df8, + &m68008_device::negx_b_adr16_df8, + &m68008_device::negx_b_adr32_df8, + &m68008_device::negx_w_ds_df8, + &m68008_device::negx_w_ais_df8, + &m68008_device::negx_w_aips_df8, + &m68008_device::negx_w_pais_df8, + &m68008_device::negx_w_das_df8, + &m68008_device::negx_w_dais_df8, + &m68008_device::negx_w_adr16_df8, + &m68008_device::negx_w_adr32_df8, + &m68008_device::negx_l_ds_df8, + &m68008_device::negx_l_ais_df8, + &m68008_device::negx_l_aips_df8, + &m68008_device::negx_l_pais_df8, + &m68008_device::negx_l_das_df8, + &m68008_device::negx_l_dais_df8, + &m68008_device::negx_l_adr16_df8, + &m68008_device::negx_l_adr32_df8, + &m68008_device::move_sr_ds_df8, + &m68008_device::move_sr_ais_df8, + &m68008_device::move_sr_aips_df8, + &m68008_device::move_sr_pais_df8, + &m68008_device::move_sr_das_df8, + &m68008_device::move_sr_dais_df8, + &m68008_device::move_sr_adr16_df8, + &m68008_device::move_sr_adr32_df8, + &m68008_device::chk_w_ds_dd_df8, + &m68008_device::chk_w_ais_dd_df8, + &m68008_device::chk_w_aips_dd_df8, + &m68008_device::chk_w_pais_dd_df8, + &m68008_device::chk_w_das_dd_df8, + &m68008_device::chk_w_dais_dd_df8, + &m68008_device::chk_w_adr16_dd_df8, + &m68008_device::chk_w_adr32_dd_df8, + &m68008_device::chk_w_dpc_dd_df8, + &m68008_device::chk_w_dpci_dd_df8, + &m68008_device::chk_w_imm16_dd_df8, + &m68008_device::lea_ais_ad_df8, + &m68008_device::lea_das_ad_df8, + &m68008_device::lea_dais_ad_df8, + &m68008_device::lea_adr16_ad_df8, + &m68008_device::lea_adr32_ad_df8, + &m68008_device::lea_dpc_ad_df8, + &m68008_device::lea_dpci_ad_df8, + &m68008_device::clr_b_ds_df8, + &m68008_device::clr_b_ais_df8, + &m68008_device::clr_b_aips_df8, + &m68008_device::clr_b_pais_df8, + &m68008_device::clr_b_das_df8, + &m68008_device::clr_b_dais_df8, + &m68008_device::clr_b_adr16_df8, + &m68008_device::clr_b_adr32_df8, + &m68008_device::clr_w_ds_df8, + &m68008_device::clr_w_ais_df8, + &m68008_device::clr_w_aips_df8, + &m68008_device::clr_w_pais_df8, + &m68008_device::clr_w_das_df8, + &m68008_device::clr_w_dais_df8, + &m68008_device::clr_w_adr16_df8, + &m68008_device::clr_w_adr32_df8, + &m68008_device::clr_l_ds_df8, + &m68008_device::clr_l_ais_df8, + &m68008_device::clr_l_aips_df8, + &m68008_device::clr_l_pais_df8, + &m68008_device::clr_l_das_df8, + &m68008_device::clr_l_dais_df8, + &m68008_device::clr_l_adr16_df8, + &m68008_device::clr_l_adr32_df8, + &m68008_device::neg_b_ds_df8, + &m68008_device::neg_b_ais_df8, + &m68008_device::neg_b_aips_df8, + &m68008_device::neg_b_pais_df8, + &m68008_device::neg_b_das_df8, + &m68008_device::neg_b_dais_df8, + &m68008_device::neg_b_adr16_df8, + &m68008_device::neg_b_adr32_df8, + &m68008_device::neg_w_ds_df8, + &m68008_device::neg_w_ais_df8, + &m68008_device::neg_w_aips_df8, + &m68008_device::neg_w_pais_df8, + &m68008_device::neg_w_das_df8, + &m68008_device::neg_w_dais_df8, + &m68008_device::neg_w_adr16_df8, + &m68008_device::neg_w_adr32_df8, + &m68008_device::neg_l_ds_df8, + &m68008_device::neg_l_ais_df8, + &m68008_device::neg_l_aips_df8, + &m68008_device::neg_l_pais_df8, + &m68008_device::neg_l_das_df8, + &m68008_device::neg_l_dais_df8, + &m68008_device::neg_l_adr16_df8, + &m68008_device::neg_l_adr32_df8, + &m68008_device::move_ds_ccr_df8, + &m68008_device::move_ais_ccr_df8, + &m68008_device::move_aips_ccr_df8, + &m68008_device::move_pais_ccr_df8, + &m68008_device::move_das_ccr_df8, + &m68008_device::move_dais_ccr_df8, + &m68008_device::move_adr16_ccr_df8, + &m68008_device::move_adr32_ccr_df8, + &m68008_device::move_dpc_ccr_df8, + &m68008_device::move_dpci_ccr_df8, + &m68008_device::move_imm8_ccr_df8, + &m68008_device::not_b_ds_df8, + &m68008_device::not_b_ais_df8, + &m68008_device::not_b_aips_df8, + &m68008_device::not_b_pais_df8, + &m68008_device::not_b_das_df8, + &m68008_device::not_b_dais_df8, + &m68008_device::not_b_adr16_df8, + &m68008_device::not_b_adr32_df8, + &m68008_device::not_w_ds_df8, + &m68008_device::not_w_ais_df8, + &m68008_device::not_w_aips_df8, + &m68008_device::not_w_pais_df8, + &m68008_device::not_w_das_df8, + &m68008_device::not_w_dais_df8, + &m68008_device::not_w_adr16_df8, + &m68008_device::not_w_adr32_df8, + &m68008_device::not_l_ds_df8, + &m68008_device::not_l_ais_df8, + &m68008_device::not_l_aips_df8, + &m68008_device::not_l_pais_df8, + &m68008_device::not_l_das_df8, + &m68008_device::not_l_dais_df8, + &m68008_device::not_l_adr16_df8, + &m68008_device::not_l_adr32_df8, + &m68008_device::move_ds_sr_df8, + &m68008_device::move_ais_sr_df8, + &m68008_device::move_aips_sr_df8, + &m68008_device::move_pais_sr_df8, + &m68008_device::move_das_sr_df8, + &m68008_device::move_dais_sr_df8, + &m68008_device::move_adr16_sr_df8, + &m68008_device::move_adr32_sr_df8, + &m68008_device::move_dpc_sr_df8, + &m68008_device::move_dpci_sr_df8, + &m68008_device::move_i16u_sr_df8, + &m68008_device::nbcd_b_ds_df8, + &m68008_device::nbcd_b_ais_df8, + &m68008_device::nbcd_b_aips_df8, + &m68008_device::nbcd_b_pais_df8, + &m68008_device::nbcd_b_das_df8, + &m68008_device::nbcd_b_dais_df8, + &m68008_device::nbcd_b_adr16_df8, + &m68008_device::nbcd_b_adr32_df8, + &m68008_device::swap_ds_df8, + &m68008_device::pea_ais_df8, + &m68008_device::pea_das_df8, + &m68008_device::pea_dais_df8, + &m68008_device::pea_adr16_df8, + &m68008_device::pea_adr32_df8, + &m68008_device::pea_dpc_df8, + &m68008_device::pea_dpci_df8, + &m68008_device::ext_w_ds_df8, + &m68008_device::movem_w_list_ais_df8, + &m68008_device::movem_w_listp_pais_df8, + &m68008_device::movem_w_list_das_df8, + &m68008_device::movem_w_list_dais_df8, + &m68008_device::movem_w_list_adr16_df8, + &m68008_device::movem_w_list_adr32_df8, + &m68008_device::ext_l_ds_df8, + &m68008_device::movem_l_list_ais_df8, + &m68008_device::movem_l_listp_pais_df8, + &m68008_device::movem_l_list_das_df8, + &m68008_device::movem_l_list_dais_df8, + &m68008_device::movem_l_list_adr16_df8, + &m68008_device::movem_l_list_adr32_df8, + &m68008_device::tst_b_ds_df8, + &m68008_device::tst_b_ais_df8, + &m68008_device::tst_b_aips_df8, + &m68008_device::tst_b_pais_df8, + &m68008_device::tst_b_das_df8, + &m68008_device::tst_b_dais_df8, + &m68008_device::tst_b_adr16_df8, + &m68008_device::tst_b_adr32_df8, + &m68008_device::tst_w_ds_df8, + &m68008_device::tst_w_ais_df8, + &m68008_device::tst_w_aips_df8, + &m68008_device::tst_w_pais_df8, + &m68008_device::tst_w_das_df8, + &m68008_device::tst_w_dais_df8, + &m68008_device::tst_w_adr16_df8, + &m68008_device::tst_w_adr32_df8, + &m68008_device::tst_l_ds_df8, + &m68008_device::tst_l_ais_df8, + &m68008_device::tst_l_aips_df8, + &m68008_device::tst_l_pais_df8, + &m68008_device::tst_l_das_df8, + &m68008_device::tst_l_dais_df8, + &m68008_device::tst_l_adr16_df8, + &m68008_device::tst_l_adr32_df8, + &m68008_device::tas_ds_df8, + &m68008_device::tas_ais_df8, + &m68008_device::tas_aips_df8, + &m68008_device::tas_pais_df8, + &m68008_device::tas_das_df8, + &m68008_device::tas_dais_df8, + &m68008_device::tas_adr16_df8, + &m68008_device::tas_adr32_df8, + &m68008_device::movem_w_ais_list_df8, + &m68008_device::movem_w_aips_list_df8, + &m68008_device::movem_w_das_list_df8, + &m68008_device::movem_w_dais_list_df8, + &m68008_device::movem_w_adr16_list_df8, + &m68008_device::movem_w_adr32_list_df8, + &m68008_device::movem_w_dpc_list_df8, + &m68008_device::movem_w_dpci_list_df8, + &m68008_device::movem_l_ais_list_df8, + &m68008_device::movem_l_aips_list_df8, + &m68008_device::movem_l_das_list_df8, + &m68008_device::movem_l_dais_list_df8, + &m68008_device::movem_l_adr16_list_df8, + &m68008_device::movem_l_adr32_list_df8, + &m68008_device::movem_l_dpc_list_df8, + &m68008_device::movem_l_dpci_list_df8, + &m68008_device::trap_imm4_df8, + &m68008_device::link_as_imm16_df8, + &m68008_device::unlk_as_df8, + &m68008_device::move_as_usp_df8, + &m68008_device::move_usp_as_df8, + &m68008_device::reset_df8, + &m68008_device::nop_df8, + &m68008_device::stop_i16u_df8, + &m68008_device::rte_df8, + &m68008_device::rts_df8, + &m68008_device::trapv_df8, + &m68008_device::rtr_df8, + &m68008_device::jsr_ais_df8, + &m68008_device::jsr_das_df8, + &m68008_device::jsr_dais_df8, + &m68008_device::jsr_adr16_df8, + &m68008_device::jsr_adr32_df8, + &m68008_device::jsr_dpc_df8, + &m68008_device::jsr_dpci_df8, + &m68008_device::jmp_ais_df8, + &m68008_device::jmp_das_df8, + &m68008_device::jmp_dais_df8, + &m68008_device::jmp_adr16_df8, + &m68008_device::jmp_adr32_df8, + &m68008_device::jmp_dpc_df8, + &m68008_device::jmp_dpci_df8, + &m68008_device::addq_b_imm3_ds_df8, + &m68008_device::addq_b_imm3_ais_df8, + &m68008_device::addq_b_imm3_aips_df8, + &m68008_device::addq_b_imm3_pais_df8, + &m68008_device::addq_b_imm3_das_df8, + &m68008_device::addq_b_imm3_dais_df8, + &m68008_device::addq_b_imm3_adr16_df8, + &m68008_device::addq_b_imm3_adr32_df8, + &m68008_device::addq_w_imm3_ds_df8, + &m68008_device::addq_w_imm3_as_df8, + &m68008_device::addq_w_imm3_ais_df8, + &m68008_device::addq_w_imm3_aips_df8, + &m68008_device::addq_w_imm3_pais_df8, + &m68008_device::addq_w_imm3_das_df8, + &m68008_device::addq_w_imm3_dais_df8, + &m68008_device::addq_w_imm3_adr16_df8, + &m68008_device::addq_w_imm3_adr32_df8, + &m68008_device::addq_l_imm3_ds_df8, + &m68008_device::addq_l_imm3_as_df8, + &m68008_device::addq_l_imm3_ais_df8, + &m68008_device::addq_l_imm3_aips_df8, + &m68008_device::addq_l_imm3_pais_df8, + &m68008_device::addq_l_imm3_das_df8, + &m68008_device::addq_l_imm3_dais_df8, + &m68008_device::addq_l_imm3_adr16_df8, + &m68008_device::addq_l_imm3_adr32_df8, + &m68008_device::st_ds_df8, + &m68008_device::dbt_ds_rel16_df8, + &m68008_device::st_ais_df8, + &m68008_device::st_aips_df8, + &m68008_device::st_pais_df8, + &m68008_device::st_das_df8, + &m68008_device::st_dais_df8, + &m68008_device::st_adr16_df8, + &m68008_device::st_adr32_df8, + &m68008_device::subq_b_imm3_ds_df8, + &m68008_device::subq_b_imm3_ais_df8, + &m68008_device::subq_b_imm3_aips_df8, + &m68008_device::subq_b_imm3_pais_df8, + &m68008_device::subq_b_imm3_das_df8, + &m68008_device::subq_b_imm3_dais_df8, + &m68008_device::subq_b_imm3_adr16_df8, + &m68008_device::subq_b_imm3_adr32_df8, + &m68008_device::subq_w_imm3_ds_df8, + &m68008_device::subq_w_imm3_as_df8, + &m68008_device::subq_w_imm3_ais_df8, + &m68008_device::subq_w_imm3_aips_df8, + &m68008_device::subq_w_imm3_pais_df8, + &m68008_device::subq_w_imm3_das_df8, + &m68008_device::subq_w_imm3_dais_df8, + &m68008_device::subq_w_imm3_adr16_df8, + &m68008_device::subq_w_imm3_adr32_df8, + &m68008_device::subq_l_imm3_ds_df8, + &m68008_device::subq_l_imm3_as_df8, + &m68008_device::subq_l_imm3_ais_df8, + &m68008_device::subq_l_imm3_aips_df8, + &m68008_device::subq_l_imm3_pais_df8, + &m68008_device::subq_l_imm3_das_df8, + &m68008_device::subq_l_imm3_dais_df8, + &m68008_device::subq_l_imm3_adr16_df8, + &m68008_device::subq_l_imm3_adr32_df8, + &m68008_device::sf_ds_df8, + &m68008_device::dbra_ds_rel16_df8, + &m68008_device::sf_ais_df8, + &m68008_device::sf_aips_df8, + &m68008_device::sf_pais_df8, + &m68008_device::sf_das_df8, + &m68008_device::sf_dais_df8, + &m68008_device::sf_adr16_df8, + &m68008_device::sf_adr32_df8, + &m68008_device::shi_ds_df8, + &m68008_device::dbhi_ds_rel16_df8, + &m68008_device::shi_ais_df8, + &m68008_device::shi_aips_df8, + &m68008_device::shi_pais_df8, + &m68008_device::shi_das_df8, + &m68008_device::shi_dais_df8, + &m68008_device::shi_adr16_df8, + &m68008_device::shi_adr32_df8, + &m68008_device::sls_ds_df8, + &m68008_device::dbls_ds_rel16_df8, + &m68008_device::sls_ais_df8, + &m68008_device::sls_aips_df8, + &m68008_device::sls_pais_df8, + &m68008_device::sls_das_df8, + &m68008_device::sls_dais_df8, + &m68008_device::sls_adr16_df8, + &m68008_device::sls_adr32_df8, + &m68008_device::scc_ds_df8, + &m68008_device::dbcc_ds_rel16_df8, + &m68008_device::scc_ais_df8, + &m68008_device::scc_aips_df8, + &m68008_device::scc_pais_df8, + &m68008_device::scc_das_df8, + &m68008_device::scc_dais_df8, + &m68008_device::scc_adr16_df8, + &m68008_device::scc_adr32_df8, + &m68008_device::scs_ds_df8, + &m68008_device::dbcs_ds_rel16_df8, + &m68008_device::scs_ais_df8, + &m68008_device::scs_aips_df8, + &m68008_device::scs_pais_df8, + &m68008_device::scs_das_df8, + &m68008_device::scs_dais_df8, + &m68008_device::scs_adr16_df8, + &m68008_device::scs_adr32_df8, + &m68008_device::sne_ds_df8, + &m68008_device::dbne_ds_rel16_df8, + &m68008_device::sne_ais_df8, + &m68008_device::sne_aips_df8, + &m68008_device::sne_pais_df8, + &m68008_device::sne_das_df8, + &m68008_device::sne_dais_df8, + &m68008_device::sne_adr16_df8, + &m68008_device::sne_adr32_df8, + &m68008_device::seq_ds_df8, + &m68008_device::dbeq_ds_rel16_df8, + &m68008_device::seq_ais_df8, + &m68008_device::seq_aips_df8, + &m68008_device::seq_pais_df8, + &m68008_device::seq_das_df8, + &m68008_device::seq_dais_df8, + &m68008_device::seq_adr16_df8, + &m68008_device::seq_adr32_df8, + &m68008_device::svc_ds_df8, + &m68008_device::dbvc_ds_rel16_df8, + &m68008_device::svc_ais_df8, + &m68008_device::svc_aips_df8, + &m68008_device::svc_pais_df8, + &m68008_device::svc_das_df8, + &m68008_device::svc_dais_df8, + &m68008_device::svc_adr16_df8, + &m68008_device::svc_adr32_df8, + &m68008_device::svs_ds_df8, + &m68008_device::dbvs_ds_rel16_df8, + &m68008_device::svs_ais_df8, + &m68008_device::svs_aips_df8, + &m68008_device::svs_pais_df8, + &m68008_device::svs_das_df8, + &m68008_device::svs_dais_df8, + &m68008_device::svs_adr16_df8, + &m68008_device::svs_adr32_df8, + &m68008_device::spl_ds_df8, + &m68008_device::dbpl_ds_rel16_df8, + &m68008_device::spl_ais_df8, + &m68008_device::spl_aips_df8, + &m68008_device::spl_pais_df8, + &m68008_device::spl_das_df8, + &m68008_device::spl_dais_df8, + &m68008_device::spl_adr16_df8, + &m68008_device::spl_adr32_df8, + &m68008_device::smi_ds_df8, + &m68008_device::dbmi_ds_rel16_df8, + &m68008_device::smi_ais_df8, + &m68008_device::smi_aips_df8, + &m68008_device::smi_pais_df8, + &m68008_device::smi_das_df8, + &m68008_device::smi_dais_df8, + &m68008_device::smi_adr16_df8, + &m68008_device::smi_adr32_df8, + &m68008_device::sge_ds_df8, + &m68008_device::dbge_ds_rel16_df8, + &m68008_device::sge_ais_df8, + &m68008_device::sge_aips_df8, + &m68008_device::sge_pais_df8, + &m68008_device::sge_das_df8, + &m68008_device::sge_dais_df8, + &m68008_device::sge_adr16_df8, + &m68008_device::sge_adr32_df8, + &m68008_device::slt_ds_df8, + &m68008_device::dblt_ds_rel16_df8, + &m68008_device::slt_ais_df8, + &m68008_device::slt_aips_df8, + &m68008_device::slt_pais_df8, + &m68008_device::slt_das_df8, + &m68008_device::slt_dais_df8, + &m68008_device::slt_adr16_df8, + &m68008_device::slt_adr32_df8, + &m68008_device::sgt_ds_df8, + &m68008_device::dbgt_ds_rel16_df8, + &m68008_device::sgt_ais_df8, + &m68008_device::sgt_aips_df8, + &m68008_device::sgt_pais_df8, + &m68008_device::sgt_das_df8, + &m68008_device::sgt_dais_df8, + &m68008_device::sgt_adr16_df8, + &m68008_device::sgt_adr32_df8, + &m68008_device::sle_ds_df8, + &m68008_device::dble_ds_rel16_df8, + &m68008_device::sle_ais_df8, + &m68008_device::sle_aips_df8, + &m68008_device::sle_pais_df8, + &m68008_device::sle_das_df8, + &m68008_device::sle_dais_df8, + &m68008_device::sle_adr16_df8, + &m68008_device::sle_adr32_df8, + &m68008_device::bra_rel16_df8, + &m68008_device::bra_rel8_df8, + &m68008_device::bsr_rel16_df8, + &m68008_device::bsr_rel8_df8, + &m68008_device::bhi_rel16_df8, + &m68008_device::bhi_rel8_df8, + &m68008_device::bls_rel16_df8, + &m68008_device::bls_rel8_df8, + &m68008_device::bcc_rel16_df8, + &m68008_device::bcc_rel8_df8, + &m68008_device::bcs_rel16_df8, + &m68008_device::bcs_rel8_df8, + &m68008_device::bne_rel16_df8, + &m68008_device::bne_rel8_df8, + &m68008_device::beq_rel16_df8, + &m68008_device::beq_rel8_df8, + &m68008_device::bvc_rel16_df8, + &m68008_device::bvc_rel8_df8, + &m68008_device::bvs_rel16_df8, + &m68008_device::bvs_rel8_df8, + &m68008_device::bpl_rel16_df8, + &m68008_device::bpl_rel8_df8, + &m68008_device::bmi_rel16_df8, + &m68008_device::bmi_rel8_df8, + &m68008_device::bge_rel16_df8, + &m68008_device::bge_rel8_df8, + &m68008_device::blt_rel16_df8, + &m68008_device::blt_rel8_df8, + &m68008_device::bgt_rel16_df8, + &m68008_device::bgt_rel8_df8, + &m68008_device::ble_rel16_df8, + &m68008_device::ble_rel8_df8, + &m68008_device::moveq_imm8o_dd_df8, + &m68008_device::or_b_ds_dd_df8, + &m68008_device::or_b_ais_dd_df8, + &m68008_device::or_b_aips_dd_df8, + &m68008_device::or_b_pais_dd_df8, + &m68008_device::or_b_das_dd_df8, + &m68008_device::or_b_dais_dd_df8, + &m68008_device::or_b_adr16_dd_df8, + &m68008_device::or_b_adr32_dd_df8, + &m68008_device::or_b_dpc_dd_df8, + &m68008_device::or_b_dpci_dd_df8, + &m68008_device::or_b_imm8_dd_df8, + &m68008_device::or_w_ds_dd_df8, + &m68008_device::or_w_ais_dd_df8, + &m68008_device::or_w_aips_dd_df8, + &m68008_device::or_w_pais_dd_df8, + &m68008_device::or_w_das_dd_df8, + &m68008_device::or_w_dais_dd_df8, + &m68008_device::or_w_adr16_dd_df8, + &m68008_device::or_w_adr32_dd_df8, + &m68008_device::or_w_dpc_dd_df8, + &m68008_device::or_w_dpci_dd_df8, + &m68008_device::or_w_imm16_dd_df8, + &m68008_device::or_l_ds_dd_df8, + &m68008_device::or_l_ais_dd_df8, + &m68008_device::or_l_aips_dd_df8, + &m68008_device::or_l_pais_dd_df8, + &m68008_device::or_l_das_dd_df8, + &m68008_device::or_l_dais_dd_df8, + &m68008_device::or_l_adr16_dd_df8, + &m68008_device::or_l_adr32_dd_df8, + &m68008_device::or_l_dpc_dd_df8, + &m68008_device::or_l_dpci_dd_df8, + &m68008_device::or_l_imm32_dd_df8, + &m68008_device::divu_w_ds_dd_df8, + &m68008_device::divu_w_ais_dd_df8, + &m68008_device::divu_w_aips_dd_df8, + &m68008_device::divu_w_pais_dd_df8, + &m68008_device::divu_w_das_dd_df8, + &m68008_device::divu_w_dais_dd_df8, + &m68008_device::divu_w_adr16_dd_df8, + &m68008_device::divu_w_adr32_dd_df8, + &m68008_device::divu_w_dpc_dd_df8, + &m68008_device::divu_w_dpci_dd_df8, + &m68008_device::divu_w_imm16_dd_df8, + &m68008_device::sbcd_ds_dd_df8, + &m68008_device::sbcd_pais_paid_df8, + &m68008_device::or_b_dd_ais_df8, + &m68008_device::or_b_dd_aips_df8, + &m68008_device::or_b_dd_pais_df8, + &m68008_device::or_b_dd_das_df8, + &m68008_device::or_b_dd_dais_df8, + &m68008_device::or_b_dd_adr16_df8, + &m68008_device::or_b_dd_adr32_df8, + &m68008_device::or_w_dd_ais_df8, + &m68008_device::or_w_dd_aips_df8, + &m68008_device::or_w_dd_pais_df8, + &m68008_device::or_w_dd_das_df8, + &m68008_device::or_w_dd_dais_df8, + &m68008_device::or_w_dd_adr16_df8, + &m68008_device::or_w_dd_adr32_df8, + &m68008_device::or_l_dd_ais_df8, + &m68008_device::or_l_dd_aips_df8, + &m68008_device::or_l_dd_pais_df8, + &m68008_device::or_l_dd_das_df8, + &m68008_device::or_l_dd_dais_df8, + &m68008_device::or_l_dd_adr16_df8, + &m68008_device::or_l_dd_adr32_df8, + &m68008_device::divs_w_ds_dd_df8, + &m68008_device::divs_w_ais_dd_df8, + &m68008_device::divs_w_aips_dd_df8, + &m68008_device::divs_w_pais_dd_df8, + &m68008_device::divs_w_das_dd_df8, + &m68008_device::divs_w_dais_dd_df8, + &m68008_device::divs_w_adr16_dd_df8, + &m68008_device::divs_w_adr32_dd_df8, + &m68008_device::divs_w_dpc_dd_df8, + &m68008_device::divs_w_dpci_dd_df8, + &m68008_device::divs_w_imm16_dd_df8, + &m68008_device::sub_b_ds_dd_df8, + &m68008_device::sub_b_ais_dd_df8, + &m68008_device::sub_b_aips_dd_df8, + &m68008_device::sub_b_pais_dd_df8, + &m68008_device::sub_b_das_dd_df8, + &m68008_device::sub_b_dais_dd_df8, + &m68008_device::sub_b_adr16_dd_df8, + &m68008_device::sub_b_adr32_dd_df8, + &m68008_device::sub_b_dpc_dd_df8, + &m68008_device::sub_b_dpci_dd_df8, + &m68008_device::sub_b_imm8_dd_df8, + &m68008_device::sub_w_ds_dd_df8, + &m68008_device::sub_w_as_dd_df8, + &m68008_device::sub_w_ais_dd_df8, + &m68008_device::sub_w_aips_dd_df8, + &m68008_device::sub_w_pais_dd_df8, + &m68008_device::sub_w_das_dd_df8, + &m68008_device::sub_w_dais_dd_df8, + &m68008_device::sub_w_adr16_dd_df8, + &m68008_device::sub_w_adr32_dd_df8, + &m68008_device::sub_w_dpc_dd_df8, + &m68008_device::sub_w_dpci_dd_df8, + &m68008_device::sub_w_imm16_dd_df8, + &m68008_device::sub_l_ds_dd_df8, + &m68008_device::sub_l_as_dd_df8, + &m68008_device::sub_l_ais_dd_df8, + &m68008_device::sub_l_aips_dd_df8, + &m68008_device::sub_l_pais_dd_df8, + &m68008_device::sub_l_das_dd_df8, + &m68008_device::sub_l_dais_dd_df8, + &m68008_device::sub_l_adr16_dd_df8, + &m68008_device::sub_l_adr32_dd_df8, + &m68008_device::sub_l_dpc_dd_df8, + &m68008_device::sub_l_dpci_dd_df8, + &m68008_device::sub_l_imm32_dd_df8, + &m68008_device::suba_w_ds_ad_df8, + &m68008_device::suba_w_as_ad_df8, + &m68008_device::suba_w_ais_ad_df8, + &m68008_device::suba_w_aips_ad_df8, + &m68008_device::suba_w_pais_ad_df8, + &m68008_device::suba_w_das_ad_df8, + &m68008_device::suba_w_dais_ad_df8, + &m68008_device::suba_w_adr16_ad_df8, + &m68008_device::suba_w_adr32_ad_df8, + &m68008_device::suba_w_dpc_ad_df8, + &m68008_device::suba_w_dpci_ad_df8, + &m68008_device::suba_w_imm16_ad_df8, + &m68008_device::subx_b_ds_dd_df8, + &m68008_device::subx_b_pais_paid_df8, + &m68008_device::sub_b_dd_ais_df8, + &m68008_device::sub_b_dd_aips_df8, + &m68008_device::sub_b_dd_pais_df8, + &m68008_device::sub_b_dd_das_df8, + &m68008_device::sub_b_dd_dais_df8, + &m68008_device::sub_b_dd_adr16_df8, + &m68008_device::sub_b_dd_adr32_df8, + &m68008_device::subx_w_ds_dd_df8, + &m68008_device::subx_w_pais_paid_df8, + &m68008_device::sub_w_dd_ais_df8, + &m68008_device::sub_w_dd_aips_df8, + &m68008_device::sub_w_dd_pais_df8, + &m68008_device::sub_w_dd_das_df8, + &m68008_device::sub_w_dd_dais_df8, + &m68008_device::sub_w_dd_adr16_df8, + &m68008_device::sub_w_dd_adr32_df8, + &m68008_device::subx_l_ds_dd_df8, + &m68008_device::subx_l_pais_paid_df8, + &m68008_device::sub_l_dd_ais_df8, + &m68008_device::sub_l_dd_aips_df8, + &m68008_device::sub_l_dd_pais_df8, + &m68008_device::sub_l_dd_das_df8, + &m68008_device::sub_l_dd_dais_df8, + &m68008_device::sub_l_dd_adr16_df8, + &m68008_device::sub_l_dd_adr32_df8, + &m68008_device::suba_l_ds_ad_df8, + &m68008_device::suba_l_as_ad_df8, + &m68008_device::suba_l_ais_ad_df8, + &m68008_device::suba_l_aips_ad_df8, + &m68008_device::suba_l_pais_ad_df8, + &m68008_device::suba_l_das_ad_df8, + &m68008_device::suba_l_dais_ad_df8, + &m68008_device::suba_l_adr16_ad_df8, + &m68008_device::suba_l_adr32_ad_df8, + &m68008_device::suba_l_dpc_ad_df8, + &m68008_device::suba_l_dpci_ad_df8, + &m68008_device::suba_l_imm32_ad_df8, + &m68008_device::cmp_b_ds_dd_df8, + &m68008_device::cmp_b_ais_dd_df8, + &m68008_device::cmp_b_aips_dd_df8, + &m68008_device::cmp_b_pais_dd_df8, + &m68008_device::cmp_b_das_dd_df8, + &m68008_device::cmp_b_dais_dd_df8, + &m68008_device::cmp_b_adr16_dd_df8, + &m68008_device::cmp_b_adr32_dd_df8, + &m68008_device::cmp_b_dpc_dd_df8, + &m68008_device::cmp_b_dpci_dd_df8, + &m68008_device::cmp_b_imm8_dd_df8, + &m68008_device::cmp_w_ds_dd_df8, + &m68008_device::cmp_w_as_dd_df8, + &m68008_device::cmp_w_ais_dd_df8, + &m68008_device::cmp_w_aips_dd_df8, + &m68008_device::cmp_w_pais_dd_df8, + &m68008_device::cmp_w_das_dd_df8, + &m68008_device::cmp_w_dais_dd_df8, + &m68008_device::cmp_w_adr16_dd_df8, + &m68008_device::cmp_w_adr32_dd_df8, + &m68008_device::cmp_w_dpc_dd_df8, + &m68008_device::cmp_w_dpci_dd_df8, + &m68008_device::cmp_w_imm16_dd_df8, + &m68008_device::cmp_l_ds_dd_df8, + &m68008_device::cmp_l_as_dd_df8, + &m68008_device::cmp_l_ais_dd_df8, + &m68008_device::cmp_l_aips_dd_df8, + &m68008_device::cmp_l_pais_dd_df8, + &m68008_device::cmp_l_das_dd_df8, + &m68008_device::cmp_l_dais_dd_df8, + &m68008_device::cmp_l_adr16_dd_df8, + &m68008_device::cmp_l_adr32_dd_df8, + &m68008_device::cmp_l_dpc_dd_df8, + &m68008_device::cmp_l_dpci_dd_df8, + &m68008_device::cmp_l_imm32_dd_df8, + &m68008_device::cmpa_w_ds_ad_df8, + &m68008_device::cmpa_w_as_ad_df8, + &m68008_device::cmpa_w_ais_ad_df8, + &m68008_device::cmpa_w_aips_ad_df8, + &m68008_device::cmpa_w_pais_ad_df8, + &m68008_device::cmpa_w_das_ad_df8, + &m68008_device::cmpa_w_dais_ad_df8, + &m68008_device::cmpa_w_adr16_ad_df8, + &m68008_device::cmpa_w_adr32_ad_df8, + &m68008_device::cmpa_w_dpc_ad_df8, + &m68008_device::cmpa_w_dpci_ad_df8, + &m68008_device::cmpa_w_imm16_ad_df8, + &m68008_device::eor_b_dd_ds_df8, + &m68008_device::cmpm_b_aips_aipd_df8, + &m68008_device::eor_b_dd_ais_df8, + &m68008_device::eor_b_dd_aips_df8, + &m68008_device::eor_b_dd_pais_df8, + &m68008_device::eor_b_dd_das_df8, + &m68008_device::eor_b_dd_dais_df8, + &m68008_device::eor_b_dd_adr16_df8, + &m68008_device::eor_b_dd_adr32_df8, + &m68008_device::eor_w_dd_ds_df8, + &m68008_device::cmpm_w_aips_aipd_df8, + &m68008_device::eor_w_dd_ais_df8, + &m68008_device::eor_w_dd_aips_df8, + &m68008_device::eor_w_dd_pais_df8, + &m68008_device::eor_w_dd_das_df8, + &m68008_device::eor_w_dd_dais_df8, + &m68008_device::eor_w_dd_adr16_df8, + &m68008_device::eor_w_dd_adr32_df8, + &m68008_device::eor_l_dd_ds_df8, + &m68008_device::cmpm_l_aips_aipd_df8, + &m68008_device::eor_l_dd_ais_df8, + &m68008_device::eor_l_dd_aips_df8, + &m68008_device::eor_l_dd_pais_df8, + &m68008_device::eor_l_dd_das_df8, + &m68008_device::eor_l_dd_dais_df8, + &m68008_device::eor_l_dd_adr16_df8, + &m68008_device::eor_l_dd_adr32_df8, + &m68008_device::cmpa_l_ds_ad_df8, + &m68008_device::cmpa_l_as_ad_df8, + &m68008_device::cmpa_l_ais_ad_df8, + &m68008_device::cmpa_l_aips_ad_df8, + &m68008_device::cmpa_l_pais_ad_df8, + &m68008_device::cmpa_l_das_ad_df8, + &m68008_device::cmpa_l_dais_ad_df8, + &m68008_device::cmpa_l_adr16_ad_df8, + &m68008_device::cmpa_l_adr32_ad_df8, + &m68008_device::cmpa_l_dpc_ad_df8, + &m68008_device::cmpa_l_dpci_ad_df8, + &m68008_device::cmpa_l_imm32_ad_df8, + &m68008_device::and_b_ds_dd_df8, + &m68008_device::and_b_ais_dd_df8, + &m68008_device::and_b_aips_dd_df8, + &m68008_device::and_b_pais_dd_df8, + &m68008_device::and_b_das_dd_df8, + &m68008_device::and_b_dais_dd_df8, + &m68008_device::and_b_adr16_dd_df8, + &m68008_device::and_b_adr32_dd_df8, + &m68008_device::and_b_dpc_dd_df8, + &m68008_device::and_b_dpci_dd_df8, + &m68008_device::and_b_imm8_dd_df8, + &m68008_device::and_w_ds_dd_df8, + &m68008_device::and_w_ais_dd_df8, + &m68008_device::and_w_aips_dd_df8, + &m68008_device::and_w_pais_dd_df8, + &m68008_device::and_w_das_dd_df8, + &m68008_device::and_w_dais_dd_df8, + &m68008_device::and_w_adr16_dd_df8, + &m68008_device::and_w_adr32_dd_df8, + &m68008_device::and_w_dpc_dd_df8, + &m68008_device::and_w_dpci_dd_df8, + &m68008_device::and_w_imm16_dd_df8, + &m68008_device::and_l_ds_dd_df8, + &m68008_device::and_l_ais_dd_df8, + &m68008_device::and_l_aips_dd_df8, + &m68008_device::and_l_pais_dd_df8, + &m68008_device::and_l_das_dd_df8, + &m68008_device::and_l_dais_dd_df8, + &m68008_device::and_l_adr16_dd_df8, + &m68008_device::and_l_adr32_dd_df8, + &m68008_device::and_l_dpc_dd_df8, + &m68008_device::and_l_dpci_dd_df8, + &m68008_device::and_l_imm32_dd_df8, + &m68008_device::mulu_w_ds_dd_df8, + &m68008_device::mulu_w_ais_dd_df8, + &m68008_device::mulu_w_aips_dd_df8, + &m68008_device::mulu_w_pais_dd_df8, + &m68008_device::mulu_w_das_dd_df8, + &m68008_device::mulu_w_dais_dd_df8, + &m68008_device::mulu_w_adr16_dd_df8, + &m68008_device::mulu_w_adr32_dd_df8, + &m68008_device::mulu_w_dpc_dd_df8, + &m68008_device::mulu_w_dpci_dd_df8, + &m68008_device::mulu_w_imm16_dd_df8, + &m68008_device::abcd_ds_dd_df8, + &m68008_device::abcd_pais_paid_df8, + &m68008_device::and_b_dd_ais_df8, + &m68008_device::and_b_dd_aips_df8, + &m68008_device::and_b_dd_pais_df8, + &m68008_device::and_b_dd_das_df8, + &m68008_device::and_b_dd_dais_df8, + &m68008_device::and_b_dd_adr16_df8, + &m68008_device::and_b_dd_adr32_df8, + &m68008_device::exg_dd_ds_df8, + &m68008_device::exg_ad_as_df8, + &m68008_device::and_w_dd_ais_df8, + &m68008_device::and_w_dd_aips_df8, + &m68008_device::and_w_dd_pais_df8, + &m68008_device::and_w_dd_das_df8, + &m68008_device::and_w_dd_dais_df8, + &m68008_device::and_w_dd_adr16_df8, + &m68008_device::and_w_dd_adr32_df8, + &m68008_device::exg_dd_as_df8, + &m68008_device::and_l_dd_ais_df8, + &m68008_device::and_l_dd_aips_df8, + &m68008_device::and_l_dd_pais_df8, + &m68008_device::and_l_dd_das_df8, + &m68008_device::and_l_dd_dais_df8, + &m68008_device::and_l_dd_adr16_df8, + &m68008_device::and_l_dd_adr32_df8, + &m68008_device::muls_w_ds_dd_df8, + &m68008_device::muls_w_ais_dd_df8, + &m68008_device::muls_w_aips_dd_df8, + &m68008_device::muls_w_pais_dd_df8, + &m68008_device::muls_w_das_dd_df8, + &m68008_device::muls_w_dais_dd_df8, + &m68008_device::muls_w_adr16_dd_df8, + &m68008_device::muls_w_adr32_dd_df8, + &m68008_device::muls_w_dpc_dd_df8, + &m68008_device::muls_w_dpci_dd_df8, + &m68008_device::muls_w_imm16_dd_df8, + &m68008_device::add_b_ds_dd_df8, + &m68008_device::add_b_ais_dd_df8, + &m68008_device::add_b_aips_dd_df8, + &m68008_device::add_b_pais_dd_df8, + &m68008_device::add_b_das_dd_df8, + &m68008_device::add_b_dais_dd_df8, + &m68008_device::add_b_adr16_dd_df8, + &m68008_device::add_b_adr32_dd_df8, + &m68008_device::add_b_dpc_dd_df8, + &m68008_device::add_b_dpci_dd_df8, + &m68008_device::add_b_imm8_dd_df8, + &m68008_device::add_w_ds_dd_df8, + &m68008_device::add_w_as_dd_df8, + &m68008_device::add_w_ais_dd_df8, + &m68008_device::add_w_aips_dd_df8, + &m68008_device::add_w_pais_dd_df8, + &m68008_device::add_w_das_dd_df8, + &m68008_device::add_w_dais_dd_df8, + &m68008_device::add_w_adr16_dd_df8, + &m68008_device::add_w_adr32_dd_df8, + &m68008_device::add_w_dpc_dd_df8, + &m68008_device::add_w_dpci_dd_df8, + &m68008_device::add_w_imm16_dd_df8, + &m68008_device::add_l_ds_dd_df8, + &m68008_device::add_l_as_dd_df8, + &m68008_device::add_l_ais_dd_df8, + &m68008_device::add_l_aips_dd_df8, + &m68008_device::add_l_pais_dd_df8, + &m68008_device::add_l_das_dd_df8, + &m68008_device::add_l_dais_dd_df8, + &m68008_device::add_l_adr16_dd_df8, + &m68008_device::add_l_adr32_dd_df8, + &m68008_device::add_l_dpc_dd_df8, + &m68008_device::add_l_dpci_dd_df8, + &m68008_device::add_l_imm32_dd_df8, + &m68008_device::adda_w_ds_ad_df8, + &m68008_device::adda_w_as_ad_df8, + &m68008_device::adda_w_ais_ad_df8, + &m68008_device::adda_w_aips_ad_df8, + &m68008_device::adda_w_pais_ad_df8, + &m68008_device::adda_w_das_ad_df8, + &m68008_device::adda_w_dais_ad_df8, + &m68008_device::adda_w_adr16_ad_df8, + &m68008_device::adda_w_adr32_ad_df8, + &m68008_device::adda_w_dpc_ad_df8, + &m68008_device::adda_w_dpci_ad_df8, + &m68008_device::adda_w_imm16_ad_df8, + &m68008_device::addx_b_ds_dd_df8, + &m68008_device::addx_b_pais_paid_df8, + &m68008_device::add_b_dd_ais_df8, + &m68008_device::add_b_dd_aips_df8, + &m68008_device::add_b_dd_pais_df8, + &m68008_device::add_b_dd_das_df8, + &m68008_device::add_b_dd_dais_df8, + &m68008_device::add_b_dd_adr16_df8, + &m68008_device::add_b_dd_adr32_df8, + &m68008_device::addx_w_ds_dd_df8, + &m68008_device::addx_w_pais_paid_df8, + &m68008_device::add_w_dd_ais_df8, + &m68008_device::add_w_dd_aips_df8, + &m68008_device::add_w_dd_pais_df8, + &m68008_device::add_w_dd_das_df8, + &m68008_device::add_w_dd_dais_df8, + &m68008_device::add_w_dd_adr16_df8, + &m68008_device::add_w_dd_adr32_df8, + &m68008_device::addx_l_ds_dd_df8, + &m68008_device::addx_l_pais_paid_df8, + &m68008_device::add_l_dd_ais_df8, + &m68008_device::add_l_dd_aips_df8, + &m68008_device::add_l_dd_pais_df8, + &m68008_device::add_l_dd_das_df8, + &m68008_device::add_l_dd_dais_df8, + &m68008_device::add_l_dd_adr16_df8, + &m68008_device::add_l_dd_adr32_df8, + &m68008_device::adda_l_ds_ad_df8, + &m68008_device::adda_l_as_ad_df8, + &m68008_device::adda_l_ais_ad_df8, + &m68008_device::adda_l_aips_ad_df8, + &m68008_device::adda_l_pais_ad_df8, + &m68008_device::adda_l_das_ad_df8, + &m68008_device::adda_l_dais_ad_df8, + &m68008_device::adda_l_adr16_ad_df8, + &m68008_device::adda_l_adr32_ad_df8, + &m68008_device::adda_l_dpc_ad_df8, + &m68008_device::adda_l_dpci_ad_df8, + &m68008_device::adda_l_imm32_ad_df8, + &m68008_device::asr_b_imm3_ds_df8, + &m68008_device::lsr_b_imm3_ds_df8, + &m68008_device::roxr_b_imm3_ds_df8, + &m68008_device::ror_b_imm3_ds_df8, + &m68008_device::asr_b_dd_ds_df8, + &m68008_device::lsr_b_dd_ds_df8, + &m68008_device::roxr_b_dd_ds_df8, + &m68008_device::ror_b_dd_ds_df8, + &m68008_device::asr_w_imm3_ds_df8, + &m68008_device::lsr_w_imm3_ds_df8, + &m68008_device::roxr_w_imm3_ds_df8, + &m68008_device::ror_w_imm3_ds_df8, + &m68008_device::asr_w_dd_ds_df8, + &m68008_device::lsr_w_dd_ds_df8, + &m68008_device::roxr_w_dd_ds_df8, + &m68008_device::ror_w_dd_ds_df8, + &m68008_device::asr_l_imm3_ds_df8, + &m68008_device::lsr_l_imm3_ds_df8, + &m68008_device::roxr_l_imm3_ds_df8, + &m68008_device::ror_l_imm3_ds_df8, + &m68008_device::asr_l_dd_ds_df8, + &m68008_device::lsr_l_dd_ds_df8, + &m68008_device::roxr_l_dd_ds_df8, + &m68008_device::ror_l_dd_ds_df8, + &m68008_device::asr_ais_df8, + &m68008_device::asr_aips_df8, + &m68008_device::asr_pais_df8, + &m68008_device::asr_das_df8, + &m68008_device::asr_dais_df8, + &m68008_device::asr_adr16_df8, + &m68008_device::asr_adr32_df8, + &m68008_device::asl_b_imm3_ds_df8, + &m68008_device::lsl_b_imm3_ds_df8, + &m68008_device::roxl_b_imm3_ds_df8, + &m68008_device::rol_b_imm3_ds_df8, + &m68008_device::asl_b_dd_ds_df8, + &m68008_device::lsl_b_dd_ds_df8, + &m68008_device::roxl_b_dd_ds_df8, + &m68008_device::rol_b_dd_ds_df8, + &m68008_device::asl_w_imm3_ds_df8, + &m68008_device::lsl_w_imm3_ds_df8, + &m68008_device::roxl_w_imm3_ds_df8, + &m68008_device::rol_w_imm3_ds_df8, + &m68008_device::asl_w_dd_ds_df8, + &m68008_device::lsl_w_dd_ds_df8, + &m68008_device::roxl_w_dd_ds_df8, + &m68008_device::rol_w_dd_ds_df8, + &m68008_device::asl_l_imm3_ds_df8, + &m68008_device::lsl_l_imm3_ds_df8, + &m68008_device::roxl_l_imm3_ds_df8, + &m68008_device::rol_l_imm3_ds_df8, + &m68008_device::asl_l_dd_ds_df8, + &m68008_device::lsl_l_dd_ds_df8, + &m68008_device::roxl_l_dd_ds_df8, + &m68008_device::rol_l_dd_ds_df8, + &m68008_device::asl_ais_df8, + &m68008_device::asl_aips_df8, + &m68008_device::asl_pais_df8, + &m68008_device::asl_das_df8, + &m68008_device::asl_dais_df8, + &m68008_device::asl_adr16_df8, + &m68008_device::asl_adr32_df8, + &m68008_device::lsr_ais_df8, + &m68008_device::lsr_aips_df8, + &m68008_device::lsr_pais_df8, + &m68008_device::lsr_das_df8, + &m68008_device::lsr_dais_df8, + &m68008_device::lsr_adr16_df8, + &m68008_device::lsr_adr32_df8, + &m68008_device::lsl_ais_df8, + &m68008_device::lsl_aips_df8, + &m68008_device::lsl_pais_df8, + &m68008_device::lsl_das_df8, + &m68008_device::lsl_dais_df8, + &m68008_device::lsl_adr16_df8, + &m68008_device::lsl_adr32_df8, + &m68008_device::roxr_ais_df8, + &m68008_device::roxr_aips_df8, + &m68008_device::roxr_pais_df8, + &m68008_device::roxr_das_df8, + &m68008_device::roxr_dais_df8, + &m68008_device::roxr_adr16_df8, + &m68008_device::roxr_adr32_df8, + &m68008_device::roxl_ais_df8, + &m68008_device::roxl_aips_df8, + &m68008_device::roxl_pais_df8, + &m68008_device::roxl_das_df8, + &m68008_device::roxl_dais_df8, + &m68008_device::roxl_adr16_df8, + &m68008_device::roxl_adr32_df8, + &m68008_device::ror_ais_df8, + &m68008_device::ror_aips_df8, + &m68008_device::ror_pais_df8, + &m68008_device::ror_das_df8, + &m68008_device::ror_dais_df8, + &m68008_device::ror_adr16_df8, + &m68008_device::ror_adr32_df8, + &m68008_device::rol_ais_df8, + &m68008_device::rol_aips_df8, + &m68008_device::rol_pais_df8, + &m68008_device::rol_das_df8, + &m68008_device::rol_dais_df8, + &m68008_device::rol_adr16_df8, + &m68008_device::rol_adr32_df8, +}; diff --git a/src/devices/cpu/m68000/m68008-sdp8.cpp b/src/devices/cpu/m68000/m68008-sdp8.cpp new file mode 100644 index 00000000000..fab8873c71f --- /dev/null +++ b/src/devices/cpu/m68000/m68008-sdp8.cpp @@ -0,0 +1,274771 @@ +// Instruction handlers for the m68000 (direct, partial, cpu) +// +// Generated by m68000gen.py sdp8 m68000.lst m68008-sdp8.cpp + +#include "emu.h" +#include "m68008.h" + +void m68008_device::state_reset_dp8() +{ + switch(m_inst_substate) { + case 0: + // 002 rstp3 + m_icount -= 2; + // 296 rstp4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 27e rstp5 + debugger_exception_hook(0x00); + m_ftu = 0x0000; + m_icount -= 2; + // 27f rstp6 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_sr |= 0x0700; + update_interrupt(); + m_au = ext32(m_ftu); + m_icount -= 2; + // 2fb rstp7 + m_aob = m_au; + set_16h(m_da[16], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2ff rstp8 + m_aob = m_au; + set_16h(m_da[16], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 300 rstp9 + m_aob = m_au; + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + set_16l(m_da[16], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 11e rstpa + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::state_bus_error_dp8() +{ + switch(m_inst_substate) { + case 0: + // 003 bser1 + m_ssw = m_base_ssw | (m_sr & SR_S ? SSW_S : 0); + m_at = m_aob; + m_ftu = m_sr; + m_au = m_pc; + m_icount -= 2; + // 3a7 bser2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3ca bser3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0a2 bser4 + m_aob = m_au; + m_dbout = m_aluo; + m_ftu = m_ird; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3c6 bser5 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 088 bser6 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_pc = m_at; + m_ftu = (m_ftu & ~0x1f) | m_ssw; + m_au = m_au - 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x02); + m_da[16] = m_au; + m_ftu = 0x0008; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 33: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 41: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::state_address_error_dp8() +{ + switch(m_inst_substate) { + case 0: + // 003 bser1 + m_ssw = m_base_ssw | (m_sr & SR_S ? SSW_S : 0); + m_at = m_aob; + m_ftu = m_sr; + m_au = m_pc; + m_icount -= 2; + // 3a7 bser2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3ca bser3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0a2 bser4 + m_aob = m_au; + m_dbout = m_aluo; + m_ftu = m_ird; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3c6 bser5 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 088 bser6 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_pc = m_at; + m_ftu = (m_ftu & ~0x1f) | m_ssw; + m_au = m_au - 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x03); + m_da[16] = m_au; + m_ftu = 0x000c; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 33: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 41: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::state_double_fault_dp8() +{ + switch(m_inst_substate) { + case 0: + // 001 halt1 + m_icount = 0; + } +} + +void m68008_device::state_interrupt_dp8() +{ + switch(m_inst_substate) { + case 0: + // 1c4 itlx1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 234 itlx2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_alub = m_ftu; + m_pc = m_au; + m_sr = (m_sr & ~SR_I) | ((m_next_state >> 16) & SR_I); + update_interrupt(); + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_icount -= 2; + // 235 itlx3 + m_ftu = 0xfff1 | ((m_next_state >> 23) & 0xe); + m_au = m_da[16] - 2; + m_icount -= 2; + // 0eb itlx4 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 236 itlx5 + m_aob = m_at; + m_base_ssw = SSW_CPU | SSW_R | SSW_N; + start_interrupt_vector_lookup(); + [[fallthrough]]; case 5: + m_edb = m_cpu_space8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + end_interrupt_vector_lookup(); + m_irc = m_edb; + // 118 itlx6 + m_ir = m_irc; + m_icount -= 2; + // 292 itlx7 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook((m_int_vector) >> 2); + m_da[16] = m_au; + m_ftu = m_int_vector; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 15: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 19: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + [[fallthrough]]; case 21: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 23: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + [[fallthrough]]; case 25: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 27: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + [[fallthrough]]; case 29: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::state_trace_dp8() +{ + switch(m_inst_substate) { + case 0: + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x09); + m_da[16] = m_au; + m_ftu = 0x0024; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::state_illegal_dp8() +{ + switch(m_inst_substate) { + case 0: + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x04); + m_da[16] = m_au; + m_ftu = 0x0010; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::state_priviledge_dp8() +{ + switch(m_inst_substate) { + case 0: + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x08); + m_da[16] = m_au; + m_ftu = 0x0020; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::state_linea_dp8() +{ + switch(m_inst_substate) { + case 0: + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x0a); + m_da[16] = m_au; + m_ftu = 0x0028; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::state_linef_dp8() +{ + switch(m_inst_substate) { + case 0: + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x0b); + m_da[16] = m_au; + m_ftu = 0x002c; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_b_imm8_ds_dp8() // 0000 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or8(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_b_imm8_ais_dp8() // 0010 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_b_imm8_aips_dp8() // 0018 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_b_imm8_pais_dp8() // 0020 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_b_imm8_das_dp8() // 0028 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_b_imm8_dais_dp8() // 0030 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_b_imm8_adr16_dp8() // 0038 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_b_imm8_adr32_dp8() // 0039 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_imm8_ccr_dp8() // 003c ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dtl:m_dt + alu_or8(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_w_imm16_ds_dp8() // 0040 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_w_imm16_ais_dp8() // 0050 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_w_imm16_aips_dp8() // 0058 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_w_imm16_pais_dp8() // 0060 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_w_imm16_das_dp8() // 0068 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_w_imm16_dais_dp8() // 0070 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_w_imm16_adr16_dp8() // 0078 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_w_imm16_adr32_dp8() // 0079 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_i16u_sr_dp8() // 007c ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=14 c=2 m=..... i=....... ALU.or_ a=R.ftu:m_ftu d=R.dtl:m_dt + alu_or(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_l_imm32_ds_dp8() // 0080 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or(m_dt, m_da[ry]); + sr_nzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=18:m_da[ry] + alu_or(high16(m_dt), high16(m_da[ry])); + sr_nzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_l_imm32_ais_dp8() // 0090 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_l_imm32_aips_dp8() // 0098 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_l_imm32_pais_dp8() // 00a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_l_imm32_das_dp8() // 00a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_l_imm32_dais_dp8() // 00b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_l_imm32_adr16_dp8() // 00b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_l_imm32_adr32_dp8() // 00b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 33: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_ds_dp8() // 0100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3e7 btsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor(m_da[rx], m_da[ry]); + // 0e7 btsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto btsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +btsr3: + // 044 btsr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_and(high16(m_da[ry]), 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movep_w_das_dd_dp8() // 0108 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1d2 mpiw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 29a mpiw2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + set_8h(m_dbin, m_edb); + // 368 mpiw3 + m_aob = m_au; + m_ir = m_irc; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_8(m_dbin, m_edb); + // 36a mpiw4 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_ais_dp8() // 0110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_aips_dp8() // 0118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_pais_dp8() // 0120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_das_dp8() // 0128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_dais_dp8() // 0130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_adr16_dp8() // 0138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_adr32_dp8() // 0139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_dpc_dp8() // 013a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_dpci_dp8() // 013b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_imm_dp8() // 013c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0ab btsi1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16h(m_dt, high16(m_at)); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + // 0e7 btsr2 + m_t = m_dcr & 0x10; + m_alub = m_dt; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto btsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_dt, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +btsr3: + // 044 btsr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=23:m_dt d=R.dcro8:m_dcro8 + alu_and8(high16(m_dt), 1 << (m_dcr & 7)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_dd_ds_dp8() // 0140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3ef bcsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor(m_da[rx], m_da[ry]); + // 06a bcsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=13 c=2 m=..... i=....... ALU.eor a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_eor(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bcsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bcsr3: + // 084 bcsr3 + m_alub = high16(m_da[ry]); + // alu r=13 c=2 m=..... i=....... ALU.eor a=18:m_da[ry] d=R.dcro:m_dcro + alu_eor(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movep_l_das_dd_dp8() // 0148 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1d6 mpil1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 29e mpil2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + set_8h(m_dbin, m_edb); + // 34e mpil3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_8(m_dbin, m_edb); + // 34f mpil4 + m_aob = m_au; + set_16h(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + set_8h(m_dbin, m_edb); + // 368 mpiw3 + m_aob = m_au; + m_ir = m_irc; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_8(m_dbin, m_edb); + // 36a mpiw4 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_dd_ais_dp8() // 0150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_dd_aips_dp8() // 0158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_dd_pais_dp8() // 0160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_dd_das_dp8() // 0168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_dd_dais_dp8() // 0170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_dd_adr16_dp8() // 0178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_dd_adr32_dp8() // 0179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_dd_ds_dp8() // 0180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3eb bclr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_or(m_da[rx], m_da[ry]); + // 06e bclr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=14 c=2 m=..... i=.l..... ALU.or_ a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_or(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bclr3; + else + goto bclr4; +bclr4: + // 0cc bclr4 + // alu r=14 c=4 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=R.dcro:m_dcro + alu_eor(m_aluo, 1 << (m_dcr & 15)); + m_icount -= 2; + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.l...i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bclr3: + // 08c bclr3 + m_alub = high16(m_da[ry]); + // alu r=14 c=2 m=..... i=.l..... ALU.or_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_or(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0c8 bclr5 + // alu r=14 c=4 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=R.dcro:m_dcro + alu_eor(m_aluo, 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.l...i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movep_w_dd_das_dp8() // 0188 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1ca mpow1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 36d mpow2 + m_aob = m_au; + m_ir = m_irc; + set_8xh(m_dbout, m_da[rx]); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dxl:m_da[rx] + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + // 36e mpow3 + m_aob = m_au; + set_8xl(m_dbout, m_da[rx]); + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_dd_ais_dp8() // 0190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_dd_aips_dp8() // 0198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_dd_pais_dp8() // 01a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_dd_das_dp8() // 01a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_dd_dais_dp8() // 01b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_dd_adr16_dp8() // 01b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_dd_adr32_dp8() // 01b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_dd_ds_dp8() // 01c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3ef bcsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_or(m_da[rx], m_da[ry]); + // 06a bcsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=14 c=2 m=..... i=....... ALU.or_ a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_or(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bcsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bcsr3: + // 084 bcsr3 + m_alub = high16(m_da[ry]); + // alu r=14 c=2 m=..... i=....... ALU.or_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_or(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movep_l_dd_das_dp8() // 01c8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1ce mpol1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 36b mpol2 + m_aob = m_au; + set_8xh(m_dbout, high16(m_da[rx])); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=16:m_da[rx] d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + // 36c mpol3 + m_aob = m_au; + set_8xl(m_dbout, high16(m_da[rx])); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=16:m_da[rx] d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 36d mpow2 + m_aob = m_au; + m_ir = m_irc; + set_8xh(m_dbout, m_da[rx]); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dxl:m_da[rx] + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + // 36e mpow3 + m_aob = m_au; + set_8xl(m_dbout, m_da[rx]); + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_dd_ais_dp8() // 01d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_dd_aips_dp8() // 01d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_dd_pais_dp8() // 01e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_dd_das_dp8() // 01e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_dd_dais_dp8() // 01f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_dd_adr16_dp8() // 01f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_dd_adr32_dp8() // 01f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_b_imm8_ds_dp8() // 0200 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_and8(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_b_imm8_ais_dp8() // 0210 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_b_imm8_aips_dp8() // 0218 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_b_imm8_pais_dp8() // 0220 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_b_imm8_das_dp8() // 0228 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_b_imm8_dais_dp8() // 0230 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_b_imm8_adr16_dp8() // 0238 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_b_imm8_adr32_dp8() // 0239 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_imm8_ccr_dp8() // 023c ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=4 c=2 m=..... i=b...... ALU.and_ a=R.ftu:m_ftu d=R.dtl:m_dt + alu_and8(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_w_imm16_ds_dp8() // 0240 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_and(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_w_imm16_ais_dp8() // 0250 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_w_imm16_aips_dp8() // 0258 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_w_imm16_pais_dp8() // 0260 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_w_imm16_das_dp8() // 0268 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_w_imm16_dais_dp8() // 0270 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_w_imm16_adr16_dp8() // 0278 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_w_imm16_adr32_dp8() // 0279 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_i16u_sr_dp8() // 027c ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=4 c=2 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=R.dtl:m_dt + alu_and(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_l_imm32_ds_dp8() // 0280 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_and(m_dt, m_da[ry]); + sr_nzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=18:m_da[ry] + alu_and(high16(m_dt), high16(m_da[ry])); + sr_nzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_l_imm32_ais_dp8() // 0290 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_l_imm32_aips_dp8() // 0298 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_l_imm32_pais_dp8() // 02a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_l_imm32_das_dp8() // 02a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_l_imm32_dais_dp8() // 02b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_l_imm32_adr16_dp8() // 02b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_l_imm32_adr32_dp8() // 02b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 33: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_b_imm8_ds_dp8() // 0400 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub8(m_dt, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_b_imm8_ais_dp8() // 0410 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_b_imm8_aips_dp8() // 0418 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_b_imm8_pais_dp8() // 0420 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_b_imm8_das_dp8() // 0428 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_b_imm8_dais_dp8() // 0430 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_b_imm8_adr16_dp8() // 0438 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_b_imm8_adr32_dp8() // 0439 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_w_imm16_ds_dp8() // 0440 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub(m_dt, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_w_imm16_ais_dp8() // 0450 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_w_imm16_aips_dp8() // 0458 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_w_imm16_pais_dp8() // 0460 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_w_imm16_das_dp8() // 0468 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_w_imm16_dais_dp8() // 0470 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_w_imm16_adr16_dp8() // 0478 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_w_imm16_adr32_dp8() // 0479 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_l_imm32_ds_dp8() // 0480 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub(m_dt, m_da[ry]); + sr_xnzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=18:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + sr_xnzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_l_imm32_ais_dp8() // 0490 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_l_imm32_aips_dp8() // 0498 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_l_imm32_pais_dp8() // 04a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_l_imm32_das_dp8() // 04a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_l_imm32_dais_dp8() // 04b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_l_imm32_adr16_dp8() // 04b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_l_imm32_adr32_dp8() // 04b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 33: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_b_imm8_ds_dp8() // 0600 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_add8(m_dt, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_b_imm8_ais_dp8() // 0610 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_b_imm8_aips_dp8() // 0618 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_b_imm8_pais_dp8() // 0620 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_b_imm8_das_dp8() // 0628 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_b_imm8_dais_dp8() // 0630 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_b_imm8_adr16_dp8() // 0638 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_b_imm8_adr32_dp8() // 0639 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_w_imm16_ds_dp8() // 0640 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_add(m_dt, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_w_imm16_ais_dp8() // 0650 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_w_imm16_aips_dp8() // 0658 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_w_imm16_pais_dp8() // 0660 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_w_imm16_das_dp8() // 0668 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_w_imm16_dais_dp8() // 0670 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_w_imm16_adr16_dp8() // 0678 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_w_imm16_adr32_dp8() // 0679 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_l_imm32_ds_dp8() // 0680 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_add(m_dt, m_da[ry]); + sr_xnzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=18:m_da[ry] + alu_addc(high16(m_dt), high16(m_da[ry])); + sr_xnzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_l_imm32_ais_dp8() // 0690 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_l_imm32_aips_dp8() // 0698 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_l_imm32_pais_dp8() // 06a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_l_imm32_das_dp8() // 06a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_l_imm32_dais_dp8() // 06b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_l_imm32_adr16_dp8() // 06b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_l_imm32_adr32_dp8() // 06b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 33: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_ds_dp8() // 0800 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3e7 btsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_dt; + m_at = m_dt; + m_au = m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor(m_dt, m_da[ry]); + // 0e7 btsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto btsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +btsr3: + // 044 btsr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_and(high16(m_da[ry]), 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_ais_dp8() // 0810 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_aips_dp8() // 0818 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_pais_dp8() // 0820 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_das_dp8() // 0828 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_dais_dp8() // 0830 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_adr16_dp8() // 0838 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_adr32_dp8() // 0839 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_dpc_dp8() // 083a ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_dpci_dp8() // 083b ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_imm8_ds_dp8() // 0840 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3ef bcsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_dt; + m_at = m_dt; + m_au = m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor(m_dt, m_da[ry]); + // 06a bcsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=13 c=2 m=..... i=....... ALU.eor a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_eor(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bcsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bcsr3: + // 084 bcsr3 + m_alub = high16(m_da[ry]); + // alu r=13 c=2 m=..... i=....... ALU.eor a=18:m_da[ry] d=R.dcro:m_dcro + alu_eor(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_imm8_ais_dp8() // 0850 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_imm8_aips_dp8() // 0858 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_imm8_pais_dp8() // 0860 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_imm8_das_dp8() // 0868 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_imm8_dais_dp8() // 0870 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_imm8_adr16_dp8() // 0878 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_imm8_adr32_dp8() // 0879 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_imm8_ds_dp8() // 0880 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3eb bclr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_dt; + m_at = m_dt; + m_au = m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or(m_dt, m_da[ry]); + // 06e bclr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=14 c=2 m=..... i=.l..... ALU.or_ a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_or(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bclr3; + else + goto bclr4; +bclr4: + // 0cc bclr4 + // alu r=14 c=4 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=R.dcro:m_dcro + alu_eor(m_aluo, 1 << (m_dcr & 15)); + m_icount -= 2; + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.l...i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bclr3: + // 08c bclr3 + m_alub = high16(m_da[ry]); + // alu r=14 c=2 m=..... i=.l..... ALU.or_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_or(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0c8 bclr5 + // alu r=14 c=4 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=R.dcro:m_dcro + alu_eor(m_aluo, 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.l...i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_imm8_ais_dp8() // 0890 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_imm8_aips_dp8() // 0898 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_imm8_pais_dp8() // 08a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_imm8_das_dp8() // 08a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_imm8_dais_dp8() // 08b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_imm8_adr16_dp8() // 08b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_imm8_adr32_dp8() // 08b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_imm8_ds_dp8() // 08c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3ef bcsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_dt; + m_at = m_dt; + m_au = m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or(m_dt, m_da[ry]); + // 06a bcsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=14 c=2 m=..... i=....... ALU.or_ a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_or(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bcsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bcsr3: + // 084 bcsr3 + m_alub = high16(m_da[ry]); + // alu r=14 c=2 m=..... i=....... ALU.or_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_or(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_imm8_ais_dp8() // 08d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_imm8_aips_dp8() // 08d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_imm8_pais_dp8() // 08e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_imm8_das_dp8() // 08e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_imm8_dais_dp8() // 08f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_imm8_adr16_dp8() // 08f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_imm8_adr32_dp8() // 08f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_b_imm8_ds_dp8() // 0a00 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor8(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_b_imm8_ais_dp8() // 0a10 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_b_imm8_aips_dp8() // 0a18 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_b_imm8_pais_dp8() // 0a20 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_b_imm8_das_dp8() // 0a28 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_b_imm8_dais_dp8() // 0a30 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_b_imm8_adr16_dp8() // 0a38 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_b_imm8_adr32_dp8() // 0a39 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_imm8_ccr_dp8() // 0a3c ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.ftu:m_ftu d=R.dtl:m_dt + alu_eor8(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_w_imm16_ds_dp8() // 0a40 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_w_imm16_ais_dp8() // 0a50 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_w_imm16_aips_dp8() // 0a58 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_w_imm16_pais_dp8() // 0a60 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_w_imm16_das_dp8() // 0a68 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_w_imm16_dais_dp8() // 0a70 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_w_imm16_adr16_dp8() // 0a78 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_w_imm16_adr32_dp8() // 0a79 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_i16u_sr_dp8() // 0a7c ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=13 c=2 m=..... i=....... ALU.eor a=R.ftu:m_ftu d=R.dtl:m_dt + alu_eor(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_l_imm32_ds_dp8() // 0a80 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor(m_dt, m_da[ry]); + sr_nzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=18:m_da[ry] + alu_eor(high16(m_dt), high16(m_da[ry])); + sr_nzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_l_imm32_ais_dp8() // 0a90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_l_imm32_aips_dp8() // 0a98 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_l_imm32_pais_dp8() // 0aa0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_l_imm32_das_dp8() // 0aa8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_l_imm32_dais_dp8() // 0ab0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=13 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_l_imm32_adr16_dp8() // 0ab8 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_l_imm32_adr32_dp8() // 0ab9 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 33: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_b_imm8_ds_dp8() // 0c00 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 108 rcaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub8(m_dt, m_da[ry]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_b_imm8_ais_dp8() // 0c10 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_b_imm8_aips_dp8() // 0c18 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_b_imm8_pais_dp8() // 0c20 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_b_imm8_das_dp8() // 0c28 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_b_imm8_dais_dp8() // 0c30 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_b_imm8_adr16_dp8() // 0c38 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_b_imm8_adr32_dp8() // 0c39 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_w_imm16_ds_dp8() // 0c40 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 108 rcaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub(m_dt, m_da[ry]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_w_imm16_ais_dp8() // 0c50 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_w_imm16_aips_dp8() // 0c58 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_w_imm16_pais_dp8() // 0c60 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_w_imm16_das_dp8() // 0c68 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_w_imm16_dais_dp8() // 0c70 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_w_imm16_adr16_dp8() // 0c78 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_w_imm16_adr32_dp8() // 0c79 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_l_imm32_ds_dp8() // 0c80 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + if(!m_cmpild_instr_callback.isnull()) (m_cmpild_instr_callback)(ry, (m_dt & 0xffff0000) | m_dbin); + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 104 rcal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub(m_dt, m_da[ry]); + sr_nzvc(); + // 239 rcal2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=18:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_l_imm32_ais_dp8() // 0c90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_l_imm32_aips_dp8() // 0c98 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_l_imm32_pais_dp8() // 0ca0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_l_imm32_das_dp8() // 0ca8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_l_imm32_dais_dp8() // 0cb0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_l_imm32_adr16_dp8() // 0cb8 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_l_imm32_adr32_dp8() // 0cb9 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ds_dd_dp8() // 1000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ais_dd_dp8() // 1010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_aips_dd_dp8() // 1018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_pais_dd_dp8() // 1020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_das_dd_dp8() // 1028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dais_dd_dp8() // 1030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr16_dd_dp8() // 1038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr32_dd_dp8() // 1039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpc_dd_dp8() // 103a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpci_dd_dp8() // 103b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_imm8_dd_dp8() // 103c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ds_aid_dp8() // 1080 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ais_aid_dp8() // 1090 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_aips_aid_dp8() // 1098 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_pais_aid_dp8() // 10a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_das_aid_dp8() // 10a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dais_aid_dp8() // 10b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr16_aid_dp8() // 10b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr32_aid_dp8() // 10b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpc_aid_dp8() // 10ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpci_aid_dp8() // 10bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_imm8_aid_dp8() // 10bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dt); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ds_aipd_dp8() // 10c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ais_aipd_dp8() // 10d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_aips_aipd_dp8() // 10d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_pais_aipd_dp8() // 10e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_das_aipd_dp8() // 10e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dais_aipd_dp8() // 10f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr16_aipd_dp8() // 10f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr32_aipd_dp8() // 10f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpc_aipd_dp8() // 10fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpci_aipd_dp8() // 10fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_imm8_aipd_dp8() // 10fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dt); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ds_paid_dp8() // 1100 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ais_paid_dp8() // 1110 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_aips_paid_dp8() // 1118 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_pais_paid_dp8() // 1120 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_das_paid_dp8() // 1128 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dais_paid_dp8() // 1130 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr16_paid_dp8() // 1138 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr32_paid_dp8() // 1139 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpc_paid_dp8() // 113a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpci_paid_dp8() // 113b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_imm8_paid_dp8() // 113c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ds_dad_dp8() // 1140 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + set_8xl(m_dbout, m_da[ry]); + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ais_dad_dp8() // 1150 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_aips_dad_dp8() // 1158 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_pais_dad_dp8() // 1160 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_das_dad_dp8() // 1168 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dais_dad_dp8() // 1170 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr16_dad_dp8() // 1178 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr32_dad_dp8() // 1179 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpc_dad_dp8() // 117a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpci_dad_dp8() // 117b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_imm8_dad_dp8() // 117c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + set_8xl(m_dbout, m_dt); + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ds_daid_dp8() // 1180 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + set_8xl(m_dbout, m_da[ry]); + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ais_daid_dp8() // 1190 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_aips_daid_dp8() // 1198 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_pais_daid_dp8() // 11a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_das_daid_dp8() // 11a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dais_daid_dp8() // 11b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr16_daid_dp8() // 11b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr32_daid_dp8() // 11b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpc_daid_dp8() // 11ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpci_daid_dp8() // 11bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_imm8_daid_dp8() // 11bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + set_8xl(m_dbout, m_dt); + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ds_adr16_dp8() // 11c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ais_adr16_dp8() // 11d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_aips_adr16_dp8() // 11d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_pais_adr16_dp8() // 11e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_das_adr16_dp8() // 11e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dais_adr16_dp8() // 11f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr16_adr16_dp8() // 11f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr32_adr16_dp8() // 11f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpc_adr16_dp8() // 11fa ffff +{ + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpci_adr16_dp8() // 11fb ffff +{ + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_imm8_adr16_dp8() // 11fc ffff +{ + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ds_adr32_dp8() // 13c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ais_adr32_dp8() // 13d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_aips_adr32_dp8() // 13d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_pais_adr32_dp8() // 13e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_das_adr32_dp8() // 13e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dais_adr32_dp8() // 13f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr16_adr32_dp8() // 13f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr32_adr32_dp8() // 13f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpc_adr32_dp8() // 13fa ffff +{ + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpci_adr32_dp8() // 13fb ffff +{ + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_imm8_adr32_dp8() // 13fc ffff +{ + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ds_dd_dp8() // 2000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_da[rx] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_as_dd_dp8() // 2008 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ais_dd_dp8() // 2010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_aips_dd_dp8() // 2018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_pais_dd_dp8() // 2020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_das_dd_dp8() // 2028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dais_dd_dp8() // 2030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr16_dd_dp8() // 2038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr32_dd_dp8() // 2039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpc_dd_dp8() // 203a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpci_dd_dp8() // 203b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_imm32_dd_dp8() // 203c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_ds_ad_dp8() // 2040 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_as_ad_dp8() // 2048 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + m_da[rx] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_ais_ad_dp8() // 2050 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_aips_ad_dp8() // 2058 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_pais_ad_dp8() // 2060 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_das_ad_dp8() // 2068 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_dais_ad_dp8() // 2070 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_adr16_ad_dp8() // 2078 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_adr32_ad_dp8() // 2079 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_dpc_ad_dp8() // 207a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_dpci_ad_dp8() // 207b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_imm32_ad_dp8() // 207c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ds_aid_dp8() // 2080 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2f9 rmrl1 + m_aob = m_da[rx]; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23f rmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_as_aid_dp8() // 2088 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2f9 rmrl1 + m_aob = m_da[rx]; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23f rmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ais_aid_dp8() // 2090 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_aips_aid_dp8() // 2098 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_pais_aid_dp8() // 20a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_das_aid_dp8() // 20a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dais_aid_dp8() // 20b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr16_aid_dp8() // 20b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr32_aid_dp8() // 20b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpc_aid_dp8() // 20ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpci_aid_dp8() // 20bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_imm32_aid_dp8() // 20bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f9 rmrl1 + m_aob = m_da[rx]; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23f rmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ds_aipd_dp8() // 20c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2fd rmil1 + m_aob = m_da[rx]; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23c rmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23d rmil3 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_as_aipd_dp8() // 20c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2fd rmil1 + m_aob = m_da[rx]; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23c rmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23d rmil3 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ais_aipd_dp8() // 20d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_aips_aipd_dp8() // 20d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_pais_aipd_dp8() // 20e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_das_aipd_dp8() // 20e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dais_aipd_dp8() // 20f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr16_aipd_dp8() // 20f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr32_aipd_dp8() // 20f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpc_aipd_dp8() // 20fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpci_aipd_dp8() // 20fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_imm32_aipd_dp8() // 20fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fd rmil1 + m_aob = m_da[rx]; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23c rmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23d rmil3 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ds_paid_dp8() // 2100 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2fc rmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 23e rmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_as_paid_dp8() // 2108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2fc rmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 23e rmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ais_paid_dp8() // 2110 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_aips_paid_dp8() // 2118 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_pais_paid_dp8() // 2120 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_das_paid_dp8() // 2128 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dais_paid_dp8() // 2130 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr16_paid_dp8() // 2138 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr32_paid_dp8() // 2139 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpc_paid_dp8() // 213a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpci_paid_dp8() // 213b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_imm32_paid_dp8() // 213c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fc rmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 23e rmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ds_dad_dp8() // 2140 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2de rmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_as_dad_dp8() // 2148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2de rmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ais_dad_dp8() // 2150 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_aips_dad_dp8() // 2158 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_pais_dad_dp8() // 2160 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_das_dad_dp8() // 2168 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dais_dad_dp8() // 2170 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr16_dad_dp8() // 2178 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr32_dad_dp8() // 2179 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpc_dad_dp8() // 217a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpci_dad_dp8() // 217b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_imm32_dad_dp8() // 217c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2de rmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ds_daid_dp8() // 2180 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1ef rmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 105 rmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxl3; + else + goto rmxl2; +rmxl2: + // 12c rmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmxl3: + // 1ec rmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmdl2: + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_as_daid_dp8() // 2188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1ef rmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 105 rmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxl3; + else + goto rmxl2; +rmxl2: + // 12c rmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmxl3: + // 1ec rmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmdl2: + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ais_daid_dp8() // 2190 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_aips_daid_dp8() // 2198 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_pais_daid_dp8() // 21a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_das_daid_dp8() // 21a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dais_daid_dp8() // 21b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr16_daid_dp8() // 21b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr32_daid_dp8() // 21b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpc_daid_dp8() // 21ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpci_daid_dp8() // 21bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_imm32_daid_dp8() // 21bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1ef rmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 105 rmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxl3; + else + goto rmxl2; +rmxl2: + // 12c rmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmxl3: + // 1ec rmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmdl2: + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ds_adr16_dp8() // 21c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2dd rawl1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_as_adr16_dp8() // 21c8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2dd rawl1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ais_adr16_dp8() // 21d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_aips_adr16_dp8() // 21d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_pais_adr16_dp8() // 21e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_das_adr16_dp8() // 21e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dais_adr16_dp8() // 21f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr16_adr16_dp8() // 21f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr32_adr16_dp8() // 21f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpc_adr16_dp8() // 21fa ffff +{ + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpci_adr16_dp8() // 21fb ffff +{ + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_imm32_adr16_dp8() // 21fc ffff +{ + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2dd rawl1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ds_adr32_dp8() // 23c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1ee rall1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bf rall2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_as_adr32_dp8() // 23c8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1ee rall1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bf rall2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ais_adr32_dp8() // 23d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_aips_adr32_dp8() // 23d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_pais_adr32_dp8() // 23e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_das_adr32_dp8() // 23e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dais_adr32_dp8() // 23f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr16_adr32_dp8() // 23f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr32_adr32_dp8() // 23f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpc_adr32_dp8() // 23fa ffff +{ + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpci_adr32_dp8() // 23fb ffff +{ + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_imm32_adr32_dp8() // 23fc ffff +{ + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1ee rall1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bf rall2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ds_dd_dp8() // 3000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_as_dd_dp8() // 3008 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ais_dd_dp8() // 3010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_aips_dd_dp8() // 3018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_pais_dd_dp8() // 3020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_das_dd_dp8() // 3028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dais_dd_dp8() // 3030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr16_dd_dp8() // 3038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr32_dd_dp8() // 3039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpc_dd_dp8() // 303a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpci_dd_dp8() // 303b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_imm16_dd_dp8() // 303c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_ds_ad_dp8() // 3040 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 279 rrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + m_au = m_au + 2; + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_as_ad_dp8() // 3048 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 279 rrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + m_au = m_au + 2; + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + m_da[rx] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_ais_ad_dp8() // 3050 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_aips_ad_dp8() // 3058 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_pais_ad_dp8() // 3060 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_das_ad_dp8() // 3068 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_dais_ad_dp8() // 3070 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_adr16_ad_dp8() // 3078 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_adr32_ad_dp8() // 3079 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_dpc_ad_dp8() // 307a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_dpci_ad_dp8() // 307b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_imm16_ad_dp8() // 307c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 279 rrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + m_au = m_au + 2; + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ds_aid_dp8() // 3080 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_as_aid_dp8() // 3088 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ais_aid_dp8() // 3090 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_aips_aid_dp8() // 3098 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_pais_aid_dp8() // 30a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_das_aid_dp8() // 30a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dais_aid_dp8() // 30b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr16_aid_dp8() // 30b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr32_aid_dp8() // 30b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpc_aid_dp8() // 30ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpci_aid_dp8() // 30bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_imm16_aid_dp8() // 30bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dt; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ds_aipd_dp8() // 30c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_as_aipd_dp8() // 30c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ais_aipd_dp8() // 30d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_aips_aipd_dp8() // 30d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_pais_aipd_dp8() // 30e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_das_aipd_dp8() // 30e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dais_aipd_dp8() // 30f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr16_aipd_dp8() // 30f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr32_aipd_dp8() // 30f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpc_aipd_dp8() // 30fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpci_aipd_dp8() // 30fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_imm16_aipd_dp8() // 30fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dt; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ds_paid_dp8() // 3100 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_as_paid_dp8() // 3108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ais_paid_dp8() // 3110 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_aips_paid_dp8() // 3118 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_pais_paid_dp8() // 3120 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_das_paid_dp8() // 3128 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dais_paid_dp8() // 3130 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr16_paid_dp8() // 3138 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr32_paid_dp8() // 3139 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpc_paid_dp8() // 313a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpci_paid_dp8() // 313b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_imm16_paid_dp8() // 313c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ds_dad_dp8() // 3140 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_as_dad_dp8() // 3148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ais_dad_dp8() // 3150 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_aips_dad_dp8() // 3158 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_pais_dad_dp8() // 3160 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_das_dad_dp8() // 3168 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dais_dad_dp8() // 3170 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr16_dad_dp8() // 3178 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr32_dad_dp8() // 3179 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpc_dad_dp8() // 317a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpci_dad_dp8() // 317b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_imm16_dad_dp8() // 317c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ds_daid_dp8() // 3180 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_as_daid_dp8() // 3188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ais_daid_dp8() // 3190 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_aips_daid_dp8() // 3198 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_pais_daid_dp8() // 31a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_das_daid_dp8() // 31a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dais_daid_dp8() // 31b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr16_daid_dp8() // 31b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr32_daid_dp8() // 31b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpc_daid_dp8() // 31ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpci_daid_dp8() // 31bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_imm16_daid_dp8() // 31bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ds_adr16_dp8() // 31c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_as_adr16_dp8() // 31c8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ais_adr16_dp8() // 31d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_aips_adr16_dp8() // 31d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_pais_adr16_dp8() // 31e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_das_adr16_dp8() // 31e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dais_adr16_dp8() // 31f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr16_adr16_dp8() // 31f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr32_adr16_dp8() // 31f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpc_adr16_dp8() // 31fa ffff +{ + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpci_adr16_dp8() // 31fb ffff +{ + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_imm16_adr16_dp8() // 31fc ffff +{ + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ds_adr32_dp8() // 33c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_as_adr32_dp8() // 33c8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ais_adr32_dp8() // 33d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_aips_adr32_dp8() // 33d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_pais_adr32_dp8() // 33e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_das_adr32_dp8() // 33e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dais_adr32_dp8() // 33f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr16_adr32_dp8() // 33f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr32_adr32_dp8() // 33f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpc_adr32_dp8() // 33fa ffff +{ + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpci_adr32_dp8() // 33fb ffff +{ + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_imm16_adr32_dp8() // 33fc ffff +{ + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_b_ds_dp8() // 4000 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dyl:m_da[ry] d=0 + alu_subx8(m_da[ry], 0x0000); + sr_xnzvc_u(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_b_ais_dp8() // 4010 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_b_aips_dp8() // 4018 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_b_pais_dp8() // 4020 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_b_das_dp8() // 4028 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_b_dais_dp8() // 4030 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=10 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_b_adr16_dp8() // 4038 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_b_adr32_dp8() // 4039 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_w_ds_dp8() // 4040 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dyl:m_da[ry] d=0 + alu_subx(m_da[ry], 0x0000); + sr_xnzvc_u(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_w_ais_dp8() // 4050 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_w_aips_dp8() // 4058 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_w_pais_dp8() // 4060 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_w_das_dp8() // 4068 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_w_dais_dp8() // 4070 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=10 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_w_adr16_dp8() // 4078 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_w_adr32_dp8() // 4079 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_l_ds_dp8() // 4080 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 137 nnrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dyl:m_da[ry] d=0 + alu_subx(m_da[ry], 0x0000); + sr_xnzvc_u(); + // 15e nnrl2 + set_16l(m_da[ry], m_aluo); + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=18:m_da[ry] d=0 + alu_subc(high16(m_da[ry]), 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_l_ais_dp8() // 4090 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_l_aips_dp8() // 4098 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_l_pais_dp8() // 40a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_l_das_dp8() // 40a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_l_dais_dp8() // 40b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=10 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_l_adr16_dp8() // 40b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_l_adr32_dp8() // 40b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_sr_ds_dp8() // 40c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3a5 strw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 340 strw2 + set_16l(m_da[ry], m_ftu); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_sr_ais_dp8() // 40d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_sr_aips_dp8() // 40d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_sr_pais_dp8() // 40e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_sr_das_dp8() // 40e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_sr_dais_dp8() // 40f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=10 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_sr_adr16_dp8() // 40f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_sr_adr32_dp8() // 40f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::chk_w_ds_dd_dp8() // 4180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 152 chkr1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_sub(m_da[rx], m_da[ry]); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_ais_dd_dp8() // 4190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_aips_dd_dp8() // 4198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_pais_dd_dp8() // 41a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_das_dd_dp8() // 41a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_dais_dd_dp8() // 41b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_adr16_dd_dp8() // 41b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_adr32_dd_dp8() // 41b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_dpc_dd_dp8() // 41ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_dpci_dd_dp8() // 41bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_imm16_dd_dp8() // 41bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 152 chkr1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dtl:m_dt + alu_sub(m_da[rx], m_dt); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::lea_ais_ad_dp8() // 41d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2f1 leaa1 + m_aob = m_au; + m_ir = m_irc; + m_movemr = m_dbin; + m_pc = m_au; + m_at = m_da[ry]; + m_ftu = m_dbin; + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lea_das_ad_dp8() // 41e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2f2 lead1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // 309 lead2 + m_da[rx] = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lea_dais_ad_dp8() // 41f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1fb leax0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3ea leax1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto leax3; + else + goto leax2; +leax2: + // 130 leax2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto leax4; +leax3: + // 1f0 leax3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto leax4; +leax4: + // 30a leax4 + m_da[rx] = m_au; + m_au = m_pc + 4; + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lea_adr16_ad_dp8() // 41f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 275 laaw1 + m_aob = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lea_adr32_ad_dp8() // 41f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e4 laal1 + m_aob = m_au; + set_16h(m_da[rx], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bd laal2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lea_dpc_ad_dp8() // 41fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2f2 lead1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // 309 lead2 + m_da[rx] = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lea_dpci_ad_dp8() // 41fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1fb leax0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3ea leax1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto leax3; + else + goto leax2; +leax2: + // 130 leax2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto leax4; +leax3: + // 1f0 leax3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto leax4; +leax4: + // 30a leax4 + m_da[rx] = m_au; + m_au = m_pc + 4; + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_b_ds_dp8() // 4200 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=0 + alu_and8(m_da[ry], 0x0000); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_b_ais_dp8() // 4210 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_b_aips_dp8() // 4218 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and8(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_b_pais_dp8() // 4220 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and8(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_b_das_dp8() // 4228 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_b_dais_dp8() // 4230 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_b_adr16_dp8() // 4238 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_b_adr32_dp8() // 4239 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_w_ds_dp8() // 4240 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=0 + alu_and(m_da[ry], 0x0000); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_w_ais_dp8() // 4250 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_w_aips_dp8() // 4258 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_w_pais_dp8() // 4260 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_w_das_dp8() // 4268 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_w_dais_dp8() // 4270 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_w_adr16_dp8() // 4278 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_w_adr32_dp8() // 4279 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_l_ds_dp8() // 4280 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 137 nnrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=0 + alu_and(m_da[ry], 0x0000); + sr_nzvc(); + // 15e nnrl2 + set_16l(m_da[ry], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=18:m_da[ry] d=0 + alu_and(high16(m_da[ry]), 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_l_ais_dp8() // 4290 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_l_aips_dp8() // 4298 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_l_pais_dp8() // 42a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_l_das_dp8() // 42a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_l_dais_dp8() // 42b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_l_adr16_dp8() // 42b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_l_adr32_dp8() // 42b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_b_ds_dp8() // 4400 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dyl:m_da[ry] d=0 + alu_sub8(m_da[ry], 0x0000); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_b_ais_dp8() // 4410 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_b_aips_dp8() // 4418 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_b_pais_dp8() // 4420 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_b_das_dp8() // 4428 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_b_dais_dp8() // 4430 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_b_adr16_dp8() // 4438 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_b_adr32_dp8() // 4439 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_w_ds_dp8() // 4440 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=0 + alu_sub(m_da[ry], 0x0000); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_w_ais_dp8() // 4450 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_w_aips_dp8() // 4458 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_w_pais_dp8() // 4460 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_w_das_dp8() // 4468 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_w_dais_dp8() // 4470 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_w_adr16_dp8() // 4478 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_w_adr32_dp8() // 4479 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_l_ds_dp8() // 4480 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 137 nnrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dyl:m_da[ry] d=0 + alu_sub(m_da[ry], 0x0000); + sr_xnzvc(); + // 15e nnrl2 + set_16l(m_da[ry], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=18:m_da[ry] d=0 + alu_subc(high16(m_da[ry]), 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_l_ais_dp8() // 4490 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_l_aips_dp8() // 4498 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_l_pais_dp8() // 44a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_l_das_dp8() // 44a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_l_dais_dp8() // 44b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_l_adr16_dp8() // 44b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_l_adr32_dp8() // 44b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_ds_ccr_dp8() // 44c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 301 rstw1 + m_movemr = m_dbin; + m_ftu = m_da[ry]; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_ais_ccr_dp8() // 44d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_aips_ccr_dp8() // 44d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_pais_ccr_dp8() // 44e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_das_ccr_dp8() // 44e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_dais_ccr_dp8() // 44f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_adr16_ccr_dp8() // 44f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_adr32_ccr_dp8() // 44f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_dpc_ccr_dp8() // 44fa ffff +{ + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_dpci_ccr_dp8() // 44fb ffff +{ + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_imm8_ccr_dp8() // 44fc ffff +{ + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 301 rstw1 + m_movemr = m_dbin; + m_ftu = m_dt; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_b_ds_dp8() // 4600 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dyl:m_da[ry] d=0 + alu_not8(m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_b_ais_dp8() // 4610 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_b_aips_dp8() // 4618 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=alub d=-1 + alu_and8x(m_alub, 0xff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_b_pais_dp8() // 4620 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=alub d=-1 + alu_and8x(m_alub, 0xff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_b_das_dp8() // 4628 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_b_dais_dp8() // 4630 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_b_adr16_dp8() // 4638 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_b_adr32_dp8() // 4639 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_w_ds_dp8() // 4640 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dyl:m_da[ry] d=0 + alu_not(m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_w_ais_dp8() // 4650 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_w_aips_dp8() // 4658 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_w_pais_dp8() // 4660 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_w_das_dp8() // 4668 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_w_dais_dp8() // 4670 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_w_adr16_dp8() // 4678 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_w_adr32_dp8() // 4679 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_l_ds_dp8() // 4680 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 137 nnrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dyl:m_da[ry] d=0 + alu_not(m_da[ry]); + sr_nzvc(); + // 15e nnrl2 + set_16l(m_da[ry], m_aluo); + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=18:m_da[ry] d=0 + alu_not(high16(m_da[ry])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_l_ais_dp8() // 4690 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_l_aips_dp8() // 4698 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_l_pais_dp8() // 46a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_l_das_dp8() // 46a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_l_dais_dp8() // 46b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=11 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_l_adr16_dp8() // 46b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_l_adr32_dp8() // 46b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_ds_sr_dp8() // 46c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 301 rstw1 + m_movemr = m_dbin; + m_ftu = m_da[ry]; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_ais_sr_dp8() // 46d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_aips_sr_dp8() // 46d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_pais_sr_dp8() // 46e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_das_sr_dp8() // 46e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_dais_sr_dp8() // 46f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_adr16_sr_dp8() // 46f8 ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_adr32_sr_dp8() // 46f9 ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_dpc_sr_dp8() // 46fa ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_dpci_sr_dp8() // 46fb ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_i16u_sr_dp8() // 46fc ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 301 rstw1 + m_movemr = m_dbin; + m_ftu = m_dt; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nbcd_b_ds_dp8() // 4800 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 13b nbcr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dyl:m_da[ry] d=0 + alu_sbcd8(m_da[ry], 0x0000); + sr_xnzvc_u(); + // 117 nbcr2 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nbcd_b_ais_dp8() // 4810 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nbcd_b_aips_dp8() // 4818 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nbcd_b_pais_dp8() // 4820 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nbcd_b_das_dp8() // 4828 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nbcd_b_dais_dp8() // 4830 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=9 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nbcd_b_adr16_dp8() // 4838 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nbcd_b_adr32_dp8() // 4839 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::swap_ds_dp8() // 4840 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 341 swap1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[ry]; + m_pc = m_au; + set_16h(m_at, m_da[ry]); + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nzvc(); + // 342 swap2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[ry] = merge_16_32(high16(m_at), m_aluo); + m_au = m_au + 2; + // alu r=9 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::pea_ais_dp8() // 4850 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 17c peaa1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[m_sp] - 4; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::pea_das_dp8() // 4868 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 17d pead1 + m_aob = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 17e pead2 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_aluo) + m_at; + // 17f pead3 + m_at = m_au; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::pea_dais_dp8() // 4870 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1ff peax0 + // alu r=9 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3ee peax1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto peax3; + else + goto peax2; +peax2: + // 134 peax2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto peax4; +peax3: + // 1f4 peax3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto peax4; +peax4: + // 218 peax4 + m_ir = m_irc; + m_at = m_au; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_pc + 4; + m_icount -= 2; + // 219 peax5 + m_aob = m_au; + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::pea_adr16_dp8() // 4878 ffff +{ + switch(m_inst_substate) { + case 0: + // 178 paaw1 + m_aob = m_au; + m_pc = m_au; + m_at = ext32(m_dbin); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 10a paaw2 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::pea_adr32_dp8() // 4879 ffff +{ + switch(m_inst_substate) { + case 0: + // 1fa paal1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15f paal2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 10a paaw2 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::pea_dpc_dp8() // 487a ffff +{ + switch(m_inst_substate) { + case 0: + // 17d pead1 + m_aob = m_au; + m_at = m_pc; + m_au = m_au + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 17e pead2 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_aluo) + m_at; + // 17f pead3 + m_at = m_au; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::pea_dpci_dp8() // 487b ffff +{ + switch(m_inst_substate) { + case 0: + // 1ff peax0 + // alu r=9 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3ee peax1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto peax3; + else + goto peax2; +peax2: + // 134 peax2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto peax4; +peax3: + // 1f4 peax3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto peax4; +peax4: + // 218 peax4 + m_ir = m_irc; + m_at = m_au; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_pc + 4; + m_icount -= 2; + // 219 peax5 + m_aob = m_au; + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ext_w_ds_dp8() // 4880 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=2 m=.nzvc i=.l...i. ALU.ext a=R.dyl:m_da[ry] d=0 + alu_ext(m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_list_ais_dp8() // 4890 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3a0 stmr1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + // 323 stmr2 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_listp_pais_dp8() // 48a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3a4 push1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + // 21e push2 + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] - 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + step_movem_predec(); + if(m_t) + goto push3; + else + goto push5; +push5: + // 083 push5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_at = m_au; + m_au = m_au - 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem_predec(); + if(m_t) + goto push3; + else + goto push5; +push3: + // 043 push3 + m_aob = m_pc; + m_ir = m_irc; + m_da[ry] = m_at; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_list_das_dp8() // 48a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1f1 stmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c9 stmd2 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 322 stmd3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_da[ry] + ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_list_dais_dp8() // 48b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 325 stmx1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 326 stmx2 + m_pc = m_au; + set_16l(m_at, m_dbin); + m_au = m_au - 2; + // alu r=8 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02f stmx3 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto stmx5; + else + goto stmx4; +stmx4: + // 138 stmx4 + m_t = !m_movemr; + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmx5: + // 1f8 stmx5 + m_t = !m_movemr; + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_list_adr16_dp8() // 48b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 1ed smaw1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c1 smaw2 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 04b smaw3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_list_adr32_dp8() // 48b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e5 smal1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 112 smal2 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 305 smal3 + m_aob = m_au; + set_16l(m_at, m_dbin); + m_au = m_au + 2; + // 04b smaw3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ext_l_ds_dp8() // 48c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 232 extr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=8 c=3 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 233 extr2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[ry] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_list_ais_dp8() // 48d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3a0 stmr1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + // 323 stmr2 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_listp_pais_dp8() // 48e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3a4 push1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + // 21e push2 + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] - 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + step_movem_predec(); + if(m_t) + goto push3; + else + goto push4; +push4: + // 0c3 push4 + m_aob = m_au; + m_dbout = m_da[m_movems]; + m_at = m_au; + m_au = m_au - 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 21f push5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = high16(m_da[m_movems]); + m_at = m_au; + m_au = m_au - 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem_predec(); + if(m_t) + goto push3; + else + goto push4; +push3: + // 043 push3 + m_aob = m_pc; + m_ir = m_irc; + m_da[ry] = m_at; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_list_das_dp8() // 48e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1f1 stmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c9 stmd2 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 322 stmd3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_da[ry] + ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_list_dais_dp8() // 48f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 325 stmx1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 326 stmx2 + m_pc = m_au; + set_16l(m_at, m_dbin); + m_au = m_au - 2; + // alu r=8 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02f stmx3 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto stmx5; + else + goto stmx4; +stmx4: + // 138 stmx4 + m_t = !m_movemr; + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmx5: + // 1f8 stmx5 + m_t = !m_movemr; + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_list_adr16_dp8() // 48f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 1ed smaw1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c1 smaw2 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 04b smaw3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_list_adr32_dp8() // 48f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e5 smal1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 112 smal2 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 305 smal3 + m_aob = m_au; + set_16l(m_at, m_dbin); + m_au = m_au + 2; + // 04b smaw3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_b_ds_dp8() // 4a00 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 12d tsrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_b_ais_dp8() // 4a10 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_b_aips_dp8() // 4a18 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_b_pais_dp8() // 4a20 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_b_das_dp8() // 4a28 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_b_dais_dp8() // 4a30 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_b_adr16_dp8() // 4a38 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_b_adr32_dp8() // 4a39 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_w_ds_dp8() // 4a40 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 12d tsrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_w_ais_dp8() // 4a50 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_w_aips_dp8() // 4a58 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_w_pais_dp8() // 4a60 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_w_das_dp8() // 4a68 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_w_dais_dp8() // 4a70 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_w_adr16_dp8() // 4a78 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_w_adr32_dp8() // 4a79 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_l_ds_dp8() // 4a80 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 125 tsrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 362 tsrl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_l_ais_dp8() // 4a90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_l_aips_dp8() // 4a98 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_l_pais_dp8() // 4aa0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_l_das_dp8() // 4aa8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_l_dais_dp8() // 4ab0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=15 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_l_adr16_dp8() // 4ab8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_l_adr32_dp8() // 4ab9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tas_ds_dp8() // 4ac0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 345 tasr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[ry]; + m_pc = m_au; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_or8(m_ftu, m_da[ry]); + // 346 tasr2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tas_ais_dp8() // 4ad0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tas_aips_dp8() // 4ad8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tas_pais_dp8() // 4ae0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tas_das_dp8() // 4ae8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tas_dais_dp8() // 4af0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tas_adr16_dp8() // 4af8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tas_adr32_dp8() // 4af9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_ais_list_dp8() // 4c90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 127 ldmr1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 111 ldmr2 + m_aob = m_da[ry]; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_aips_list_dp8() // 4c98 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 123 popm1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 115 popm2 + m_aob = m_da[ry]; + m_ir = m_irc; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto popm6; + else + goto popm4; +popm4: + // 3ac popm4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto popm6; + else + goto popm4; +popm6: + // 32c popm6 + m_aob = m_pc; + m_da[ry] = m_at; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_das_list_dp8() // 4ca8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1fd ldmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f6 ldmd2 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // 276 ldmd3 + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 237 ldmd4 + m_aob = m_at; + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_dais_list_dp8() // 4cb0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1f5 ldmx0 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 027 ldmx1 + // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02b ldmx2 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto ldmx4; + else + goto ldmx3; +ldmx3: + // 021 ldmx3 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx4: + // 0e1 ldmx4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx5: + // 02e ldmx5 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=0 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 277 ldmx6 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_adr16_list_dp8() // 4cb8 ffff +{ + switch(m_inst_substate) { + case 0: + // 1f9 lmaw1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 30e lmaw2 + m_aob = m_au; + m_dt = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 111 ldmr2 + m_aob = m_dt; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_dt; + m_au = m_dt + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_adr32_list_dp8() // 4cb9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e9 lmal1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0af lmal2 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ee lmal3 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 111 ldmr2 + m_aob = m_dt; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_dt; + m_au = m_dt + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_dpc_list_dp8() // 4cba ffff +{ + switch(m_inst_substate) { + case 0: + // 1fd ldmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f6 ldmd2 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // 276 ldmd3 + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 237 ldmd4 + m_aob = m_at; + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_dpci_list_dp8() // 4cbb ffff +{ + switch(m_inst_substate) { + case 0: + // 1f5 ldmx0 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 027 ldmx1 + // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02b ldmx2 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto ldmx4; + else + goto ldmx3; +ldmx3: + // 021 ldmx3 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx4: + // 0e1 ldmx4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx5: + // 02e ldmx5 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=0 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 277 ldmx6 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_ais_list_dp8() // 4cd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 127 ldmr1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 111 ldmr2 + m_aob = m_da[ry]; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_aips_list_dp8() // 4cd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 123 popm1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 115 popm2 + m_aob = m_da[ry]; + m_ir = m_irc; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto popm6; + else + goto popm3; +popm3: + // 3ec popm3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f4 popm5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto popm6; + else + goto popm3; +popm6: + // 32c popm6 + m_aob = m_pc; + m_da[ry] = m_at; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_das_list_dp8() // 4ce8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1fd ldmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f6 ldmd2 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // 276 ldmd3 + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 237 ldmd4 + m_aob = m_at; + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_dais_list_dp8() // 4cf0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1f5 ldmx0 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 027 ldmx1 + // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02b ldmx2 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto ldmx4; + else + goto ldmx3; +ldmx3: + // 021 ldmx3 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx4: + // 0e1 ldmx4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx5: + // 02e ldmx5 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 277 ldmx6 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_adr16_list_dp8() // 4cf8 ffff +{ + switch(m_inst_substate) { + case 0: + // 1f9 lmaw1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 30e lmaw2 + m_aob = m_au; + m_dt = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 111 ldmr2 + m_aob = m_dt; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_dt; + m_au = m_dt + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_adr32_list_dp8() // 4cf9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e9 lmal1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0af lmal2 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ee lmal3 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 111 ldmr2 + m_aob = m_dt; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_dt; + m_au = m_dt + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_dpc_list_dp8() // 4cfa ffff +{ + switch(m_inst_substate) { + case 0: + // 1fd ldmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f6 ldmd2 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // 276 ldmd3 + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 237 ldmd4 + m_aob = m_at; + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_dpci_list_dp8() // 4cfb ffff +{ + switch(m_inst_substate) { + case 0: + // 1f5 ldmx0 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 027 ldmx1 + // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02b ldmx2 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto ldmx4; + else + goto ldmx3; +ldmx3: + // 021 ldmx3 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx4: + // 0e1 ldmx4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx5: + // 02e ldmx5 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 277 ldmx6 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::trap_imm4_dp8() // 4e40 fff0 +{ + switch(m_inst_substate) { + case 0: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook((0x80 | ((m_ird & 0xf) << 2)) >> 2); + m_da[16] = m_au; + m_ftu = 0x80 | ((m_ird & 0xf) << 2); + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::link_as_imm16_dp8() // 4e50 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 30b link1 + m_aob = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 2b5 link2 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 30c link3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = high16(m_at); + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 30d link4 + m_aob = m_au; + m_dbout = m_aluo; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[m_sp] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::unlk_as_dp8() // 4e58 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 119 unlk1 + m_aob = m_da[ry]; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + // 1fe unlk2 + m_aob = m_au; + m_ir = m_irc; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 27c unlk3 + m_aob = m_pc; + m_da[m_sp] = m_au; + m_au = m_pc + 2; + // 27d unlk4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[ry] = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_as_usp_dp8() // 4e60 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 2f5 lusp1 + m_aob = m_au; + m_ir = m_irc; + m_movemr = m_dbin; + m_pc = m_au; + m_at = m_da[ry]; + m_ftu = m_dbin; + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[15] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_usp_as_dp8() // 4e68 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 230 susp1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[15]; + m_at = m_da[15]; + m_au = m_da[ry]; + // 233 extr2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[ry] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::reset_dp8() // 4e70 ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 3a6 rset1 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + m_icount -= 2; + // 27b rset2 + m_ir = m_irc; + m_au = ext32(m_aluo) - 2; + m_icount -= 2; + m_reset_cb(1); + goto rset3; +rset3: + // 0e4 rset3 + m_au = m_au - 2; + m_icount -= 2; + // 114 rset4 + m_t = !(m_au & 0x3f); + m_icount -= 2; + if(m_t) + goto rset5; + else + goto rset3; +rset5: + m_reset_cb(0); + // 064 rset5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nop_dp8() // 4e71 ffff +{ + switch(m_inst_substate) { + case 0: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::stop_i16u_dp8() // 4e72 ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 3a2 stop1 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + m_icount -= 2; + // 327 aaa01 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_au = m_au - 2; + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + return; + } +} + +void m68008_device::rte_dp8() // 4e73 ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 12a rtr1 + if(!m_rte_instr_callback.isnull()) (m_rte_instr_callback)(1); + m_aob = m_da[m_sp]; + m_au = m_da[m_sp] + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 12b rtr2 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c5 rtr3 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 302 rtr4 + set_16h(m_at, m_dbin); + m_da[m_sp] = m_au; + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b3 jmal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rts_dp8() // 4e75 ffff +{ + switch(m_inst_substate) { + case 0: + // 126 rts1 + m_aob = m_da[m_sp]; + m_au = m_da[m_sp] + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 116 rts2 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 303 rts3 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_da[m_sp] = m_au; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::trapv_dp8() // 4e76 ffff +{ + switch(m_inst_substate) { + case 0: + // 06d trpv1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_isr & SR_V; + m_alub = m_dbin; + m_ftu = m_sr; + if(m_t) + goto trpv3; + else + goto trpv2; +trpv2: + // 0e2 trpv2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +trpv3: + // 022 trpv3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x07); + m_da[16] = m_au; + m_ftu = 0x001c; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rtr_dp8() // 4e77 ffff +{ + switch(m_inst_substate) { + case 0: + // 12a rtr1 + m_aob = m_da[m_sp]; + m_au = m_da[m_sp] + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 12b rtr2 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c5 rtr3 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 302 rtr4 + set_16h(m_at, m_dbin); + m_da[m_sp] = m_au; + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b3 jmal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jsr_ais_dp8() // 4e90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 273 jsra1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jsr_das_dp8() // 4ea8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b0 jsrd1 + m_au = ext32(m_dbin) + m_da[ry]; + m_icount -= 2; + // 274 jsrd2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 2; + // 2b1 jsrd3 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jsr_dais_dp8() // 4eb0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1f3 jsrx0 + // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 2b2 jsrx1 + m_t = m_irc & 0x0800; + m_au = ext32(m_aluo) + m_da[ry]; + m_icount -= 2; + if(m_t) + goto jsrx3; + else + goto jsrx2; +jsrx2: + // 029 jsrx2 + m_au = m_au + ext32(m_da[map_sp(m_irc >> 12)]); + m_icount -= 2; + goto jsrd2; +jsrx3: + // 0e9 jsrx3 + m_au = m_au + m_da[map_sp(m_irc >> 12)]; + m_icount -= 2; + goto jsrd2; +jsrd2: + // 274 jsrd2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 2; + // 2b1 jsrd3 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jsr_adr16_dp8() // 4eb8 ffff +{ + switch(m_inst_substate) { + case 0: + // 293 jsaw0 + m_at = ext32(m_dbin); + m_icount -= 2; + // 270 jsaw1 + m_aob = m_at; + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jsr_adr32_dp8() // 4eb9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1f2 jsal1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 256 jsal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_pc = m_au; + set_16l(m_at, m_dbin); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jsr_dpc_dp8() // 4eba ffff +{ + switch(m_inst_substate) { + case 0: + // 2b0 jsrd1 + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + // 274 jsrd2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 2; + // 2b1 jsrd3 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jsr_dpci_dp8() // 4ebb ffff +{ + switch(m_inst_substate) { + case 0: + // 1f3 jsrx0 + // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 2b2 jsrx1 + m_t = m_irc & 0x0800; + m_au = ext32(m_aluo) + m_pc; + m_icount -= 2; + if(m_t) + goto jsrx3; + else + goto jsrx2; +jsrx2: + // 029 jsrx2 + m_au = m_au + ext32(m_da[map_sp(m_irc >> 12)]); + m_icount -= 2; + goto jsrd2; +jsrx3: + // 0e9 jsrx3 + m_au = m_au + m_da[map_sp(m_irc >> 12)]; + m_icount -= 2; + goto jsrd2; +jsrd2: + // 274 jsrd2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 2; + // 2b1 jsrd3 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jmp_ais_dp8() // 4ed0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 255 jmpa1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jmp_das_dp8() // 4ee8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b4 jmpd1 + m_au = ext32(m_dbin) + m_da[ry]; + m_icount -= 2; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jmp_dais_dp8() // 4ef0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1f7 jmpx0 + // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 2b6 jmpx1 + m_t = m_irc & 0x0800; + m_au = ext32(m_aluo) + m_da[ry]; + m_icount -= 2; + if(m_t) + goto jmpx3; + else + goto jmpx2; +jmpx2: + // 02d jmpx2 + m_au = m_au + ext32(m_da[map_sp(m_irc >> 12)]); + m_icount -= 2; + goto bbci3; +jmpx3: + // 0ed jmpx3 + m_au = m_au + m_da[map_sp(m_irc >> 12)]; + m_icount -= 2; + goto bbci3; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jmp_adr16_dp8() // 4ef8 ffff +{ + switch(m_inst_substate) { + case 0: + // 297 jmaw1 + m_at = ext32(m_dbin); + m_icount -= 2; + // 2b3 jmal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jmp_adr32_dp8() // 4ef9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1f6 jmal1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b3 jmal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jmp_dpc_dp8() // 4efa ffff +{ + switch(m_inst_substate) { + case 0: + // 2b4 jmpd1 + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jmp_dpci_dp8() // 4efb ffff +{ + switch(m_inst_substate) { + case 0: + // 1f7 jmpx0 + // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 2b6 jmpx1 + m_t = m_irc & 0x0800; + m_au = ext32(m_aluo) + m_pc; + m_icount -= 2; + if(m_t) + goto jmpx3; + else + goto jmpx2; +jmpx2: + // 02d jmpx2 + m_au = m_au + ext32(m_da[map_sp(m_irc >> 12)]); + m_icount -= 2; + goto bbci3; +jmpx3: + // 0ed jmpx3 + m_au = m_au + m_da[map_sp(m_irc >> 12)]; + m_icount -= 2; + goto bbci3; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_b_imm3_ds_dp8() // 5000 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2d8 raqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_add8(m_ftu, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_b_imm3_ais_dp8() // 5010 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_b_imm3_aips_dp8() // 5018 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_b_imm3_pais_dp8() // 5020 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_b_imm3_das_dp8() // 5028 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_b_imm3_dais_dp8() // 5030 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_b_imm3_adr16_dp8() // 5038 f1ff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_b_imm3_adr32_dp8() // 5039 f1ff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_ds_dp8() // 5040 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2d8 raqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_add(m_ftu, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_as_dp8() // 5048 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.ftu:m_ftu d=R.ayl:m_da[ry] + alu_add(m_ftu, m_da[ry]); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=23:m_dt d=17:m_da[ry] + alu_addc(high16(m_dt), high16(m_da[ry])); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_ais_dp8() // 5050 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_aips_dp8() // 5058 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_pais_dp8() // 5060 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_das_dp8() // 5068 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_dais_dp8() // 5070 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_adr16_dp8() // 5078 f1ff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_adr32_dp8() // 5079 f1ff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_ds_dp8() // 5080 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_add(m_ftu, m_da[ry]); + sr_xnzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=18:m_da[ry] + alu_addc(high16(m_dt), high16(m_da[ry])); + sr_xnzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_as_dp8() // 5088 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=..... i=.l...i. ALU.add a=R.ftu:m_ftu d=R.ayl:m_da[ry] + alu_add(m_ftu, m_da[ry]); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=2 c=3 m=..... i=.l....f ALU.addc a=23:m_dt d=17:m_da[ry] + alu_addc(high16(m_dt), high16(m_da[ry])); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_ais_dp8() // 5090 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_aips_dp8() // 5098 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_pais_dp8() // 50a0 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_das_dp8() // 50a8 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_dais_dp8() // 50b0 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_adr16_dp8() // 50b8 f1ff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_adr32_dp8() // 50b9 f1ff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::st_ds_dp8() // 50c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbt_ds_rel16_dp8() // 50c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = 1; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::st_ais_dp8() // 50d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::st_aips_dp8() // 50d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::st_pais_dp8() // 50e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::st_das_dp8() // 50e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::st_dais_dp8() // 50f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::st_adr16_dp8() // 50f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::st_adr32_dp8() // 50f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_b_imm3_ds_dp8() // 5100 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2d8 raqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_sub8(m_ftu, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_b_imm3_ais_dp8() // 5110 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_b_imm3_aips_dp8() // 5118 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_b_imm3_pais_dp8() // 5120 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_b_imm3_das_dp8() // 5128 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_b_imm3_dais_dp8() // 5130 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_b_imm3_adr16_dp8() // 5138 f1ff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_b_imm3_adr32_dp8() // 5139 f1ff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_ds_dp8() // 5140 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2d8 raqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_sub(m_ftu, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_as_dp8() // 5148 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.ftu:m_ftu d=R.ayl:m_da[ry] + alu_sub(m_ftu, m_da[ry]); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=23:m_dt d=17:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_ais_dp8() // 5150 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_aips_dp8() // 5158 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_pais_dp8() // 5160 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_das_dp8() // 5168 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_dais_dp8() // 5170 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_adr16_dp8() // 5178 f1ff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_adr32_dp8() // 5179 f1ff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_ds_dp8() // 5180 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_sub(m_ftu, m_da[ry]); + sr_xnzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=18:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + sr_xnzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_as_dp8() // 5188 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=..... i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.ayl:m_da[ry] + alu_sub(m_ftu, m_da[ry]); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=5 c=3 m=..... i=.l....f ALU.subc a=23:m_dt d=17:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_ais_dp8() // 5190 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_aips_dp8() // 5198 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_pais_dp8() // 51a0 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_das_dp8() // 51a8 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_dais_dp8() // 51b0 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_adr16_dp8() // 51b8 f1ff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_adr32_dp8() // 51b9 f1ff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sf_ds_dp8() // 51c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbra_ds_rel16_dp8() // 51c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = 0; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::sf_ais_dp8() // 51d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sf_aips_dp8() // 51d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sf_pais_dp8() // 51e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sf_das_dp8() // 51e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sf_dais_dp8() // 51f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sf_adr16_dp8() // 51f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sf_adr32_dp8() // 51f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::shi_ds_dp8() // 52c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbhi_ds_rel16_dp8() // 52c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::shi_ais_dp8() // 52d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::shi_aips_dp8() // 52d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::shi_pais_dp8() // 52e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::shi_das_dp8() // 52e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::shi_dais_dp8() // 52f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::shi_adr16_dp8() // 52f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::shi_adr32_dp8() // 52f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sls_ds_dp8() // 53c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbls_ds_rel16_dp8() // 53c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::sls_ais_dp8() // 53d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sls_aips_dp8() // 53d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sls_pais_dp8() // 53e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sls_das_dp8() // 53e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sls_dais_dp8() // 53f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sls_adr16_dp8() // 53f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sls_adr32_dp8() // 53f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scc_ds_dp8() // 54c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbcc_ds_rel16_dp8() // 54c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = !(m_sr & SR_C); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::scc_ais_dp8() // 54d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scc_aips_dp8() // 54d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scc_pais_dp8() // 54e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scc_das_dp8() // 54e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scc_dais_dp8() // 54f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scc_adr16_dp8() // 54f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scc_adr32_dp8() // 54f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scs_ds_dp8() // 55c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbcs_ds_rel16_dp8() // 55c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = m_sr & SR_C; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::scs_ais_dp8() // 55d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scs_aips_dp8() // 55d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scs_pais_dp8() // 55e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scs_das_dp8() // 55e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scs_dais_dp8() // 55f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scs_adr16_dp8() // 55f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scs_adr32_dp8() // 55f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sne_ds_dp8() // 56c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbne_ds_rel16_dp8() // 56c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = !(m_sr & SR_Z); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::sne_ais_dp8() // 56d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sne_aips_dp8() // 56d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sne_pais_dp8() // 56e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sne_das_dp8() // 56e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sne_dais_dp8() // 56f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sne_adr16_dp8() // 56f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sne_adr32_dp8() // 56f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::seq_ds_dp8() // 57c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbeq_ds_rel16_dp8() // 57c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = m_sr & SR_Z; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::seq_ais_dp8() // 57d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::seq_aips_dp8() // 57d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::seq_pais_dp8() // 57e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::seq_das_dp8() // 57e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::seq_dais_dp8() // 57f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::seq_adr16_dp8() // 57f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::seq_adr32_dp8() // 57f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svc_ds_dp8() // 58c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbvc_ds_rel16_dp8() // 58c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = !(m_sr & SR_V); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::svc_ais_dp8() // 58d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svc_aips_dp8() // 58d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svc_pais_dp8() // 58e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svc_das_dp8() // 58e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svc_dais_dp8() // 58f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svc_adr16_dp8() // 58f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svc_adr32_dp8() // 58f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svs_ds_dp8() // 59c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbvs_ds_rel16_dp8() // 59c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = m_sr & SR_V; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::svs_ais_dp8() // 59d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svs_aips_dp8() // 59d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svs_pais_dp8() // 59e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svs_das_dp8() // 59e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svs_dais_dp8() // 59f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svs_adr16_dp8() // 59f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svs_adr32_dp8() // 59f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::spl_ds_dp8() // 5ac0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbpl_ds_rel16_dp8() // 5ac8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = !(m_sr & SR_N); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::spl_ais_dp8() // 5ad0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::spl_aips_dp8() // 5ad8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::spl_pais_dp8() // 5ae0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::spl_das_dp8() // 5ae8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::spl_dais_dp8() // 5af0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::spl_adr16_dp8() // 5af8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::spl_adr32_dp8() // 5af9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::smi_ds_dp8() // 5bc0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbmi_ds_rel16_dp8() // 5bc8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = m_sr & SR_N; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::smi_ais_dp8() // 5bd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::smi_aips_dp8() // 5bd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::smi_pais_dp8() // 5be0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::smi_das_dp8() // 5be8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::smi_dais_dp8() // 5bf0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::smi_adr16_dp8() // 5bf8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::smi_adr32_dp8() // 5bf9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sge_ds_dp8() // 5cc0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbge_ds_rel16_dp8() // 5cc8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::sge_ais_dp8() // 5cd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sge_aips_dp8() // 5cd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sge_pais_dp8() // 5ce0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sge_das_dp8() // 5ce8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sge_dais_dp8() // 5cf0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sge_adr16_dp8() // 5cf8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sge_adr32_dp8() // 5cf9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::slt_ds_dp8() // 5dc0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dblt_ds_rel16_dp8() // 5dc8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::slt_ais_dp8() // 5dd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::slt_aips_dp8() // 5dd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::slt_pais_dp8() // 5de0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::slt_das_dp8() // 5de8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::slt_dais_dp8() // 5df0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::slt_adr16_dp8() // 5df8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::slt_adr32_dp8() // 5df9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sgt_ds_dp8() // 5ec0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbgt_ds_rel16_dp8() // 5ec8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::sgt_ais_dp8() // 5ed0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sgt_aips_dp8() // 5ed8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sgt_pais_dp8() // 5ee0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sgt_das_dp8() // 5ee8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sgt_dais_dp8() // 5ef0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sgt_adr16_dp8() // 5ef8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sgt_adr32_dp8() // 5ef9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sle_ds_dp8() // 5fc0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dble_ds_rel16_dp8() // 5fc8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::sle_ais_dp8() // 5fd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sle_aips_dp8() // 5fd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sle_pais_dp8() // 5fe0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sle_das_dp8() // 5fe8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sle_dais_dp8() // 5ff0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sle_adr16_dp8() // 5ff8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sle_adr32_dp8() // 5ff9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bra_rel16_dp8() // 6000 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = 1; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bra_rel8_dp8() // 6000 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = 1; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bsr_rel16_dp8() // 6100 ffff +{ + switch(m_inst_substate) { + case 0: + // 0a9 bsrw1 + m_at = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[m_sp] - 4; + m_icount -= 2; + // 10e bsrw2 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0aa bsrw3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bsr_rel8_dp8() // 6100 ff00 +{ + switch(m_inst_substate) { + case 0: + // 089 bsri1 + m_at = m_pc; + m_au = m_da[m_sp] - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 102 bsri2 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0a8 bsri3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = ext32(m_ftu) + m_pc; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bhi_rel16_dp8() // 6200 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bhi_rel8_dp8() // 6200 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bls_rel16_dp8() // 6300 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bls_rel8_dp8() // 6300 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bcc_rel16_dp8() // 6400 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = !(m_sr & SR_C); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bcc_rel8_dp8() // 6400 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = !(m_sr & SR_C); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bcs_rel16_dp8() // 6500 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = m_sr & SR_C; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bcs_rel8_dp8() // 6500 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = m_sr & SR_C; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bne_rel16_dp8() // 6600 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = !(m_sr & SR_Z); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bne_rel8_dp8() // 6600 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = !(m_sr & SR_Z); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::beq_rel16_dp8() // 6700 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = m_sr & SR_Z; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::beq_rel8_dp8() // 6700 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = m_sr & SR_Z; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bvc_rel16_dp8() // 6800 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = !(m_sr & SR_V); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bvc_rel8_dp8() // 6800 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = !(m_sr & SR_V); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bvs_rel16_dp8() // 6900 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = m_sr & SR_V; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bvs_rel8_dp8() // 6900 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = m_sr & SR_V; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bpl_rel16_dp8() // 6a00 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = !(m_sr & SR_N); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bpl_rel8_dp8() // 6a00 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = !(m_sr & SR_N); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bmi_rel16_dp8() // 6b00 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = m_sr & SR_N; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bmi_rel8_dp8() // 6b00 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = m_sr & SR_N; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bge_rel16_dp8() // 6c00 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bge_rel8_dp8() // 6c00 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::blt_rel16_dp8() // 6d00 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::blt_rel8_dp8() // 6d00 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bgt_rel16_dp8() // 6e00 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bgt_rel8_dp8() // 6e00 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ble_rel16_dp8() // 6f00 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ble_rel8_dp8() // 6f00 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::moveq_imm8o_dd_dp8() // 7000 f100 +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 23b rlql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_ftu); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_ds_dd_dp8() // 8000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_or8(m_da[ry], m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_ais_dd_dp8() // 8010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_aips_dd_dp8() // 8018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_pais_dd_dp8() // 8020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_das_dd_dp8() // 8028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dais_dd_dp8() // 8030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_adr16_dd_dp8() // 8038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_adr32_dd_dp8() // 8039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dpc_dd_dp8() // 803a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dpci_dd_dp8() // 803b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_imm8_dd_dp8() // 803c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_or8(m_dt, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_ds_dd_dp8() // 8040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_or(m_da[ry], m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_ais_dd_dp8() // 8050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_aips_dd_dp8() // 8058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_pais_dd_dp8() // 8060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_das_dd_dp8() // 8068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dais_dd_dp8() // 8070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_adr16_dd_dp8() // 8078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_adr32_dd_dp8() // 8079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dpc_dd_dp8() // 807a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dpci_dd_dp8() // 807b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_imm16_dd_dp8() // 807c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_or(m_dt, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_ds_dd_dp8() // 8080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_or(m_da[ry], m_da[rx]); + sr_nzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=18:m_da[ry] d=16:m_da[rx] + alu_or(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_ais_dd_dp8() // 8090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_aips_dd_dp8() // 8098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_pais_dd_dp8() // 80a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_das_dd_dp8() // 80a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dais_dd_dp8() // 80b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_adr16_dd_dp8() // 80b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_adr32_dd_dp8() // 80b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dpc_dd_dp8() // 80ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dpci_dd_dp8() // 80bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_imm32_dd_dp8() // 80bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_or(m_dt, m_da[rx]); + sr_nzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=16:m_da[rx] + alu_or(high16(m_dt), high16(m_da[rx])); + sr_nzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_ds_dd_dp8() // 80c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 0a6 dvur1 + m_alub = m_da[ry]; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_da[ry]); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_ais_dd_dp8() // 80d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_aips_dd_dp8() // 80d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_pais_dd_dp8() // 80e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_das_dd_dp8() // 80e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_dais_dd_dp8() // 80f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=1 c=5 m=..... i=.l.d... ALU.over a=R.dbin:m_dbin d=0 + alu_over(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 45: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + [[fallthrough]]; case 46: + [[fallthrough]]; case 47: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + [[fallthrough]]; case 48: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_adr16_dd_dp8() // 80f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_adr32_dd_dp8() // 80f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 45: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + [[fallthrough]]; case 46: + [[fallthrough]]; case 47: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + [[fallthrough]]; case 48: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_dpc_dd_dp8() // 80fa f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_dpci_dd_dp8() // 80fb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=1 c=5 m=..... i=.l.d... ALU.over a=R.dbin:m_dbin d=0 + alu_over(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 45: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + [[fallthrough]]; case 46: + [[fallthrough]]; case 47: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + [[fallthrough]]; case 48: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_imm16_dd_dp8() // 80fc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0a6 dvur1 + m_alub = m_dt; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dt); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sbcd_ds_dd_dp8() // 8100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1cd rbrb1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sbcd8(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 11b rbrb2 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 238 rbrb3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sbcd_pais_paid_dp8() // 8108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 107 asbb1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 135 asbb2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 136 asbb3 + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 04e asbb4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + m_dbin = m_edb; + // 040 asbb5 + m_aob = m_pc; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=alub d=R.dbin:m_dbin + alu_sbcd8(m_alub, m_dbin); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dd_ais_dp8() // 8110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dd_aips_dp8() // 8118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dd_pais_dp8() // 8120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dd_das_dp8() // 8128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dd_dais_dp8() // 8130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dd_adr16_dp8() // 8138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dd_adr32_dp8() // 8139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dd_ais_dp8() // 8150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dd_aips_dp8() // 8158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dd_pais_dp8() // 8160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dd_das_dp8() // 8168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dd_dais_dp8() // 8170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dd_adr16_dp8() // 8178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dd_adr32_dp8() // 8179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dd_ais_dp8() // 8190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dd_aips_dp8() // 8198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dd_pais_dp8() // 81a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dd_das_dp8() // 81a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dd_dais_dp8() // 81b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dd_adr16_dp8() // 81b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dd_adr32_dp8() // 81b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divs_w_ds_dd_dp8() // 81c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 0ae dvs02 + m_alub = m_da[ry]; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_da[ry]); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_ais_dd_dp8() // 81d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_aips_dd_dp8() // 81d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_pais_dd_dp8() // 81e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_das_dd_dp8() // 81e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_dais_dd_dp8() // 81f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=1 c=5 m=..... i=.l.d... ALU.over a=R.dbin:m_dbin d=0 + alu_over(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 45: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + [[fallthrough]]; case 46: + [[fallthrough]]; case 47: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + [[fallthrough]]; case 48: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_adr16_dd_dp8() // 81f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_adr32_dd_dp8() // 81f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 45: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + [[fallthrough]]; case 46: + [[fallthrough]]; case 47: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + [[fallthrough]]; case 48: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_dpc_dd_dp8() // 81fa f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_dpci_dd_dp8() // 81fb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=1 c=5 m=..... i=.l.d... ALU.over a=R.dbin:m_dbin d=0 + alu_over(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 45: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + [[fallthrough]]; case 46: + [[fallthrough]]; case 47: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + [[fallthrough]]; case 48: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_imm16_dd_dp8() // 81fc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0ae dvs02 + m_alub = m_dt; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dt); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::sub_b_ds_dd_dp8() // 9000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub8(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_ais_dd_dp8() // 9010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_aips_dd_dp8() // 9018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_pais_dd_dp8() // 9020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_das_dd_dp8() // 9028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dais_dd_dp8() // 9030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_adr16_dd_dp8() // 9038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_adr32_dd_dp8() // 9039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dpc_dd_dp8() // 903a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dpci_dd_dp8() // 903b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_imm8_dd_dp8() // 903c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub8(m_dt, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_ds_dd_dp8() // 9040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_as_dd_dp8() // 9048 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_ais_dd_dp8() // 9050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_aips_dd_dp8() // 9058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_pais_dd_dp8() // 9060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_das_dd_dp8() // 9068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dais_dd_dp8() // 9070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_adr16_dd_dp8() // 9078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_adr32_dd_dp8() // 9079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dpc_dd_dp8() // 907a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dpci_dd_dp8() // 907b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_imm16_dd_dp8() // 907c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_ds_dd_dp8() // 9080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=18:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_as_dd_dp8() // 9088 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=17:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_ais_dd_dp8() // 9090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_aips_dd_dp8() // 9098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_pais_dd_dp8() // 90a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_das_dd_dp8() // 90a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dais_dd_dp8() // 90b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_adr16_dd_dp8() // 90b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_adr32_dd_dp8() // 90b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dpc_dd_dp8() // 90ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dpci_dd_dp8() // 90bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_imm32_dd_dp8() // 90bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=16:m_da[rx] + alu_subc(high16(m_dt), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_ds_ad_dp8() // 90c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_as_ad_dp8() // 90c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_ais_ad_dp8() // 90d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_aips_ad_dp8() // 90d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_pais_ad_dp8() // 90e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_das_ad_dp8() // 90e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_dais_ad_dp8() // 90f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_adr16_ad_dp8() // 90f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_adr32_ad_dp8() // 90f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_dpc_ad_dp8() // 90fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_dpci_ad_dp8() // 90fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_imm16_ad_dp8() // 90fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subx_b_ds_dd_dp8() // 9100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_subx8(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subx_b_pais_paid_dp8() // 9108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 10f asxw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 131 asxw2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 132 asxw3 + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 04a asxw4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + m_dbin = m_edb; + // 065 asxw5 + m_aob = m_pc; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=alub d=R.dbin:m_dbin + alu_subx8(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dd_ais_dp8() // 9110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dd_aips_dp8() // 9118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dd_pais_dp8() // 9120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dd_das_dp8() // 9128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dd_dais_dp8() // 9130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dd_adr16_dp8() // 9138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dd_adr32_dp8() // 9139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subx_w_ds_dd_dp8() // 9140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_subx(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subx_w_pais_paid_dp8() // 9148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 10f asxw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 131 asxw2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 132 asxw3 + m_au = m_da[rx] - 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 04a asxw4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 065 asxw5 + m_aob = m_pc; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=alub d=R.dbin:m_dbin + alu_subx(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dd_ais_dp8() // 9150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dd_aips_dp8() // 9158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dd_pais_dp8() // 9160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dd_das_dp8() // 9168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dd_dais_dp8() // 9170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dd_adr16_dp8() // 9178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dd_adr32_dp8() // 9179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subx_l_ds_dd_dp8() // 9180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_subx(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=18:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subx_l_pais_paid_dp8() // 9188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 10b asxl1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 048 asxl2 + m_aob = m_au; + m_alub = m_dbin; + m_au = m_au - 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 139 asxl3 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 13a asxl4 + m_au = m_da[rx] - 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 04c asxl5 + m_aob = m_au; + m_alub = m_dbin; + m_au = m_au - 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 047 asxl6 + m_aob = m_au; + m_at = m_au; + m_da[rx] = m_au; + m_au = m_au + 2; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_subx(m_aluo, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 061 asxl7 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = ext32(m_dbin); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 062 asxl8 + m_aob = m_pc; + m_au = m_at; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=R.dbin:m_dbin + alu_subc(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dd_ais_dp8() // 9190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dd_aips_dp8() // 9198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dd_pais_dp8() // 91a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dd_das_dp8() // 91a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dd_dais_dp8() // 91b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dd_adr16_dp8() // 91b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dd_adr32_dp8() // 91b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_ds_ad_dp8() // 91c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=18:m_da[ry] d=15:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_as_ad_dp8() // 91c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=17:m_da[ry] d=15:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_ais_ad_dp8() // 91d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_aips_ad_dp8() // 91d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_pais_ad_dp8() // 91e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_das_ad_dp8() // 91e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_dais_ad_dp8() // 91f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_adr16_ad_dp8() // 91f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_adr32_ad_dp8() // 91f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_dpc_ad_dp8() // 91fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_dpci_ad_dp8() // 91fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_imm32_ad_dp8() // 91fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=23:m_dt d=15:m_da[rx] + alu_subc(high16(m_dt), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_ds_dd_dp8() // b000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub8(m_da[ry], m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_ais_dd_dp8() // b010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_aips_dd_dp8() // b018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_pais_dd_dp8() // b020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_das_dd_dp8() // b028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_dais_dd_dp8() // b030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_adr16_dd_dp8() // b038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_adr32_dd_dp8() // b039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_dpc_dd_dp8() // b03a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_dpci_dd_dp8() // b03b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_imm8_dd_dp8() // b03c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub8(m_dt, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_ds_dd_dp8() // b040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_as_dd_dp8() // b048 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_ais_dd_dp8() // b050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_aips_dd_dp8() // b058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_pais_dd_dp8() // b060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_das_dd_dp8() // b068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_dais_dd_dp8() // b070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_adr16_dd_dp8() // b078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_adr32_dd_dp8() // b079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_dpc_dd_dp8() // b07a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_dpci_dd_dp8() // b07b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_imm16_dd_dp8() // b07c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_ds_dd_dp8() // b080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=18:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_as_dd_dp8() // b088 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=17:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_ais_dd_dp8() // b090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_aips_dd_dp8() // b098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_pais_dd_dp8() // b0a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_das_dd_dp8() // b0a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_dais_dd_dp8() // b0b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_adr16_dd_dp8() // b0b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_adr32_dd_dp8() // b0b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_dpc_dd_dp8() // b0ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_dpci_dd_dp8() // b0bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_imm32_dd_dp8() // b0bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=16:m_da[rx] + alu_subc(high16(m_dt), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_ds_ad_dp8() // b0c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1d9 cprm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_as_ad_dp8() // b0c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1d9 cprm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_ais_ad_dp8() // b0d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_aips_ad_dp8() // b0d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_pais_ad_dp8() // b0e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_das_ad_dp8() // b0e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_dais_ad_dp8() // b0f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_adr16_ad_dp8() // b0f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_adr32_ad_dp8() // b0f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_dpc_ad_dp8() // b0fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_dpci_ad_dp8() // b0fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_imm16_ad_dp8() // b0fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d9 cprm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_b_dd_ds_dp8() // b100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor8(m_da[rx], m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpm_b_aips_aipd_dp8() // b108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 06b cmmw1 + m_aob = m_da[ry]; + m_pc = m_au; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 086 cmmw2 + m_at = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 122 cmmw3 + m_aob = m_da[rx]; + m_ir = m_irc; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + m_dbin = m_edb; + // 170 cmmw4 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_sub8(m_aluo, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_b_dd_ais_dp8() // b110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_b_dd_aips_dp8() // b118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_b_dd_pais_dp8() // b120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_b_dd_das_dp8() // b128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_b_dd_dais_dp8() // b130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_b_dd_adr16_dp8() // b138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_b_dd_adr32_dp8() // b139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_w_dd_ds_dp8() // b140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor(m_da[rx], m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpm_w_aips_aipd_dp8() // b148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 06b cmmw1 + m_aob = m_da[ry]; + m_pc = m_au; + m_au = m_da[ry] + 2; + // 086 cmmw2 + m_at = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 122 cmmw3 + m_aob = m_da[rx]; + m_ir = m_irc; + m_au = m_da[rx] + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 170 cmmw4 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_sub(m_aluo, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_w_dd_ais_dp8() // b150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_w_dd_aips_dp8() // b158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_w_dd_pais_dp8() // b160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_w_dd_das_dp8() // b168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_w_dd_dais_dp8() // b170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_w_dd_adr16_dp8() // b178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_w_dd_adr32_dp8() // b179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_l_dd_ds_dp8() // b180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor(m_da[rx], m_da[ry]); + sr_nzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=18:m_da[ry] + alu_eor(high16(m_da[rx]), high16(m_da[ry])); + sr_nzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpm_l_aips_aipd_dp8() // b188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 06f cmml1 + m_aob = m_da[ry]; + m_pc = m_au; + m_au = m_da[ry] + 2; + // 08e cmml2 + m_at = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 154 cmml3 + m_aob = m_at; + m_alub = m_dbin; + m_da[ry] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 12e cmml4 + m_aob = m_da[rx]; + m_ir = m_irc; + m_au = m_da[rx] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 155 cmml5 + m_aob = m_au; + m_alue = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 156 cmml6 + m_aob = m_pc; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_sub(m_aluo, m_dbin); + sr_nzvc(); + // 157 cmml7 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=R.alue:m_alue + alu_subc(m_alub, m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_l_dd_ais_dp8() // b190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_l_dd_aips_dp8() // b198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_l_dd_pais_dp8() // b1a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_l_dd_das_dp8() // b1a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_l_dd_dais_dp8() // b1b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=13 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_l_dd_adr16_dp8() // b1b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_l_dd_adr32_dp8() // b1b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_ds_ad_dp8() // b1c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=18:m_da[ry] d=15:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_as_ad_dp8() // b1c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=17:m_da[ry] d=15:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_ais_ad_dp8() // b1d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_aips_ad_dp8() // b1d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_pais_ad_dp8() // b1e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_das_ad_dp8() // b1e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_dais_ad_dp8() // b1f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_adr16_ad_dp8() // b1f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_adr32_ad_dp8() // b1f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_dpc_ad_dp8() // b1fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_dpci_ad_dp8() // b1fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_imm32_ad_dp8() // b1fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=23:m_dt d=15:m_da[rx] + alu_subc(high16(m_dt), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_ds_dd_dp8() // c000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_and8(m_da[ry], m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_ais_dd_dp8() // c010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_aips_dd_dp8() // c018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_pais_dd_dp8() // c020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_das_dd_dp8() // c028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dais_dd_dp8() // c030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_adr16_dd_dp8() // c038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_adr32_dd_dp8() // c039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dpc_dd_dp8() // c03a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dpci_dd_dp8() // c03b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_imm8_dd_dp8() // c03c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_and8(m_dt, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_ds_dd_dp8() // c040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_and(m_da[ry], m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_ais_dd_dp8() // c050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_aips_dd_dp8() // c058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_pais_dd_dp8() // c060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_das_dd_dp8() // c068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dais_dd_dp8() // c070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_adr16_dd_dp8() // c078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_adr32_dd_dp8() // c079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dpc_dd_dp8() // c07a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dpci_dd_dp8() // c07b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_imm16_dd_dp8() // c07c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_and(m_dt, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_ds_dd_dp8() // c080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_and(m_da[ry], m_da[rx]); + sr_nzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=18:m_da[ry] d=16:m_da[rx] + alu_and(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_ais_dd_dp8() // c090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_aips_dd_dp8() // c098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_pais_dd_dp8() // c0a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_das_dd_dp8() // c0a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dais_dd_dp8() // c0b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_adr16_dd_dp8() // c0b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_adr32_dd_dp8() // c0b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dpc_dd_dp8() // c0ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dpci_dd_dp8() // c0bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_imm32_dd_dp8() // c0bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_and(m_dt, m_da[rx]); + sr_nzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=16:m_da[rx] + alu_and(high16(m_dt), high16(m_da[rx])); + sr_nzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_ds_dd_dp8() // c0c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 15b mulr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_da[ry]; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_ais_dd_dp8() // c0d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_aips_dd_dp8() // c0d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_pais_dd_dp8() // c0e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_das_dd_dp8() // c0e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_dais_dd_dp8() // c0f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=7 c=5 m=..... i=.lm.... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_adr16_dd_dp8() // c0f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_adr32_dd_dp8() // c0f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_dpc_dd_dp8() // c0fa f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_dpci_dd_dp8() // c0fb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=7 c=5 m=..... i=.lm.... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_imm16_dd_dp8() // c0fc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15b mulr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dt; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::abcd_ds_dd_dp8() // c100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1cd rbrb1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=3 c=2 m=xnzvc i=b....i. ALU.abcd a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_abcd8(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 11b rbrb2 + m_au = m_at; + // alu r=3 c=3 m=xnzvc i=b.....f ALU.add a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 238 rbrb3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::abcd_pais_paid_dp8() // c108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 107 asbb1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 135 asbb2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=3 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 136 asbb3 + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 04e asbb4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + m_dbin = m_edb; + // 040 asbb5 + m_aob = m_pc; + // alu r=3 c=2 m=xnzvc i=b....i. ALU.abcd a=alub d=R.dbin:m_dbin + alu_abcd8(m_alub, m_dbin); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=3 c=3 m=xnzvc i=b.....f ALU.add a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dd_ais_dp8() // c110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dd_aips_dp8() // c118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dd_pais_dp8() // c120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dd_das_dp8() // c128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dd_dais_dp8() // c130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dd_adr16_dp8() // c138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dd_adr32_dp8() // c139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::exg_dd_ds_dp8() // c140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3e3 exge1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // 231 exge2 + m_da[rx] = m_au; + m_da[ry] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::exg_ad_as_dp8() // c148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e3 exge1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // 231 exge2 + m_da[rx] = m_au; + m_da[ry] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dd_ais_dp8() // c150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dd_aips_dp8() // c158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dd_pais_dp8() // c160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dd_das_dp8() // c168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dd_dais_dp8() // c170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dd_adr16_dp8() // c178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dd_adr32_dp8() // c179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::exg_dd_as_dp8() // c188 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e3 exge1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // 231 exge2 + m_da[rx] = m_au; + m_da[ry] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dd_ais_dp8() // c190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dd_aips_dp8() // c198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dd_pais_dp8() // c1a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dd_das_dp8() // c1a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dd_dais_dp8() // c1b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dd_adr16_dp8() // c1b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dd_adr32_dp8() // c1b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::muls_w_ds_dd_dp8() // c1c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 15b mulr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_da[ry]; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_ais_dd_dp8() // c1d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_aips_dd_dp8() // c1d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_pais_dd_dp8() // c1e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_das_dd_dp8() // c1e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_dais_dd_dp8() // c1f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=7 c=5 m=..... i=.lm.... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_adr16_dd_dp8() // c1f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_adr32_dd_dp8() // c1f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_dpc_dd_dp8() // c1fa f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_dpci_dd_dp8() // c1fb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=7 c=5 m=..... i=.lm.... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_imm16_dd_dp8() // c1fc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15b mulr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dt; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::add_b_ds_dd_dp8() // d000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_add8(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_ais_dd_dp8() // d010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_aips_dd_dp8() // d018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_pais_dd_dp8() // d020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_das_dd_dp8() // d028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dais_dd_dp8() // d030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_adr16_dd_dp8() // d038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_adr32_dd_dp8() // d039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dpc_dd_dp8() // d03a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dpci_dd_dp8() // d03b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_imm8_dd_dp8() // d03c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_add8(m_dt, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_ds_dd_dp8() // d040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_as_dd_dp8() // d048 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_ais_dd_dp8() // d050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_aips_dd_dp8() // d058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_pais_dd_dp8() // d060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_das_dd_dp8() // d068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dais_dd_dp8() // d070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_adr16_dd_dp8() // d078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_adr32_dd_dp8() // d079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dpc_dd_dp8() // d07a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dpci_dd_dp8() // d07b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_imm16_dd_dp8() // d07c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_add(m_dt, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_ds_dd_dp8() // d080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=18:m_da[ry] d=16:m_da[rx] + alu_addc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_as_dd_dp8() // d088 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=17:m_da[ry] d=16:m_da[rx] + alu_addc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_ais_dd_dp8() // d090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_aips_dd_dp8() // d098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_pais_dd_dp8() // d0a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_das_dd_dp8() // d0a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dais_dd_dp8() // d0b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_adr16_dd_dp8() // d0b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_adr32_dd_dp8() // d0b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dpc_dd_dp8() // d0ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dpci_dd_dp8() // d0bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_imm32_dd_dp8() // d0bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_add(m_dt, m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=16:m_da[rx] + alu_addc(high16(m_dt), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_ds_ad_dp8() // d0c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_as_ad_dp8() // d0c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_ais_ad_dp8() // d0d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_aips_ad_dp8() // d0d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_pais_ad_dp8() // d0e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_das_ad_dp8() // d0e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_dais_ad_dp8() // d0f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_adr16_ad_dp8() // d0f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_adr32_ad_dp8() // d0f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_dpc_ad_dp8() // d0fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_dpci_ad_dp8() // d0fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_imm16_ad_dp8() // d0fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_add(m_dt, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addx_b_ds_dd_dp8() // d100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=12 c=2 m=xnzvc i=b....i. ALU.addx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_addx8(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=b...... ALU.addx a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addx_b_pais_paid_dp8() // d108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 10f asxw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=12 c=0 m=..... i=b...... ALU.addx a=none d=R.dbin:m_dbin + m_icount -= 2; + // 131 asxw2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=12 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 132 asxw3 + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=12 c=0 m=..... i=b...... ALU.addx a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 04a asxw4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + // alu r=12 c=0 m=..... i=b...... ALU.addx a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + m_dbin = m_edb; + // 065 asxw5 + m_aob = m_pc; + m_au = m_at; + // alu r=12 c=2 m=xnzvc i=b....i. ALU.addx a=alub d=R.dbin:m_dbin + alu_addx8(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=b...... ALU.addx a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dd_ais_dp8() // d110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dd_aips_dp8() // d118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dd_pais_dp8() // d120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dd_das_dp8() // d128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dd_dais_dp8() // d130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dd_adr16_dp8() // d138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dd_adr32_dp8() // d139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addx_w_ds_dd_dp8() // d140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=12 c=2 m=xnzvc i=.....i. ALU.addx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_addx(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=....... ALU.addx a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addx_w_pais_paid_dp8() // d148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 10f asxw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + // alu r=12 c=0 m=..... i=....... ALU.addx a=none d=R.dbin:m_dbin + m_icount -= 2; + // 131 asxw2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=12 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 132 asxw3 + m_au = m_da[rx] - 2; + // alu r=12 c=0 m=..... i=....... ALU.addx a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 04a asxw4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + // alu r=12 c=0 m=..... i=....... ALU.addx a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 065 asxw5 + m_aob = m_pc; + m_au = m_at; + // alu r=12 c=2 m=xnzvc i=.....i. ALU.addx a=alub d=R.dbin:m_dbin + alu_addx(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=....... ALU.addx a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dd_ais_dp8() // d150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dd_aips_dp8() // d158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dd_pais_dp8() // d160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dd_das_dp8() // d168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dd_dais_dp8() // d170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dd_adr16_dp8() // d178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dd_adr32_dp8() // d179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addx_l_ds_dd_dp8() // d180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=12 c=2 m=xnzvc i=.l...i. ALU.addx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_addx(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=12 c=3 m=xnzvc i=.l....f ALU.addx a=18:m_da[ry] d=16:m_da[rx] + alu_addx(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addx_l_pais_paid_dp8() // d188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 10b asxl1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=R.dbin:m_dbin + m_icount -= 2; + // 048 asxl2 + m_aob = m_au; + m_alub = m_dbin; + m_au = m_au - 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=R.dbin:m_dbin d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 139 asxl3 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=12 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 13a asxl4 + m_au = m_da[rx] - 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 04c asxl5 + m_aob = m_au; + m_alub = m_dbin; + m_au = m_au - 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=R.dbin:m_dbin d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 047 asxl6 + m_aob = m_au; + m_at = m_au; + m_da[rx] = m_au; + m_au = m_au + 2; + // alu r=12 c=2 m=xnzvc i=.l...i. ALU.addx a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_addx(m_aluo, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 061 asxl7 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = ext32(m_dbin); + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 062 asxl8 + m_aob = m_pc; + m_au = m_at; + // alu r=12 c=3 m=xnzvc i=.l....f ALU.addx a=alub d=R.dbin:m_dbin + alu_addx(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dd_ais_dp8() // d190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dd_aips_dp8() // d198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dd_pais_dp8() // d1a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dd_das_dp8() // d1a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dd_dais_dp8() // d1b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dd_adr16_dp8() // d1b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dd_adr32_dp8() // d1b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_ds_ad_dp8() // d1c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=18:m_da[ry] d=15:m_da[rx] + alu_addc(high16(m_da[ry]), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_as_ad_dp8() // d1c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=17:m_da[ry] d=15:m_da[rx] + alu_addc(high16(m_da[ry]), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_ais_ad_dp8() // d1d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_aips_ad_dp8() // d1d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_pais_ad_dp8() // d1e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_das_ad_dp8() // d1e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_dais_ad_dp8() // d1f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_adr16_ad_dp8() // d1f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_adr32_ad_dp8() // d1f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_dpc_ad_dp8() // d1fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_dpci_ad_dp8() // d1fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_imm32_ad_dp8() // d1fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_add(m_dt, m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=23:m_dt d=15:m_da[rx] + alu_addc(high16(m_dt), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_b_imm3_ds_dp8() // e000 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=b....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_b_imm3_ds_dp8() // e008 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=b....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_b_imm3_ds_dp8() // e010 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=8 c=1 m=..... i=b...r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_and8x(high16(m_da[ry]), 0xff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=b...ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8x(m_da[ry], 0xff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=b....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_b_imm3_ds_dp8() // e018 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=b....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror8(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_b_dd_ds_dp8() // e020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=b....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_b_dd_ds_dp8() // e028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=b....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_b_dd_ds_dp8() // e030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=8 c=1 m=..... i=b...r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_and8x(high16(m_da[ry]), 0xff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=b...ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8x(m_da[ry], 0xff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=b....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_b_dd_ds_dp8() // e038 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=b....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror8(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_w_imm3_ds_dp8() // e040 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_w_imm3_ds_dp8() // e048 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=5 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_w_imm3_ds_dp8() // e050 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_w_imm3_ds_dp8() // e058 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=10 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_w_dd_ds_dp8() // e060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_w_dd_ds_dp8() // e068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=5 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_w_dd_ds_dp8() // e070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_w_dd_ds_dp8() // e078 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=10 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_l_imm3_ds_dp8() // e080 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=.l...i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_l_imm3_ds_dp8() // e088 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=.l...i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=5 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_l_imm3_ds_dp8() // e090 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=8 c=1 m=..... i=.l..r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=.l..ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=.l...i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=8 c=1 m=.nz.. i=.l..r.f ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_l_imm3_ds_dp8() // e098 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=.l...i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror32(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=10 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_l_dd_ds_dp8() // e0a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=.l...i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_l_dd_ds_dp8() // e0a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=.l...i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=5 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_l_dd_ds_dp8() // e0b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=8 c=1 m=..... i=.l..r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=.l..ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=.l...i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=8 c=1 m=.nz.. i=.l..r.f ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_l_dd_ds_dp8() // e0b8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=.l...i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror32(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=10 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_ais_dp8() // e0d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_aips_dp8() // e0d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_pais_dp8() // e0e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_das_dp8() // e0e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_dais_dp8() // e0f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_adr16_dp8() // e0f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_adr32_dp8() // e0f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_b_imm3_ds_dp8() // e100 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=3 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=b....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_b_imm3_ds_dp8() // e108 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=b....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_b_imm3_ds_dp8() // e110 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_and8x(high16(m_da[ry]), 0xff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=b...ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8x(m_da[ry], 0xff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=b....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_b_imm3_ds_dp8() // e118 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=b....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol8(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_b_dd_ds_dp8() // e120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=3 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=b....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_b_dd_ds_dp8() // e128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=b....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_b_dd_ds_dp8() // e130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_and8x(high16(m_da[ry]), 0xff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=b...ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8x(m_da[ry], 0xff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=b....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_b_dd_ds_dp8() // e138 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=b....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol8(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_w_imm3_ds_dp8() // e140 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=3 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_w_imm3_ds_dp8() // e148 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=4 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_w_imm3_ds_dp8() // e150 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_w_imm3_ds_dp8() // e158 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=9 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_w_dd_ds_dp8() // e160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=3 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_w_dd_ds_dp8() // e168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=4 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_w_dd_ds_dp8() // e170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_w_dd_ds_dp8() // e178 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=9 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_l_imm3_ds_dp8() // e180 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=3 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=.l...i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=3 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_l_imm3_ds_dp8() // e188 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=.l...i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=R.alue:m_alue + alu_and(m_aluo, m_alue); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=4 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_l_imm3_ds_dp8() // e190 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=.l..ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=.l...i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=11 c=1 m=.nz.. i=.l..r.f ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_l_imm3_ds_dp8() // e198 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=9 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=.l...i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol32(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=9 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_l_dd_ds_dp8() // e1a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=3 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=.l...i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=3 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_l_dd_ds_dp8() // e1a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=.l...i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=R.alue:m_alue + alu_and(m_aluo, m_alue); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=4 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_l_dd_ds_dp8() // e1b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=.l..ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=.l...i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=11 c=1 m=.nz.. i=.l..r.f ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_l_dd_ds_dp8() // e1b8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=9 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=.l...i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol32(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=9 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_ais_dp8() // e1d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_aips_dp8() // e1d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_pais_dp8() // e1e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_das_dp8() // e1e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_dais_dp8() // e1f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=3 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_adr16_dp8() // e1f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_adr32_dp8() // e1f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_ais_dp8() // e2d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_aips_dp8() // e2d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_pais_dp8() // e2e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_das_dp8() // e2e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_dais_dp8() // e2f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_adr16_dp8() // e2f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_adr32_dp8() // e2f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_ais_dp8() // e3d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_aips_dp8() // e3d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_pais_dp8() // e3e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_das_dp8() // e3e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_dais_dp8() // e3f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_adr16_dp8() // e3f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_adr32_dp8() // e3f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_ais_dp8() // e4d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_aips_dp8() // e4d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_pais_dp8() // e4e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_das_dp8() // e4e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_dais_dp8() // e4f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=8 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_adr16_dp8() // e4f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_adr32_dp8() // e4f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_ais_dp8() // e5d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_aips_dp8() // e5d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_pais_dp8() // e5e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_das_dp8() // e5e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_dais_dp8() // e5f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_adr16_dp8() // e5f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_adr32_dp8() // e5f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_ais_dp8() // e6d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_aips_dp8() // e6d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_pais_dp8() // e6e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_das_dp8() // e6e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_dais_dp8() // e6f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=10 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_adr16_dp8() // e6f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_adr32_dp8() // e6f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_ais_dp8() // e7d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_aips_dp8() // e7d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_pais_dp8() // e7e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_das_dp8() // e7e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_dais_dp8() // e7f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=9 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_adr16_dp8() // e7f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_adr32_dp8() // e7f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_program8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_program8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_opcodes8.read_interruptible(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_opcodes8.read_interruptible(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_program8.write_interruptible(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_program8.write_interruptible(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +const m68008_device::handler8 m68008_device::s_handlers_dp8[] = { + &m68008_device::state_reset_dp8, + &m68008_device::state_bus_error_dp8, + &m68008_device::state_address_error_dp8, + &m68008_device::state_double_fault_dp8, + &m68008_device::state_interrupt_dp8, + &m68008_device::state_trace_dp8, + &m68008_device::state_illegal_dp8, + &m68008_device::state_priviledge_dp8, + &m68008_device::state_linea_dp8, + &m68008_device::state_linef_dp8, + &m68008_device::ori_b_imm8_ds_dp8, + &m68008_device::ori_b_imm8_ais_dp8, + &m68008_device::ori_b_imm8_aips_dp8, + &m68008_device::ori_b_imm8_pais_dp8, + &m68008_device::ori_b_imm8_das_dp8, + &m68008_device::ori_b_imm8_dais_dp8, + &m68008_device::ori_b_imm8_adr16_dp8, + &m68008_device::ori_b_imm8_adr32_dp8, + &m68008_device::ori_imm8_ccr_dp8, + &m68008_device::ori_w_imm16_ds_dp8, + &m68008_device::ori_w_imm16_ais_dp8, + &m68008_device::ori_w_imm16_aips_dp8, + &m68008_device::ori_w_imm16_pais_dp8, + &m68008_device::ori_w_imm16_das_dp8, + &m68008_device::ori_w_imm16_dais_dp8, + &m68008_device::ori_w_imm16_adr16_dp8, + &m68008_device::ori_w_imm16_adr32_dp8, + &m68008_device::ori_i16u_sr_dp8, + &m68008_device::ori_l_imm32_ds_dp8, + &m68008_device::ori_l_imm32_ais_dp8, + &m68008_device::ori_l_imm32_aips_dp8, + &m68008_device::ori_l_imm32_pais_dp8, + &m68008_device::ori_l_imm32_das_dp8, + &m68008_device::ori_l_imm32_dais_dp8, + &m68008_device::ori_l_imm32_adr16_dp8, + &m68008_device::ori_l_imm32_adr32_dp8, + &m68008_device::btst_dd_ds_dp8, + &m68008_device::movep_w_das_dd_dp8, + &m68008_device::btst_dd_ais_dp8, + &m68008_device::btst_dd_aips_dp8, + &m68008_device::btst_dd_pais_dp8, + &m68008_device::btst_dd_das_dp8, + &m68008_device::btst_dd_dais_dp8, + &m68008_device::btst_dd_adr16_dp8, + &m68008_device::btst_dd_adr32_dp8, + &m68008_device::btst_dd_dpc_dp8, + &m68008_device::btst_dd_dpci_dp8, + &m68008_device::btst_dd_imm_dp8, + &m68008_device::bchg_dd_ds_dp8, + &m68008_device::movep_l_das_dd_dp8, + &m68008_device::bchg_dd_ais_dp8, + &m68008_device::bchg_dd_aips_dp8, + &m68008_device::bchg_dd_pais_dp8, + &m68008_device::bchg_dd_das_dp8, + &m68008_device::bchg_dd_dais_dp8, + &m68008_device::bchg_dd_adr16_dp8, + &m68008_device::bchg_dd_adr32_dp8, + &m68008_device::bclr_dd_ds_dp8, + &m68008_device::movep_w_dd_das_dp8, + &m68008_device::bclr_dd_ais_dp8, + &m68008_device::bclr_dd_aips_dp8, + &m68008_device::bclr_dd_pais_dp8, + &m68008_device::bclr_dd_das_dp8, + &m68008_device::bclr_dd_dais_dp8, + &m68008_device::bclr_dd_adr16_dp8, + &m68008_device::bclr_dd_adr32_dp8, + &m68008_device::bset_dd_ds_dp8, + &m68008_device::movep_l_dd_das_dp8, + &m68008_device::bset_dd_ais_dp8, + &m68008_device::bset_dd_aips_dp8, + &m68008_device::bset_dd_pais_dp8, + &m68008_device::bset_dd_das_dp8, + &m68008_device::bset_dd_dais_dp8, + &m68008_device::bset_dd_adr16_dp8, + &m68008_device::bset_dd_adr32_dp8, + &m68008_device::andi_b_imm8_ds_dp8, + &m68008_device::andi_b_imm8_ais_dp8, + &m68008_device::andi_b_imm8_aips_dp8, + &m68008_device::andi_b_imm8_pais_dp8, + &m68008_device::andi_b_imm8_das_dp8, + &m68008_device::andi_b_imm8_dais_dp8, + &m68008_device::andi_b_imm8_adr16_dp8, + &m68008_device::andi_b_imm8_adr32_dp8, + &m68008_device::andi_imm8_ccr_dp8, + &m68008_device::andi_w_imm16_ds_dp8, + &m68008_device::andi_w_imm16_ais_dp8, + &m68008_device::andi_w_imm16_aips_dp8, + &m68008_device::andi_w_imm16_pais_dp8, + &m68008_device::andi_w_imm16_das_dp8, + &m68008_device::andi_w_imm16_dais_dp8, + &m68008_device::andi_w_imm16_adr16_dp8, + &m68008_device::andi_w_imm16_adr32_dp8, + &m68008_device::andi_i16u_sr_dp8, + &m68008_device::andi_l_imm32_ds_dp8, + &m68008_device::andi_l_imm32_ais_dp8, + &m68008_device::andi_l_imm32_aips_dp8, + &m68008_device::andi_l_imm32_pais_dp8, + &m68008_device::andi_l_imm32_das_dp8, + &m68008_device::andi_l_imm32_dais_dp8, + &m68008_device::andi_l_imm32_adr16_dp8, + &m68008_device::andi_l_imm32_adr32_dp8, + &m68008_device::subi_b_imm8_ds_dp8, + &m68008_device::subi_b_imm8_ais_dp8, + &m68008_device::subi_b_imm8_aips_dp8, + &m68008_device::subi_b_imm8_pais_dp8, + &m68008_device::subi_b_imm8_das_dp8, + &m68008_device::subi_b_imm8_dais_dp8, + &m68008_device::subi_b_imm8_adr16_dp8, + &m68008_device::subi_b_imm8_adr32_dp8, + &m68008_device::subi_w_imm16_ds_dp8, + &m68008_device::subi_w_imm16_ais_dp8, + &m68008_device::subi_w_imm16_aips_dp8, + &m68008_device::subi_w_imm16_pais_dp8, + &m68008_device::subi_w_imm16_das_dp8, + &m68008_device::subi_w_imm16_dais_dp8, + &m68008_device::subi_w_imm16_adr16_dp8, + &m68008_device::subi_w_imm16_adr32_dp8, + &m68008_device::subi_l_imm32_ds_dp8, + &m68008_device::subi_l_imm32_ais_dp8, + &m68008_device::subi_l_imm32_aips_dp8, + &m68008_device::subi_l_imm32_pais_dp8, + &m68008_device::subi_l_imm32_das_dp8, + &m68008_device::subi_l_imm32_dais_dp8, + &m68008_device::subi_l_imm32_adr16_dp8, + &m68008_device::subi_l_imm32_adr32_dp8, + &m68008_device::addi_b_imm8_ds_dp8, + &m68008_device::addi_b_imm8_ais_dp8, + &m68008_device::addi_b_imm8_aips_dp8, + &m68008_device::addi_b_imm8_pais_dp8, + &m68008_device::addi_b_imm8_das_dp8, + &m68008_device::addi_b_imm8_dais_dp8, + &m68008_device::addi_b_imm8_adr16_dp8, + &m68008_device::addi_b_imm8_adr32_dp8, + &m68008_device::addi_w_imm16_ds_dp8, + &m68008_device::addi_w_imm16_ais_dp8, + &m68008_device::addi_w_imm16_aips_dp8, + &m68008_device::addi_w_imm16_pais_dp8, + &m68008_device::addi_w_imm16_das_dp8, + &m68008_device::addi_w_imm16_dais_dp8, + &m68008_device::addi_w_imm16_adr16_dp8, + &m68008_device::addi_w_imm16_adr32_dp8, + &m68008_device::addi_l_imm32_ds_dp8, + &m68008_device::addi_l_imm32_ais_dp8, + &m68008_device::addi_l_imm32_aips_dp8, + &m68008_device::addi_l_imm32_pais_dp8, + &m68008_device::addi_l_imm32_das_dp8, + &m68008_device::addi_l_imm32_dais_dp8, + &m68008_device::addi_l_imm32_adr16_dp8, + &m68008_device::addi_l_imm32_adr32_dp8, + &m68008_device::btst_imm8_ds_dp8, + &m68008_device::btst_imm8_ais_dp8, + &m68008_device::btst_imm8_aips_dp8, + &m68008_device::btst_imm8_pais_dp8, + &m68008_device::btst_imm8_das_dp8, + &m68008_device::btst_imm8_dais_dp8, + &m68008_device::btst_imm8_adr16_dp8, + &m68008_device::btst_imm8_adr32_dp8, + &m68008_device::btst_imm8_dpc_dp8, + &m68008_device::btst_imm8_dpci_dp8, + &m68008_device::bchg_imm8_ds_dp8, + &m68008_device::bchg_imm8_ais_dp8, + &m68008_device::bchg_imm8_aips_dp8, + &m68008_device::bchg_imm8_pais_dp8, + &m68008_device::bchg_imm8_das_dp8, + &m68008_device::bchg_imm8_dais_dp8, + &m68008_device::bchg_imm8_adr16_dp8, + &m68008_device::bchg_imm8_adr32_dp8, + &m68008_device::bclr_imm8_ds_dp8, + &m68008_device::bclr_imm8_ais_dp8, + &m68008_device::bclr_imm8_aips_dp8, + &m68008_device::bclr_imm8_pais_dp8, + &m68008_device::bclr_imm8_das_dp8, + &m68008_device::bclr_imm8_dais_dp8, + &m68008_device::bclr_imm8_adr16_dp8, + &m68008_device::bclr_imm8_adr32_dp8, + &m68008_device::bset_imm8_ds_dp8, + &m68008_device::bset_imm8_ais_dp8, + &m68008_device::bset_imm8_aips_dp8, + &m68008_device::bset_imm8_pais_dp8, + &m68008_device::bset_imm8_das_dp8, + &m68008_device::bset_imm8_dais_dp8, + &m68008_device::bset_imm8_adr16_dp8, + &m68008_device::bset_imm8_adr32_dp8, + &m68008_device::eori_b_imm8_ds_dp8, + &m68008_device::eori_b_imm8_ais_dp8, + &m68008_device::eori_b_imm8_aips_dp8, + &m68008_device::eori_b_imm8_pais_dp8, + &m68008_device::eori_b_imm8_das_dp8, + &m68008_device::eori_b_imm8_dais_dp8, + &m68008_device::eori_b_imm8_adr16_dp8, + &m68008_device::eori_b_imm8_adr32_dp8, + &m68008_device::eori_imm8_ccr_dp8, + &m68008_device::eori_w_imm16_ds_dp8, + &m68008_device::eori_w_imm16_ais_dp8, + &m68008_device::eori_w_imm16_aips_dp8, + &m68008_device::eori_w_imm16_pais_dp8, + &m68008_device::eori_w_imm16_das_dp8, + &m68008_device::eori_w_imm16_dais_dp8, + &m68008_device::eori_w_imm16_adr16_dp8, + &m68008_device::eori_w_imm16_adr32_dp8, + &m68008_device::eori_i16u_sr_dp8, + &m68008_device::eori_l_imm32_ds_dp8, + &m68008_device::eori_l_imm32_ais_dp8, + &m68008_device::eori_l_imm32_aips_dp8, + &m68008_device::eori_l_imm32_pais_dp8, + &m68008_device::eori_l_imm32_das_dp8, + &m68008_device::eori_l_imm32_dais_dp8, + &m68008_device::eori_l_imm32_adr16_dp8, + &m68008_device::eori_l_imm32_adr32_dp8, + &m68008_device::cmpi_b_imm8_ds_dp8, + &m68008_device::cmpi_b_imm8_ais_dp8, + &m68008_device::cmpi_b_imm8_aips_dp8, + &m68008_device::cmpi_b_imm8_pais_dp8, + &m68008_device::cmpi_b_imm8_das_dp8, + &m68008_device::cmpi_b_imm8_dais_dp8, + &m68008_device::cmpi_b_imm8_adr16_dp8, + &m68008_device::cmpi_b_imm8_adr32_dp8, + &m68008_device::cmpi_w_imm16_ds_dp8, + &m68008_device::cmpi_w_imm16_ais_dp8, + &m68008_device::cmpi_w_imm16_aips_dp8, + &m68008_device::cmpi_w_imm16_pais_dp8, + &m68008_device::cmpi_w_imm16_das_dp8, + &m68008_device::cmpi_w_imm16_dais_dp8, + &m68008_device::cmpi_w_imm16_adr16_dp8, + &m68008_device::cmpi_w_imm16_adr32_dp8, + &m68008_device::cmpi_l_imm32_ds_dp8, + &m68008_device::cmpi_l_imm32_ais_dp8, + &m68008_device::cmpi_l_imm32_aips_dp8, + &m68008_device::cmpi_l_imm32_pais_dp8, + &m68008_device::cmpi_l_imm32_das_dp8, + &m68008_device::cmpi_l_imm32_dais_dp8, + &m68008_device::cmpi_l_imm32_adr16_dp8, + &m68008_device::cmpi_l_imm32_adr32_dp8, + &m68008_device::move_b_ds_dd_dp8, + &m68008_device::move_b_ais_dd_dp8, + &m68008_device::move_b_aips_dd_dp8, + &m68008_device::move_b_pais_dd_dp8, + &m68008_device::move_b_das_dd_dp8, + &m68008_device::move_b_dais_dd_dp8, + &m68008_device::move_b_adr16_dd_dp8, + &m68008_device::move_b_adr32_dd_dp8, + &m68008_device::move_b_dpc_dd_dp8, + &m68008_device::move_b_dpci_dd_dp8, + &m68008_device::move_b_imm8_dd_dp8, + &m68008_device::move_b_ds_aid_dp8, + &m68008_device::move_b_ais_aid_dp8, + &m68008_device::move_b_aips_aid_dp8, + &m68008_device::move_b_pais_aid_dp8, + &m68008_device::move_b_das_aid_dp8, + &m68008_device::move_b_dais_aid_dp8, + &m68008_device::move_b_adr16_aid_dp8, + &m68008_device::move_b_adr32_aid_dp8, + &m68008_device::move_b_dpc_aid_dp8, + &m68008_device::move_b_dpci_aid_dp8, + &m68008_device::move_b_imm8_aid_dp8, + &m68008_device::move_b_ds_aipd_dp8, + &m68008_device::move_b_ais_aipd_dp8, + &m68008_device::move_b_aips_aipd_dp8, + &m68008_device::move_b_pais_aipd_dp8, + &m68008_device::move_b_das_aipd_dp8, + &m68008_device::move_b_dais_aipd_dp8, + &m68008_device::move_b_adr16_aipd_dp8, + &m68008_device::move_b_adr32_aipd_dp8, + &m68008_device::move_b_dpc_aipd_dp8, + &m68008_device::move_b_dpci_aipd_dp8, + &m68008_device::move_b_imm8_aipd_dp8, + &m68008_device::move_b_ds_paid_dp8, + &m68008_device::move_b_ais_paid_dp8, + &m68008_device::move_b_aips_paid_dp8, + &m68008_device::move_b_pais_paid_dp8, + &m68008_device::move_b_das_paid_dp8, + &m68008_device::move_b_dais_paid_dp8, + &m68008_device::move_b_adr16_paid_dp8, + &m68008_device::move_b_adr32_paid_dp8, + &m68008_device::move_b_dpc_paid_dp8, + &m68008_device::move_b_dpci_paid_dp8, + &m68008_device::move_b_imm8_paid_dp8, + &m68008_device::move_b_ds_dad_dp8, + &m68008_device::move_b_ais_dad_dp8, + &m68008_device::move_b_aips_dad_dp8, + &m68008_device::move_b_pais_dad_dp8, + &m68008_device::move_b_das_dad_dp8, + &m68008_device::move_b_dais_dad_dp8, + &m68008_device::move_b_adr16_dad_dp8, + &m68008_device::move_b_adr32_dad_dp8, + &m68008_device::move_b_dpc_dad_dp8, + &m68008_device::move_b_dpci_dad_dp8, + &m68008_device::move_b_imm8_dad_dp8, + &m68008_device::move_b_ds_daid_dp8, + &m68008_device::move_b_ais_daid_dp8, + &m68008_device::move_b_aips_daid_dp8, + &m68008_device::move_b_pais_daid_dp8, + &m68008_device::move_b_das_daid_dp8, + &m68008_device::move_b_dais_daid_dp8, + &m68008_device::move_b_adr16_daid_dp8, + &m68008_device::move_b_adr32_daid_dp8, + &m68008_device::move_b_dpc_daid_dp8, + &m68008_device::move_b_dpci_daid_dp8, + &m68008_device::move_b_imm8_daid_dp8, + &m68008_device::move_b_ds_adr16_dp8, + &m68008_device::move_b_ais_adr16_dp8, + &m68008_device::move_b_aips_adr16_dp8, + &m68008_device::move_b_pais_adr16_dp8, + &m68008_device::move_b_das_adr16_dp8, + &m68008_device::move_b_dais_adr16_dp8, + &m68008_device::move_b_adr16_adr16_dp8, + &m68008_device::move_b_adr32_adr16_dp8, + &m68008_device::move_b_dpc_adr16_dp8, + &m68008_device::move_b_dpci_adr16_dp8, + &m68008_device::move_b_imm8_adr16_dp8, + &m68008_device::move_b_ds_adr32_dp8, + &m68008_device::move_b_ais_adr32_dp8, + &m68008_device::move_b_aips_adr32_dp8, + &m68008_device::move_b_pais_adr32_dp8, + &m68008_device::move_b_das_adr32_dp8, + &m68008_device::move_b_dais_adr32_dp8, + &m68008_device::move_b_adr16_adr32_dp8, + &m68008_device::move_b_adr32_adr32_dp8, + &m68008_device::move_b_dpc_adr32_dp8, + &m68008_device::move_b_dpci_adr32_dp8, + &m68008_device::move_b_imm8_adr32_dp8, + &m68008_device::move_l_ds_dd_dp8, + &m68008_device::move_l_as_dd_dp8, + &m68008_device::move_l_ais_dd_dp8, + &m68008_device::move_l_aips_dd_dp8, + &m68008_device::move_l_pais_dd_dp8, + &m68008_device::move_l_das_dd_dp8, + &m68008_device::move_l_dais_dd_dp8, + &m68008_device::move_l_adr16_dd_dp8, + &m68008_device::move_l_adr32_dd_dp8, + &m68008_device::move_l_dpc_dd_dp8, + &m68008_device::move_l_dpci_dd_dp8, + &m68008_device::move_l_imm32_dd_dp8, + &m68008_device::movea_l_ds_ad_dp8, + &m68008_device::movea_l_as_ad_dp8, + &m68008_device::movea_l_ais_ad_dp8, + &m68008_device::movea_l_aips_ad_dp8, + &m68008_device::movea_l_pais_ad_dp8, + &m68008_device::movea_l_das_ad_dp8, + &m68008_device::movea_l_dais_ad_dp8, + &m68008_device::movea_l_adr16_ad_dp8, + &m68008_device::movea_l_adr32_ad_dp8, + &m68008_device::movea_l_dpc_ad_dp8, + &m68008_device::movea_l_dpci_ad_dp8, + &m68008_device::movea_l_imm32_ad_dp8, + &m68008_device::move_l_ds_aid_dp8, + &m68008_device::move_l_as_aid_dp8, + &m68008_device::move_l_ais_aid_dp8, + &m68008_device::move_l_aips_aid_dp8, + &m68008_device::move_l_pais_aid_dp8, + &m68008_device::move_l_das_aid_dp8, + &m68008_device::move_l_dais_aid_dp8, + &m68008_device::move_l_adr16_aid_dp8, + &m68008_device::move_l_adr32_aid_dp8, + &m68008_device::move_l_dpc_aid_dp8, + &m68008_device::move_l_dpci_aid_dp8, + &m68008_device::move_l_imm32_aid_dp8, + &m68008_device::move_l_ds_aipd_dp8, + &m68008_device::move_l_as_aipd_dp8, + &m68008_device::move_l_ais_aipd_dp8, + &m68008_device::move_l_aips_aipd_dp8, + &m68008_device::move_l_pais_aipd_dp8, + &m68008_device::move_l_das_aipd_dp8, + &m68008_device::move_l_dais_aipd_dp8, + &m68008_device::move_l_adr16_aipd_dp8, + &m68008_device::move_l_adr32_aipd_dp8, + &m68008_device::move_l_dpc_aipd_dp8, + &m68008_device::move_l_dpci_aipd_dp8, + &m68008_device::move_l_imm32_aipd_dp8, + &m68008_device::move_l_ds_paid_dp8, + &m68008_device::move_l_as_paid_dp8, + &m68008_device::move_l_ais_paid_dp8, + &m68008_device::move_l_aips_paid_dp8, + &m68008_device::move_l_pais_paid_dp8, + &m68008_device::move_l_das_paid_dp8, + &m68008_device::move_l_dais_paid_dp8, + &m68008_device::move_l_adr16_paid_dp8, + &m68008_device::move_l_adr32_paid_dp8, + &m68008_device::move_l_dpc_paid_dp8, + &m68008_device::move_l_dpci_paid_dp8, + &m68008_device::move_l_imm32_paid_dp8, + &m68008_device::move_l_ds_dad_dp8, + &m68008_device::move_l_as_dad_dp8, + &m68008_device::move_l_ais_dad_dp8, + &m68008_device::move_l_aips_dad_dp8, + &m68008_device::move_l_pais_dad_dp8, + &m68008_device::move_l_das_dad_dp8, + &m68008_device::move_l_dais_dad_dp8, + &m68008_device::move_l_adr16_dad_dp8, + &m68008_device::move_l_adr32_dad_dp8, + &m68008_device::move_l_dpc_dad_dp8, + &m68008_device::move_l_dpci_dad_dp8, + &m68008_device::move_l_imm32_dad_dp8, + &m68008_device::move_l_ds_daid_dp8, + &m68008_device::move_l_as_daid_dp8, + &m68008_device::move_l_ais_daid_dp8, + &m68008_device::move_l_aips_daid_dp8, + &m68008_device::move_l_pais_daid_dp8, + &m68008_device::move_l_das_daid_dp8, + &m68008_device::move_l_dais_daid_dp8, + &m68008_device::move_l_adr16_daid_dp8, + &m68008_device::move_l_adr32_daid_dp8, + &m68008_device::move_l_dpc_daid_dp8, + &m68008_device::move_l_dpci_daid_dp8, + &m68008_device::move_l_imm32_daid_dp8, + &m68008_device::move_l_ds_adr16_dp8, + &m68008_device::move_l_as_adr16_dp8, + &m68008_device::move_l_ais_adr16_dp8, + &m68008_device::move_l_aips_adr16_dp8, + &m68008_device::move_l_pais_adr16_dp8, + &m68008_device::move_l_das_adr16_dp8, + &m68008_device::move_l_dais_adr16_dp8, + &m68008_device::move_l_adr16_adr16_dp8, + &m68008_device::move_l_adr32_adr16_dp8, + &m68008_device::move_l_dpc_adr16_dp8, + &m68008_device::move_l_dpci_adr16_dp8, + &m68008_device::move_l_imm32_adr16_dp8, + &m68008_device::move_l_ds_adr32_dp8, + &m68008_device::move_l_as_adr32_dp8, + &m68008_device::move_l_ais_adr32_dp8, + &m68008_device::move_l_aips_adr32_dp8, + &m68008_device::move_l_pais_adr32_dp8, + &m68008_device::move_l_das_adr32_dp8, + &m68008_device::move_l_dais_adr32_dp8, + &m68008_device::move_l_adr16_adr32_dp8, + &m68008_device::move_l_adr32_adr32_dp8, + &m68008_device::move_l_dpc_adr32_dp8, + &m68008_device::move_l_dpci_adr32_dp8, + &m68008_device::move_l_imm32_adr32_dp8, + &m68008_device::move_w_ds_dd_dp8, + &m68008_device::move_w_as_dd_dp8, + &m68008_device::move_w_ais_dd_dp8, + &m68008_device::move_w_aips_dd_dp8, + &m68008_device::move_w_pais_dd_dp8, + &m68008_device::move_w_das_dd_dp8, + &m68008_device::move_w_dais_dd_dp8, + &m68008_device::move_w_adr16_dd_dp8, + &m68008_device::move_w_adr32_dd_dp8, + &m68008_device::move_w_dpc_dd_dp8, + &m68008_device::move_w_dpci_dd_dp8, + &m68008_device::move_w_imm16_dd_dp8, + &m68008_device::movea_w_ds_ad_dp8, + &m68008_device::movea_w_as_ad_dp8, + &m68008_device::movea_w_ais_ad_dp8, + &m68008_device::movea_w_aips_ad_dp8, + &m68008_device::movea_w_pais_ad_dp8, + &m68008_device::movea_w_das_ad_dp8, + &m68008_device::movea_w_dais_ad_dp8, + &m68008_device::movea_w_adr16_ad_dp8, + &m68008_device::movea_w_adr32_ad_dp8, + &m68008_device::movea_w_dpc_ad_dp8, + &m68008_device::movea_w_dpci_ad_dp8, + &m68008_device::movea_w_imm16_ad_dp8, + &m68008_device::move_w_ds_aid_dp8, + &m68008_device::move_w_as_aid_dp8, + &m68008_device::move_w_ais_aid_dp8, + &m68008_device::move_w_aips_aid_dp8, + &m68008_device::move_w_pais_aid_dp8, + &m68008_device::move_w_das_aid_dp8, + &m68008_device::move_w_dais_aid_dp8, + &m68008_device::move_w_adr16_aid_dp8, + &m68008_device::move_w_adr32_aid_dp8, + &m68008_device::move_w_dpc_aid_dp8, + &m68008_device::move_w_dpci_aid_dp8, + &m68008_device::move_w_imm16_aid_dp8, + &m68008_device::move_w_ds_aipd_dp8, + &m68008_device::move_w_as_aipd_dp8, + &m68008_device::move_w_ais_aipd_dp8, + &m68008_device::move_w_aips_aipd_dp8, + &m68008_device::move_w_pais_aipd_dp8, + &m68008_device::move_w_das_aipd_dp8, + &m68008_device::move_w_dais_aipd_dp8, + &m68008_device::move_w_adr16_aipd_dp8, + &m68008_device::move_w_adr32_aipd_dp8, + &m68008_device::move_w_dpc_aipd_dp8, + &m68008_device::move_w_dpci_aipd_dp8, + &m68008_device::move_w_imm16_aipd_dp8, + &m68008_device::move_w_ds_paid_dp8, + &m68008_device::move_w_as_paid_dp8, + &m68008_device::move_w_ais_paid_dp8, + &m68008_device::move_w_aips_paid_dp8, + &m68008_device::move_w_pais_paid_dp8, + &m68008_device::move_w_das_paid_dp8, + &m68008_device::move_w_dais_paid_dp8, + &m68008_device::move_w_adr16_paid_dp8, + &m68008_device::move_w_adr32_paid_dp8, + &m68008_device::move_w_dpc_paid_dp8, + &m68008_device::move_w_dpci_paid_dp8, + &m68008_device::move_w_imm16_paid_dp8, + &m68008_device::move_w_ds_dad_dp8, + &m68008_device::move_w_as_dad_dp8, + &m68008_device::move_w_ais_dad_dp8, + &m68008_device::move_w_aips_dad_dp8, + &m68008_device::move_w_pais_dad_dp8, + &m68008_device::move_w_das_dad_dp8, + &m68008_device::move_w_dais_dad_dp8, + &m68008_device::move_w_adr16_dad_dp8, + &m68008_device::move_w_adr32_dad_dp8, + &m68008_device::move_w_dpc_dad_dp8, + &m68008_device::move_w_dpci_dad_dp8, + &m68008_device::move_w_imm16_dad_dp8, + &m68008_device::move_w_ds_daid_dp8, + &m68008_device::move_w_as_daid_dp8, + &m68008_device::move_w_ais_daid_dp8, + &m68008_device::move_w_aips_daid_dp8, + &m68008_device::move_w_pais_daid_dp8, + &m68008_device::move_w_das_daid_dp8, + &m68008_device::move_w_dais_daid_dp8, + &m68008_device::move_w_adr16_daid_dp8, + &m68008_device::move_w_adr32_daid_dp8, + &m68008_device::move_w_dpc_daid_dp8, + &m68008_device::move_w_dpci_daid_dp8, + &m68008_device::move_w_imm16_daid_dp8, + &m68008_device::move_w_ds_adr16_dp8, + &m68008_device::move_w_as_adr16_dp8, + &m68008_device::move_w_ais_adr16_dp8, + &m68008_device::move_w_aips_adr16_dp8, + &m68008_device::move_w_pais_adr16_dp8, + &m68008_device::move_w_das_adr16_dp8, + &m68008_device::move_w_dais_adr16_dp8, + &m68008_device::move_w_adr16_adr16_dp8, + &m68008_device::move_w_adr32_adr16_dp8, + &m68008_device::move_w_dpc_adr16_dp8, + &m68008_device::move_w_dpci_adr16_dp8, + &m68008_device::move_w_imm16_adr16_dp8, + &m68008_device::move_w_ds_adr32_dp8, + &m68008_device::move_w_as_adr32_dp8, + &m68008_device::move_w_ais_adr32_dp8, + &m68008_device::move_w_aips_adr32_dp8, + &m68008_device::move_w_pais_adr32_dp8, + &m68008_device::move_w_das_adr32_dp8, + &m68008_device::move_w_dais_adr32_dp8, + &m68008_device::move_w_adr16_adr32_dp8, + &m68008_device::move_w_adr32_adr32_dp8, + &m68008_device::move_w_dpc_adr32_dp8, + &m68008_device::move_w_dpci_adr32_dp8, + &m68008_device::move_w_imm16_adr32_dp8, + &m68008_device::negx_b_ds_dp8, + &m68008_device::negx_b_ais_dp8, + &m68008_device::negx_b_aips_dp8, + &m68008_device::negx_b_pais_dp8, + &m68008_device::negx_b_das_dp8, + &m68008_device::negx_b_dais_dp8, + &m68008_device::negx_b_adr16_dp8, + &m68008_device::negx_b_adr32_dp8, + &m68008_device::negx_w_ds_dp8, + &m68008_device::negx_w_ais_dp8, + &m68008_device::negx_w_aips_dp8, + &m68008_device::negx_w_pais_dp8, + &m68008_device::negx_w_das_dp8, + &m68008_device::negx_w_dais_dp8, + &m68008_device::negx_w_adr16_dp8, + &m68008_device::negx_w_adr32_dp8, + &m68008_device::negx_l_ds_dp8, + &m68008_device::negx_l_ais_dp8, + &m68008_device::negx_l_aips_dp8, + &m68008_device::negx_l_pais_dp8, + &m68008_device::negx_l_das_dp8, + &m68008_device::negx_l_dais_dp8, + &m68008_device::negx_l_adr16_dp8, + &m68008_device::negx_l_adr32_dp8, + &m68008_device::move_sr_ds_dp8, + &m68008_device::move_sr_ais_dp8, + &m68008_device::move_sr_aips_dp8, + &m68008_device::move_sr_pais_dp8, + &m68008_device::move_sr_das_dp8, + &m68008_device::move_sr_dais_dp8, + &m68008_device::move_sr_adr16_dp8, + &m68008_device::move_sr_adr32_dp8, + &m68008_device::chk_w_ds_dd_dp8, + &m68008_device::chk_w_ais_dd_dp8, + &m68008_device::chk_w_aips_dd_dp8, + &m68008_device::chk_w_pais_dd_dp8, + &m68008_device::chk_w_das_dd_dp8, + &m68008_device::chk_w_dais_dd_dp8, + &m68008_device::chk_w_adr16_dd_dp8, + &m68008_device::chk_w_adr32_dd_dp8, + &m68008_device::chk_w_dpc_dd_dp8, + &m68008_device::chk_w_dpci_dd_dp8, + &m68008_device::chk_w_imm16_dd_dp8, + &m68008_device::lea_ais_ad_dp8, + &m68008_device::lea_das_ad_dp8, + &m68008_device::lea_dais_ad_dp8, + &m68008_device::lea_adr16_ad_dp8, + &m68008_device::lea_adr32_ad_dp8, + &m68008_device::lea_dpc_ad_dp8, + &m68008_device::lea_dpci_ad_dp8, + &m68008_device::clr_b_ds_dp8, + &m68008_device::clr_b_ais_dp8, + &m68008_device::clr_b_aips_dp8, + &m68008_device::clr_b_pais_dp8, + &m68008_device::clr_b_das_dp8, + &m68008_device::clr_b_dais_dp8, + &m68008_device::clr_b_adr16_dp8, + &m68008_device::clr_b_adr32_dp8, + &m68008_device::clr_w_ds_dp8, + &m68008_device::clr_w_ais_dp8, + &m68008_device::clr_w_aips_dp8, + &m68008_device::clr_w_pais_dp8, + &m68008_device::clr_w_das_dp8, + &m68008_device::clr_w_dais_dp8, + &m68008_device::clr_w_adr16_dp8, + &m68008_device::clr_w_adr32_dp8, + &m68008_device::clr_l_ds_dp8, + &m68008_device::clr_l_ais_dp8, + &m68008_device::clr_l_aips_dp8, + &m68008_device::clr_l_pais_dp8, + &m68008_device::clr_l_das_dp8, + &m68008_device::clr_l_dais_dp8, + &m68008_device::clr_l_adr16_dp8, + &m68008_device::clr_l_adr32_dp8, + &m68008_device::neg_b_ds_dp8, + &m68008_device::neg_b_ais_dp8, + &m68008_device::neg_b_aips_dp8, + &m68008_device::neg_b_pais_dp8, + &m68008_device::neg_b_das_dp8, + &m68008_device::neg_b_dais_dp8, + &m68008_device::neg_b_adr16_dp8, + &m68008_device::neg_b_adr32_dp8, + &m68008_device::neg_w_ds_dp8, + &m68008_device::neg_w_ais_dp8, + &m68008_device::neg_w_aips_dp8, + &m68008_device::neg_w_pais_dp8, + &m68008_device::neg_w_das_dp8, + &m68008_device::neg_w_dais_dp8, + &m68008_device::neg_w_adr16_dp8, + &m68008_device::neg_w_adr32_dp8, + &m68008_device::neg_l_ds_dp8, + &m68008_device::neg_l_ais_dp8, + &m68008_device::neg_l_aips_dp8, + &m68008_device::neg_l_pais_dp8, + &m68008_device::neg_l_das_dp8, + &m68008_device::neg_l_dais_dp8, + &m68008_device::neg_l_adr16_dp8, + &m68008_device::neg_l_adr32_dp8, + &m68008_device::move_ds_ccr_dp8, + &m68008_device::move_ais_ccr_dp8, + &m68008_device::move_aips_ccr_dp8, + &m68008_device::move_pais_ccr_dp8, + &m68008_device::move_das_ccr_dp8, + &m68008_device::move_dais_ccr_dp8, + &m68008_device::move_adr16_ccr_dp8, + &m68008_device::move_adr32_ccr_dp8, + &m68008_device::move_dpc_ccr_dp8, + &m68008_device::move_dpci_ccr_dp8, + &m68008_device::move_imm8_ccr_dp8, + &m68008_device::not_b_ds_dp8, + &m68008_device::not_b_ais_dp8, + &m68008_device::not_b_aips_dp8, + &m68008_device::not_b_pais_dp8, + &m68008_device::not_b_das_dp8, + &m68008_device::not_b_dais_dp8, + &m68008_device::not_b_adr16_dp8, + &m68008_device::not_b_adr32_dp8, + &m68008_device::not_w_ds_dp8, + &m68008_device::not_w_ais_dp8, + &m68008_device::not_w_aips_dp8, + &m68008_device::not_w_pais_dp8, + &m68008_device::not_w_das_dp8, + &m68008_device::not_w_dais_dp8, + &m68008_device::not_w_adr16_dp8, + &m68008_device::not_w_adr32_dp8, + &m68008_device::not_l_ds_dp8, + &m68008_device::not_l_ais_dp8, + &m68008_device::not_l_aips_dp8, + &m68008_device::not_l_pais_dp8, + &m68008_device::not_l_das_dp8, + &m68008_device::not_l_dais_dp8, + &m68008_device::not_l_adr16_dp8, + &m68008_device::not_l_adr32_dp8, + &m68008_device::move_ds_sr_dp8, + &m68008_device::move_ais_sr_dp8, + &m68008_device::move_aips_sr_dp8, + &m68008_device::move_pais_sr_dp8, + &m68008_device::move_das_sr_dp8, + &m68008_device::move_dais_sr_dp8, + &m68008_device::move_adr16_sr_dp8, + &m68008_device::move_adr32_sr_dp8, + &m68008_device::move_dpc_sr_dp8, + &m68008_device::move_dpci_sr_dp8, + &m68008_device::move_i16u_sr_dp8, + &m68008_device::nbcd_b_ds_dp8, + &m68008_device::nbcd_b_ais_dp8, + &m68008_device::nbcd_b_aips_dp8, + &m68008_device::nbcd_b_pais_dp8, + &m68008_device::nbcd_b_das_dp8, + &m68008_device::nbcd_b_dais_dp8, + &m68008_device::nbcd_b_adr16_dp8, + &m68008_device::nbcd_b_adr32_dp8, + &m68008_device::swap_ds_dp8, + &m68008_device::pea_ais_dp8, + &m68008_device::pea_das_dp8, + &m68008_device::pea_dais_dp8, + &m68008_device::pea_adr16_dp8, + &m68008_device::pea_adr32_dp8, + &m68008_device::pea_dpc_dp8, + &m68008_device::pea_dpci_dp8, + &m68008_device::ext_w_ds_dp8, + &m68008_device::movem_w_list_ais_dp8, + &m68008_device::movem_w_listp_pais_dp8, + &m68008_device::movem_w_list_das_dp8, + &m68008_device::movem_w_list_dais_dp8, + &m68008_device::movem_w_list_adr16_dp8, + &m68008_device::movem_w_list_adr32_dp8, + &m68008_device::ext_l_ds_dp8, + &m68008_device::movem_l_list_ais_dp8, + &m68008_device::movem_l_listp_pais_dp8, + &m68008_device::movem_l_list_das_dp8, + &m68008_device::movem_l_list_dais_dp8, + &m68008_device::movem_l_list_adr16_dp8, + &m68008_device::movem_l_list_adr32_dp8, + &m68008_device::tst_b_ds_dp8, + &m68008_device::tst_b_ais_dp8, + &m68008_device::tst_b_aips_dp8, + &m68008_device::tst_b_pais_dp8, + &m68008_device::tst_b_das_dp8, + &m68008_device::tst_b_dais_dp8, + &m68008_device::tst_b_adr16_dp8, + &m68008_device::tst_b_adr32_dp8, + &m68008_device::tst_w_ds_dp8, + &m68008_device::tst_w_ais_dp8, + &m68008_device::tst_w_aips_dp8, + &m68008_device::tst_w_pais_dp8, + &m68008_device::tst_w_das_dp8, + &m68008_device::tst_w_dais_dp8, + &m68008_device::tst_w_adr16_dp8, + &m68008_device::tst_w_adr32_dp8, + &m68008_device::tst_l_ds_dp8, + &m68008_device::tst_l_ais_dp8, + &m68008_device::tst_l_aips_dp8, + &m68008_device::tst_l_pais_dp8, + &m68008_device::tst_l_das_dp8, + &m68008_device::tst_l_dais_dp8, + &m68008_device::tst_l_adr16_dp8, + &m68008_device::tst_l_adr32_dp8, + &m68008_device::tas_ds_dp8, + &m68008_device::tas_ais_dp8, + &m68008_device::tas_aips_dp8, + &m68008_device::tas_pais_dp8, + &m68008_device::tas_das_dp8, + &m68008_device::tas_dais_dp8, + &m68008_device::tas_adr16_dp8, + &m68008_device::tas_adr32_dp8, + &m68008_device::movem_w_ais_list_dp8, + &m68008_device::movem_w_aips_list_dp8, + &m68008_device::movem_w_das_list_dp8, + &m68008_device::movem_w_dais_list_dp8, + &m68008_device::movem_w_adr16_list_dp8, + &m68008_device::movem_w_adr32_list_dp8, + &m68008_device::movem_w_dpc_list_dp8, + &m68008_device::movem_w_dpci_list_dp8, + &m68008_device::movem_l_ais_list_dp8, + &m68008_device::movem_l_aips_list_dp8, + &m68008_device::movem_l_das_list_dp8, + &m68008_device::movem_l_dais_list_dp8, + &m68008_device::movem_l_adr16_list_dp8, + &m68008_device::movem_l_adr32_list_dp8, + &m68008_device::movem_l_dpc_list_dp8, + &m68008_device::movem_l_dpci_list_dp8, + &m68008_device::trap_imm4_dp8, + &m68008_device::link_as_imm16_dp8, + &m68008_device::unlk_as_dp8, + &m68008_device::move_as_usp_dp8, + &m68008_device::move_usp_as_dp8, + &m68008_device::reset_dp8, + &m68008_device::nop_dp8, + &m68008_device::stop_i16u_dp8, + &m68008_device::rte_dp8, + &m68008_device::rts_dp8, + &m68008_device::trapv_dp8, + &m68008_device::rtr_dp8, + &m68008_device::jsr_ais_dp8, + &m68008_device::jsr_das_dp8, + &m68008_device::jsr_dais_dp8, + &m68008_device::jsr_adr16_dp8, + &m68008_device::jsr_adr32_dp8, + &m68008_device::jsr_dpc_dp8, + &m68008_device::jsr_dpci_dp8, + &m68008_device::jmp_ais_dp8, + &m68008_device::jmp_das_dp8, + &m68008_device::jmp_dais_dp8, + &m68008_device::jmp_adr16_dp8, + &m68008_device::jmp_adr32_dp8, + &m68008_device::jmp_dpc_dp8, + &m68008_device::jmp_dpci_dp8, + &m68008_device::addq_b_imm3_ds_dp8, + &m68008_device::addq_b_imm3_ais_dp8, + &m68008_device::addq_b_imm3_aips_dp8, + &m68008_device::addq_b_imm3_pais_dp8, + &m68008_device::addq_b_imm3_das_dp8, + &m68008_device::addq_b_imm3_dais_dp8, + &m68008_device::addq_b_imm3_adr16_dp8, + &m68008_device::addq_b_imm3_adr32_dp8, + &m68008_device::addq_w_imm3_ds_dp8, + &m68008_device::addq_w_imm3_as_dp8, + &m68008_device::addq_w_imm3_ais_dp8, + &m68008_device::addq_w_imm3_aips_dp8, + &m68008_device::addq_w_imm3_pais_dp8, + &m68008_device::addq_w_imm3_das_dp8, + &m68008_device::addq_w_imm3_dais_dp8, + &m68008_device::addq_w_imm3_adr16_dp8, + &m68008_device::addq_w_imm3_adr32_dp8, + &m68008_device::addq_l_imm3_ds_dp8, + &m68008_device::addq_l_imm3_as_dp8, + &m68008_device::addq_l_imm3_ais_dp8, + &m68008_device::addq_l_imm3_aips_dp8, + &m68008_device::addq_l_imm3_pais_dp8, + &m68008_device::addq_l_imm3_das_dp8, + &m68008_device::addq_l_imm3_dais_dp8, + &m68008_device::addq_l_imm3_adr16_dp8, + &m68008_device::addq_l_imm3_adr32_dp8, + &m68008_device::st_ds_dp8, + &m68008_device::dbt_ds_rel16_dp8, + &m68008_device::st_ais_dp8, + &m68008_device::st_aips_dp8, + &m68008_device::st_pais_dp8, + &m68008_device::st_das_dp8, + &m68008_device::st_dais_dp8, + &m68008_device::st_adr16_dp8, + &m68008_device::st_adr32_dp8, + &m68008_device::subq_b_imm3_ds_dp8, + &m68008_device::subq_b_imm3_ais_dp8, + &m68008_device::subq_b_imm3_aips_dp8, + &m68008_device::subq_b_imm3_pais_dp8, + &m68008_device::subq_b_imm3_das_dp8, + &m68008_device::subq_b_imm3_dais_dp8, + &m68008_device::subq_b_imm3_adr16_dp8, + &m68008_device::subq_b_imm3_adr32_dp8, + &m68008_device::subq_w_imm3_ds_dp8, + &m68008_device::subq_w_imm3_as_dp8, + &m68008_device::subq_w_imm3_ais_dp8, + &m68008_device::subq_w_imm3_aips_dp8, + &m68008_device::subq_w_imm3_pais_dp8, + &m68008_device::subq_w_imm3_das_dp8, + &m68008_device::subq_w_imm3_dais_dp8, + &m68008_device::subq_w_imm3_adr16_dp8, + &m68008_device::subq_w_imm3_adr32_dp8, + &m68008_device::subq_l_imm3_ds_dp8, + &m68008_device::subq_l_imm3_as_dp8, + &m68008_device::subq_l_imm3_ais_dp8, + &m68008_device::subq_l_imm3_aips_dp8, + &m68008_device::subq_l_imm3_pais_dp8, + &m68008_device::subq_l_imm3_das_dp8, + &m68008_device::subq_l_imm3_dais_dp8, + &m68008_device::subq_l_imm3_adr16_dp8, + &m68008_device::subq_l_imm3_adr32_dp8, + &m68008_device::sf_ds_dp8, + &m68008_device::dbra_ds_rel16_dp8, + &m68008_device::sf_ais_dp8, + &m68008_device::sf_aips_dp8, + &m68008_device::sf_pais_dp8, + &m68008_device::sf_das_dp8, + &m68008_device::sf_dais_dp8, + &m68008_device::sf_adr16_dp8, + &m68008_device::sf_adr32_dp8, + &m68008_device::shi_ds_dp8, + &m68008_device::dbhi_ds_rel16_dp8, + &m68008_device::shi_ais_dp8, + &m68008_device::shi_aips_dp8, + &m68008_device::shi_pais_dp8, + &m68008_device::shi_das_dp8, + &m68008_device::shi_dais_dp8, + &m68008_device::shi_adr16_dp8, + &m68008_device::shi_adr32_dp8, + &m68008_device::sls_ds_dp8, + &m68008_device::dbls_ds_rel16_dp8, + &m68008_device::sls_ais_dp8, + &m68008_device::sls_aips_dp8, + &m68008_device::sls_pais_dp8, + &m68008_device::sls_das_dp8, + &m68008_device::sls_dais_dp8, + &m68008_device::sls_adr16_dp8, + &m68008_device::sls_adr32_dp8, + &m68008_device::scc_ds_dp8, + &m68008_device::dbcc_ds_rel16_dp8, + &m68008_device::scc_ais_dp8, + &m68008_device::scc_aips_dp8, + &m68008_device::scc_pais_dp8, + &m68008_device::scc_das_dp8, + &m68008_device::scc_dais_dp8, + &m68008_device::scc_adr16_dp8, + &m68008_device::scc_adr32_dp8, + &m68008_device::scs_ds_dp8, + &m68008_device::dbcs_ds_rel16_dp8, + &m68008_device::scs_ais_dp8, + &m68008_device::scs_aips_dp8, + &m68008_device::scs_pais_dp8, + &m68008_device::scs_das_dp8, + &m68008_device::scs_dais_dp8, + &m68008_device::scs_adr16_dp8, + &m68008_device::scs_adr32_dp8, + &m68008_device::sne_ds_dp8, + &m68008_device::dbne_ds_rel16_dp8, + &m68008_device::sne_ais_dp8, + &m68008_device::sne_aips_dp8, + &m68008_device::sne_pais_dp8, + &m68008_device::sne_das_dp8, + &m68008_device::sne_dais_dp8, + &m68008_device::sne_adr16_dp8, + &m68008_device::sne_adr32_dp8, + &m68008_device::seq_ds_dp8, + &m68008_device::dbeq_ds_rel16_dp8, + &m68008_device::seq_ais_dp8, + &m68008_device::seq_aips_dp8, + &m68008_device::seq_pais_dp8, + &m68008_device::seq_das_dp8, + &m68008_device::seq_dais_dp8, + &m68008_device::seq_adr16_dp8, + &m68008_device::seq_adr32_dp8, + &m68008_device::svc_ds_dp8, + &m68008_device::dbvc_ds_rel16_dp8, + &m68008_device::svc_ais_dp8, + &m68008_device::svc_aips_dp8, + &m68008_device::svc_pais_dp8, + &m68008_device::svc_das_dp8, + &m68008_device::svc_dais_dp8, + &m68008_device::svc_adr16_dp8, + &m68008_device::svc_adr32_dp8, + &m68008_device::svs_ds_dp8, + &m68008_device::dbvs_ds_rel16_dp8, + &m68008_device::svs_ais_dp8, + &m68008_device::svs_aips_dp8, + &m68008_device::svs_pais_dp8, + &m68008_device::svs_das_dp8, + &m68008_device::svs_dais_dp8, + &m68008_device::svs_adr16_dp8, + &m68008_device::svs_adr32_dp8, + &m68008_device::spl_ds_dp8, + &m68008_device::dbpl_ds_rel16_dp8, + &m68008_device::spl_ais_dp8, + &m68008_device::spl_aips_dp8, + &m68008_device::spl_pais_dp8, + &m68008_device::spl_das_dp8, + &m68008_device::spl_dais_dp8, + &m68008_device::spl_adr16_dp8, + &m68008_device::spl_adr32_dp8, + &m68008_device::smi_ds_dp8, + &m68008_device::dbmi_ds_rel16_dp8, + &m68008_device::smi_ais_dp8, + &m68008_device::smi_aips_dp8, + &m68008_device::smi_pais_dp8, + &m68008_device::smi_das_dp8, + &m68008_device::smi_dais_dp8, + &m68008_device::smi_adr16_dp8, + &m68008_device::smi_adr32_dp8, + &m68008_device::sge_ds_dp8, + &m68008_device::dbge_ds_rel16_dp8, + &m68008_device::sge_ais_dp8, + &m68008_device::sge_aips_dp8, + &m68008_device::sge_pais_dp8, + &m68008_device::sge_das_dp8, + &m68008_device::sge_dais_dp8, + &m68008_device::sge_adr16_dp8, + &m68008_device::sge_adr32_dp8, + &m68008_device::slt_ds_dp8, + &m68008_device::dblt_ds_rel16_dp8, + &m68008_device::slt_ais_dp8, + &m68008_device::slt_aips_dp8, + &m68008_device::slt_pais_dp8, + &m68008_device::slt_das_dp8, + &m68008_device::slt_dais_dp8, + &m68008_device::slt_adr16_dp8, + &m68008_device::slt_adr32_dp8, + &m68008_device::sgt_ds_dp8, + &m68008_device::dbgt_ds_rel16_dp8, + &m68008_device::sgt_ais_dp8, + &m68008_device::sgt_aips_dp8, + &m68008_device::sgt_pais_dp8, + &m68008_device::sgt_das_dp8, + &m68008_device::sgt_dais_dp8, + &m68008_device::sgt_adr16_dp8, + &m68008_device::sgt_adr32_dp8, + &m68008_device::sle_ds_dp8, + &m68008_device::dble_ds_rel16_dp8, + &m68008_device::sle_ais_dp8, + &m68008_device::sle_aips_dp8, + &m68008_device::sle_pais_dp8, + &m68008_device::sle_das_dp8, + &m68008_device::sle_dais_dp8, + &m68008_device::sle_adr16_dp8, + &m68008_device::sle_adr32_dp8, + &m68008_device::bra_rel16_dp8, + &m68008_device::bra_rel8_dp8, + &m68008_device::bsr_rel16_dp8, + &m68008_device::bsr_rel8_dp8, + &m68008_device::bhi_rel16_dp8, + &m68008_device::bhi_rel8_dp8, + &m68008_device::bls_rel16_dp8, + &m68008_device::bls_rel8_dp8, + &m68008_device::bcc_rel16_dp8, + &m68008_device::bcc_rel8_dp8, + &m68008_device::bcs_rel16_dp8, + &m68008_device::bcs_rel8_dp8, + &m68008_device::bne_rel16_dp8, + &m68008_device::bne_rel8_dp8, + &m68008_device::beq_rel16_dp8, + &m68008_device::beq_rel8_dp8, + &m68008_device::bvc_rel16_dp8, + &m68008_device::bvc_rel8_dp8, + &m68008_device::bvs_rel16_dp8, + &m68008_device::bvs_rel8_dp8, + &m68008_device::bpl_rel16_dp8, + &m68008_device::bpl_rel8_dp8, + &m68008_device::bmi_rel16_dp8, + &m68008_device::bmi_rel8_dp8, + &m68008_device::bge_rel16_dp8, + &m68008_device::bge_rel8_dp8, + &m68008_device::blt_rel16_dp8, + &m68008_device::blt_rel8_dp8, + &m68008_device::bgt_rel16_dp8, + &m68008_device::bgt_rel8_dp8, + &m68008_device::ble_rel16_dp8, + &m68008_device::ble_rel8_dp8, + &m68008_device::moveq_imm8o_dd_dp8, + &m68008_device::or_b_ds_dd_dp8, + &m68008_device::or_b_ais_dd_dp8, + &m68008_device::or_b_aips_dd_dp8, + &m68008_device::or_b_pais_dd_dp8, + &m68008_device::or_b_das_dd_dp8, + &m68008_device::or_b_dais_dd_dp8, + &m68008_device::or_b_adr16_dd_dp8, + &m68008_device::or_b_adr32_dd_dp8, + &m68008_device::or_b_dpc_dd_dp8, + &m68008_device::or_b_dpci_dd_dp8, + &m68008_device::or_b_imm8_dd_dp8, + &m68008_device::or_w_ds_dd_dp8, + &m68008_device::or_w_ais_dd_dp8, + &m68008_device::or_w_aips_dd_dp8, + &m68008_device::or_w_pais_dd_dp8, + &m68008_device::or_w_das_dd_dp8, + &m68008_device::or_w_dais_dd_dp8, + &m68008_device::or_w_adr16_dd_dp8, + &m68008_device::or_w_adr32_dd_dp8, + &m68008_device::or_w_dpc_dd_dp8, + &m68008_device::or_w_dpci_dd_dp8, + &m68008_device::or_w_imm16_dd_dp8, + &m68008_device::or_l_ds_dd_dp8, + &m68008_device::or_l_ais_dd_dp8, + &m68008_device::or_l_aips_dd_dp8, + &m68008_device::or_l_pais_dd_dp8, + &m68008_device::or_l_das_dd_dp8, + &m68008_device::or_l_dais_dd_dp8, + &m68008_device::or_l_adr16_dd_dp8, + &m68008_device::or_l_adr32_dd_dp8, + &m68008_device::or_l_dpc_dd_dp8, + &m68008_device::or_l_dpci_dd_dp8, + &m68008_device::or_l_imm32_dd_dp8, + &m68008_device::divu_w_ds_dd_dp8, + &m68008_device::divu_w_ais_dd_dp8, + &m68008_device::divu_w_aips_dd_dp8, + &m68008_device::divu_w_pais_dd_dp8, + &m68008_device::divu_w_das_dd_dp8, + &m68008_device::divu_w_dais_dd_dp8, + &m68008_device::divu_w_adr16_dd_dp8, + &m68008_device::divu_w_adr32_dd_dp8, + &m68008_device::divu_w_dpc_dd_dp8, + &m68008_device::divu_w_dpci_dd_dp8, + &m68008_device::divu_w_imm16_dd_dp8, + &m68008_device::sbcd_ds_dd_dp8, + &m68008_device::sbcd_pais_paid_dp8, + &m68008_device::or_b_dd_ais_dp8, + &m68008_device::or_b_dd_aips_dp8, + &m68008_device::or_b_dd_pais_dp8, + &m68008_device::or_b_dd_das_dp8, + &m68008_device::or_b_dd_dais_dp8, + &m68008_device::or_b_dd_adr16_dp8, + &m68008_device::or_b_dd_adr32_dp8, + &m68008_device::or_w_dd_ais_dp8, + &m68008_device::or_w_dd_aips_dp8, + &m68008_device::or_w_dd_pais_dp8, + &m68008_device::or_w_dd_das_dp8, + &m68008_device::or_w_dd_dais_dp8, + &m68008_device::or_w_dd_adr16_dp8, + &m68008_device::or_w_dd_adr32_dp8, + &m68008_device::or_l_dd_ais_dp8, + &m68008_device::or_l_dd_aips_dp8, + &m68008_device::or_l_dd_pais_dp8, + &m68008_device::or_l_dd_das_dp8, + &m68008_device::or_l_dd_dais_dp8, + &m68008_device::or_l_dd_adr16_dp8, + &m68008_device::or_l_dd_adr32_dp8, + &m68008_device::divs_w_ds_dd_dp8, + &m68008_device::divs_w_ais_dd_dp8, + &m68008_device::divs_w_aips_dd_dp8, + &m68008_device::divs_w_pais_dd_dp8, + &m68008_device::divs_w_das_dd_dp8, + &m68008_device::divs_w_dais_dd_dp8, + &m68008_device::divs_w_adr16_dd_dp8, + &m68008_device::divs_w_adr32_dd_dp8, + &m68008_device::divs_w_dpc_dd_dp8, + &m68008_device::divs_w_dpci_dd_dp8, + &m68008_device::divs_w_imm16_dd_dp8, + &m68008_device::sub_b_ds_dd_dp8, + &m68008_device::sub_b_ais_dd_dp8, + &m68008_device::sub_b_aips_dd_dp8, + &m68008_device::sub_b_pais_dd_dp8, + &m68008_device::sub_b_das_dd_dp8, + &m68008_device::sub_b_dais_dd_dp8, + &m68008_device::sub_b_adr16_dd_dp8, + &m68008_device::sub_b_adr32_dd_dp8, + &m68008_device::sub_b_dpc_dd_dp8, + &m68008_device::sub_b_dpci_dd_dp8, + &m68008_device::sub_b_imm8_dd_dp8, + &m68008_device::sub_w_ds_dd_dp8, + &m68008_device::sub_w_as_dd_dp8, + &m68008_device::sub_w_ais_dd_dp8, + &m68008_device::sub_w_aips_dd_dp8, + &m68008_device::sub_w_pais_dd_dp8, + &m68008_device::sub_w_das_dd_dp8, + &m68008_device::sub_w_dais_dd_dp8, + &m68008_device::sub_w_adr16_dd_dp8, + &m68008_device::sub_w_adr32_dd_dp8, + &m68008_device::sub_w_dpc_dd_dp8, + &m68008_device::sub_w_dpci_dd_dp8, + &m68008_device::sub_w_imm16_dd_dp8, + &m68008_device::sub_l_ds_dd_dp8, + &m68008_device::sub_l_as_dd_dp8, + &m68008_device::sub_l_ais_dd_dp8, + &m68008_device::sub_l_aips_dd_dp8, + &m68008_device::sub_l_pais_dd_dp8, + &m68008_device::sub_l_das_dd_dp8, + &m68008_device::sub_l_dais_dd_dp8, + &m68008_device::sub_l_adr16_dd_dp8, + &m68008_device::sub_l_adr32_dd_dp8, + &m68008_device::sub_l_dpc_dd_dp8, + &m68008_device::sub_l_dpci_dd_dp8, + &m68008_device::sub_l_imm32_dd_dp8, + &m68008_device::suba_w_ds_ad_dp8, + &m68008_device::suba_w_as_ad_dp8, + &m68008_device::suba_w_ais_ad_dp8, + &m68008_device::suba_w_aips_ad_dp8, + &m68008_device::suba_w_pais_ad_dp8, + &m68008_device::suba_w_das_ad_dp8, + &m68008_device::suba_w_dais_ad_dp8, + &m68008_device::suba_w_adr16_ad_dp8, + &m68008_device::suba_w_adr32_ad_dp8, + &m68008_device::suba_w_dpc_ad_dp8, + &m68008_device::suba_w_dpci_ad_dp8, + &m68008_device::suba_w_imm16_ad_dp8, + &m68008_device::subx_b_ds_dd_dp8, + &m68008_device::subx_b_pais_paid_dp8, + &m68008_device::sub_b_dd_ais_dp8, + &m68008_device::sub_b_dd_aips_dp8, + &m68008_device::sub_b_dd_pais_dp8, + &m68008_device::sub_b_dd_das_dp8, + &m68008_device::sub_b_dd_dais_dp8, + &m68008_device::sub_b_dd_adr16_dp8, + &m68008_device::sub_b_dd_adr32_dp8, + &m68008_device::subx_w_ds_dd_dp8, + &m68008_device::subx_w_pais_paid_dp8, + &m68008_device::sub_w_dd_ais_dp8, + &m68008_device::sub_w_dd_aips_dp8, + &m68008_device::sub_w_dd_pais_dp8, + &m68008_device::sub_w_dd_das_dp8, + &m68008_device::sub_w_dd_dais_dp8, + &m68008_device::sub_w_dd_adr16_dp8, + &m68008_device::sub_w_dd_adr32_dp8, + &m68008_device::subx_l_ds_dd_dp8, + &m68008_device::subx_l_pais_paid_dp8, + &m68008_device::sub_l_dd_ais_dp8, + &m68008_device::sub_l_dd_aips_dp8, + &m68008_device::sub_l_dd_pais_dp8, + &m68008_device::sub_l_dd_das_dp8, + &m68008_device::sub_l_dd_dais_dp8, + &m68008_device::sub_l_dd_adr16_dp8, + &m68008_device::sub_l_dd_adr32_dp8, + &m68008_device::suba_l_ds_ad_dp8, + &m68008_device::suba_l_as_ad_dp8, + &m68008_device::suba_l_ais_ad_dp8, + &m68008_device::suba_l_aips_ad_dp8, + &m68008_device::suba_l_pais_ad_dp8, + &m68008_device::suba_l_das_ad_dp8, + &m68008_device::suba_l_dais_ad_dp8, + &m68008_device::suba_l_adr16_ad_dp8, + &m68008_device::suba_l_adr32_ad_dp8, + &m68008_device::suba_l_dpc_ad_dp8, + &m68008_device::suba_l_dpci_ad_dp8, + &m68008_device::suba_l_imm32_ad_dp8, + &m68008_device::cmp_b_ds_dd_dp8, + &m68008_device::cmp_b_ais_dd_dp8, + &m68008_device::cmp_b_aips_dd_dp8, + &m68008_device::cmp_b_pais_dd_dp8, + &m68008_device::cmp_b_das_dd_dp8, + &m68008_device::cmp_b_dais_dd_dp8, + &m68008_device::cmp_b_adr16_dd_dp8, + &m68008_device::cmp_b_adr32_dd_dp8, + &m68008_device::cmp_b_dpc_dd_dp8, + &m68008_device::cmp_b_dpci_dd_dp8, + &m68008_device::cmp_b_imm8_dd_dp8, + &m68008_device::cmp_w_ds_dd_dp8, + &m68008_device::cmp_w_as_dd_dp8, + &m68008_device::cmp_w_ais_dd_dp8, + &m68008_device::cmp_w_aips_dd_dp8, + &m68008_device::cmp_w_pais_dd_dp8, + &m68008_device::cmp_w_das_dd_dp8, + &m68008_device::cmp_w_dais_dd_dp8, + &m68008_device::cmp_w_adr16_dd_dp8, + &m68008_device::cmp_w_adr32_dd_dp8, + &m68008_device::cmp_w_dpc_dd_dp8, + &m68008_device::cmp_w_dpci_dd_dp8, + &m68008_device::cmp_w_imm16_dd_dp8, + &m68008_device::cmp_l_ds_dd_dp8, + &m68008_device::cmp_l_as_dd_dp8, + &m68008_device::cmp_l_ais_dd_dp8, + &m68008_device::cmp_l_aips_dd_dp8, + &m68008_device::cmp_l_pais_dd_dp8, + &m68008_device::cmp_l_das_dd_dp8, + &m68008_device::cmp_l_dais_dd_dp8, + &m68008_device::cmp_l_adr16_dd_dp8, + &m68008_device::cmp_l_adr32_dd_dp8, + &m68008_device::cmp_l_dpc_dd_dp8, + &m68008_device::cmp_l_dpci_dd_dp8, + &m68008_device::cmp_l_imm32_dd_dp8, + &m68008_device::cmpa_w_ds_ad_dp8, + &m68008_device::cmpa_w_as_ad_dp8, + &m68008_device::cmpa_w_ais_ad_dp8, + &m68008_device::cmpa_w_aips_ad_dp8, + &m68008_device::cmpa_w_pais_ad_dp8, + &m68008_device::cmpa_w_das_ad_dp8, + &m68008_device::cmpa_w_dais_ad_dp8, + &m68008_device::cmpa_w_adr16_ad_dp8, + &m68008_device::cmpa_w_adr32_ad_dp8, + &m68008_device::cmpa_w_dpc_ad_dp8, + &m68008_device::cmpa_w_dpci_ad_dp8, + &m68008_device::cmpa_w_imm16_ad_dp8, + &m68008_device::eor_b_dd_ds_dp8, + &m68008_device::cmpm_b_aips_aipd_dp8, + &m68008_device::eor_b_dd_ais_dp8, + &m68008_device::eor_b_dd_aips_dp8, + &m68008_device::eor_b_dd_pais_dp8, + &m68008_device::eor_b_dd_das_dp8, + &m68008_device::eor_b_dd_dais_dp8, + &m68008_device::eor_b_dd_adr16_dp8, + &m68008_device::eor_b_dd_adr32_dp8, + &m68008_device::eor_w_dd_ds_dp8, + &m68008_device::cmpm_w_aips_aipd_dp8, + &m68008_device::eor_w_dd_ais_dp8, + &m68008_device::eor_w_dd_aips_dp8, + &m68008_device::eor_w_dd_pais_dp8, + &m68008_device::eor_w_dd_das_dp8, + &m68008_device::eor_w_dd_dais_dp8, + &m68008_device::eor_w_dd_adr16_dp8, + &m68008_device::eor_w_dd_adr32_dp8, + &m68008_device::eor_l_dd_ds_dp8, + &m68008_device::cmpm_l_aips_aipd_dp8, + &m68008_device::eor_l_dd_ais_dp8, + &m68008_device::eor_l_dd_aips_dp8, + &m68008_device::eor_l_dd_pais_dp8, + &m68008_device::eor_l_dd_das_dp8, + &m68008_device::eor_l_dd_dais_dp8, + &m68008_device::eor_l_dd_adr16_dp8, + &m68008_device::eor_l_dd_adr32_dp8, + &m68008_device::cmpa_l_ds_ad_dp8, + &m68008_device::cmpa_l_as_ad_dp8, + &m68008_device::cmpa_l_ais_ad_dp8, + &m68008_device::cmpa_l_aips_ad_dp8, + &m68008_device::cmpa_l_pais_ad_dp8, + &m68008_device::cmpa_l_das_ad_dp8, + &m68008_device::cmpa_l_dais_ad_dp8, + &m68008_device::cmpa_l_adr16_ad_dp8, + &m68008_device::cmpa_l_adr32_ad_dp8, + &m68008_device::cmpa_l_dpc_ad_dp8, + &m68008_device::cmpa_l_dpci_ad_dp8, + &m68008_device::cmpa_l_imm32_ad_dp8, + &m68008_device::and_b_ds_dd_dp8, + &m68008_device::and_b_ais_dd_dp8, + &m68008_device::and_b_aips_dd_dp8, + &m68008_device::and_b_pais_dd_dp8, + &m68008_device::and_b_das_dd_dp8, + &m68008_device::and_b_dais_dd_dp8, + &m68008_device::and_b_adr16_dd_dp8, + &m68008_device::and_b_adr32_dd_dp8, + &m68008_device::and_b_dpc_dd_dp8, + &m68008_device::and_b_dpci_dd_dp8, + &m68008_device::and_b_imm8_dd_dp8, + &m68008_device::and_w_ds_dd_dp8, + &m68008_device::and_w_ais_dd_dp8, + &m68008_device::and_w_aips_dd_dp8, + &m68008_device::and_w_pais_dd_dp8, + &m68008_device::and_w_das_dd_dp8, + &m68008_device::and_w_dais_dd_dp8, + &m68008_device::and_w_adr16_dd_dp8, + &m68008_device::and_w_adr32_dd_dp8, + &m68008_device::and_w_dpc_dd_dp8, + &m68008_device::and_w_dpci_dd_dp8, + &m68008_device::and_w_imm16_dd_dp8, + &m68008_device::and_l_ds_dd_dp8, + &m68008_device::and_l_ais_dd_dp8, + &m68008_device::and_l_aips_dd_dp8, + &m68008_device::and_l_pais_dd_dp8, + &m68008_device::and_l_das_dd_dp8, + &m68008_device::and_l_dais_dd_dp8, + &m68008_device::and_l_adr16_dd_dp8, + &m68008_device::and_l_adr32_dd_dp8, + &m68008_device::and_l_dpc_dd_dp8, + &m68008_device::and_l_dpci_dd_dp8, + &m68008_device::and_l_imm32_dd_dp8, + &m68008_device::mulu_w_ds_dd_dp8, + &m68008_device::mulu_w_ais_dd_dp8, + &m68008_device::mulu_w_aips_dd_dp8, + &m68008_device::mulu_w_pais_dd_dp8, + &m68008_device::mulu_w_das_dd_dp8, + &m68008_device::mulu_w_dais_dd_dp8, + &m68008_device::mulu_w_adr16_dd_dp8, + &m68008_device::mulu_w_adr32_dd_dp8, + &m68008_device::mulu_w_dpc_dd_dp8, + &m68008_device::mulu_w_dpci_dd_dp8, + &m68008_device::mulu_w_imm16_dd_dp8, + &m68008_device::abcd_ds_dd_dp8, + &m68008_device::abcd_pais_paid_dp8, + &m68008_device::and_b_dd_ais_dp8, + &m68008_device::and_b_dd_aips_dp8, + &m68008_device::and_b_dd_pais_dp8, + &m68008_device::and_b_dd_das_dp8, + &m68008_device::and_b_dd_dais_dp8, + &m68008_device::and_b_dd_adr16_dp8, + &m68008_device::and_b_dd_adr32_dp8, + &m68008_device::exg_dd_ds_dp8, + &m68008_device::exg_ad_as_dp8, + &m68008_device::and_w_dd_ais_dp8, + &m68008_device::and_w_dd_aips_dp8, + &m68008_device::and_w_dd_pais_dp8, + &m68008_device::and_w_dd_das_dp8, + &m68008_device::and_w_dd_dais_dp8, + &m68008_device::and_w_dd_adr16_dp8, + &m68008_device::and_w_dd_adr32_dp8, + &m68008_device::exg_dd_as_dp8, + &m68008_device::and_l_dd_ais_dp8, + &m68008_device::and_l_dd_aips_dp8, + &m68008_device::and_l_dd_pais_dp8, + &m68008_device::and_l_dd_das_dp8, + &m68008_device::and_l_dd_dais_dp8, + &m68008_device::and_l_dd_adr16_dp8, + &m68008_device::and_l_dd_adr32_dp8, + &m68008_device::muls_w_ds_dd_dp8, + &m68008_device::muls_w_ais_dd_dp8, + &m68008_device::muls_w_aips_dd_dp8, + &m68008_device::muls_w_pais_dd_dp8, + &m68008_device::muls_w_das_dd_dp8, + &m68008_device::muls_w_dais_dd_dp8, + &m68008_device::muls_w_adr16_dd_dp8, + &m68008_device::muls_w_adr32_dd_dp8, + &m68008_device::muls_w_dpc_dd_dp8, + &m68008_device::muls_w_dpci_dd_dp8, + &m68008_device::muls_w_imm16_dd_dp8, + &m68008_device::add_b_ds_dd_dp8, + &m68008_device::add_b_ais_dd_dp8, + &m68008_device::add_b_aips_dd_dp8, + &m68008_device::add_b_pais_dd_dp8, + &m68008_device::add_b_das_dd_dp8, + &m68008_device::add_b_dais_dd_dp8, + &m68008_device::add_b_adr16_dd_dp8, + &m68008_device::add_b_adr32_dd_dp8, + &m68008_device::add_b_dpc_dd_dp8, + &m68008_device::add_b_dpci_dd_dp8, + &m68008_device::add_b_imm8_dd_dp8, + &m68008_device::add_w_ds_dd_dp8, + &m68008_device::add_w_as_dd_dp8, + &m68008_device::add_w_ais_dd_dp8, + &m68008_device::add_w_aips_dd_dp8, + &m68008_device::add_w_pais_dd_dp8, + &m68008_device::add_w_das_dd_dp8, + &m68008_device::add_w_dais_dd_dp8, + &m68008_device::add_w_adr16_dd_dp8, + &m68008_device::add_w_adr32_dd_dp8, + &m68008_device::add_w_dpc_dd_dp8, + &m68008_device::add_w_dpci_dd_dp8, + &m68008_device::add_w_imm16_dd_dp8, + &m68008_device::add_l_ds_dd_dp8, + &m68008_device::add_l_as_dd_dp8, + &m68008_device::add_l_ais_dd_dp8, + &m68008_device::add_l_aips_dd_dp8, + &m68008_device::add_l_pais_dd_dp8, + &m68008_device::add_l_das_dd_dp8, + &m68008_device::add_l_dais_dd_dp8, + &m68008_device::add_l_adr16_dd_dp8, + &m68008_device::add_l_adr32_dd_dp8, + &m68008_device::add_l_dpc_dd_dp8, + &m68008_device::add_l_dpci_dd_dp8, + &m68008_device::add_l_imm32_dd_dp8, + &m68008_device::adda_w_ds_ad_dp8, + &m68008_device::adda_w_as_ad_dp8, + &m68008_device::adda_w_ais_ad_dp8, + &m68008_device::adda_w_aips_ad_dp8, + &m68008_device::adda_w_pais_ad_dp8, + &m68008_device::adda_w_das_ad_dp8, + &m68008_device::adda_w_dais_ad_dp8, + &m68008_device::adda_w_adr16_ad_dp8, + &m68008_device::adda_w_adr32_ad_dp8, + &m68008_device::adda_w_dpc_ad_dp8, + &m68008_device::adda_w_dpci_ad_dp8, + &m68008_device::adda_w_imm16_ad_dp8, + &m68008_device::addx_b_ds_dd_dp8, + &m68008_device::addx_b_pais_paid_dp8, + &m68008_device::add_b_dd_ais_dp8, + &m68008_device::add_b_dd_aips_dp8, + &m68008_device::add_b_dd_pais_dp8, + &m68008_device::add_b_dd_das_dp8, + &m68008_device::add_b_dd_dais_dp8, + &m68008_device::add_b_dd_adr16_dp8, + &m68008_device::add_b_dd_adr32_dp8, + &m68008_device::addx_w_ds_dd_dp8, + &m68008_device::addx_w_pais_paid_dp8, + &m68008_device::add_w_dd_ais_dp8, + &m68008_device::add_w_dd_aips_dp8, + &m68008_device::add_w_dd_pais_dp8, + &m68008_device::add_w_dd_das_dp8, + &m68008_device::add_w_dd_dais_dp8, + &m68008_device::add_w_dd_adr16_dp8, + &m68008_device::add_w_dd_adr32_dp8, + &m68008_device::addx_l_ds_dd_dp8, + &m68008_device::addx_l_pais_paid_dp8, + &m68008_device::add_l_dd_ais_dp8, + &m68008_device::add_l_dd_aips_dp8, + &m68008_device::add_l_dd_pais_dp8, + &m68008_device::add_l_dd_das_dp8, + &m68008_device::add_l_dd_dais_dp8, + &m68008_device::add_l_dd_adr16_dp8, + &m68008_device::add_l_dd_adr32_dp8, + &m68008_device::adda_l_ds_ad_dp8, + &m68008_device::adda_l_as_ad_dp8, + &m68008_device::adda_l_ais_ad_dp8, + &m68008_device::adda_l_aips_ad_dp8, + &m68008_device::adda_l_pais_ad_dp8, + &m68008_device::adda_l_das_ad_dp8, + &m68008_device::adda_l_dais_ad_dp8, + &m68008_device::adda_l_adr16_ad_dp8, + &m68008_device::adda_l_adr32_ad_dp8, + &m68008_device::adda_l_dpc_ad_dp8, + &m68008_device::adda_l_dpci_ad_dp8, + &m68008_device::adda_l_imm32_ad_dp8, + &m68008_device::asr_b_imm3_ds_dp8, + &m68008_device::lsr_b_imm3_ds_dp8, + &m68008_device::roxr_b_imm3_ds_dp8, + &m68008_device::ror_b_imm3_ds_dp8, + &m68008_device::asr_b_dd_ds_dp8, + &m68008_device::lsr_b_dd_ds_dp8, + &m68008_device::roxr_b_dd_ds_dp8, + &m68008_device::ror_b_dd_ds_dp8, + &m68008_device::asr_w_imm3_ds_dp8, + &m68008_device::lsr_w_imm3_ds_dp8, + &m68008_device::roxr_w_imm3_ds_dp8, + &m68008_device::ror_w_imm3_ds_dp8, + &m68008_device::asr_w_dd_ds_dp8, + &m68008_device::lsr_w_dd_ds_dp8, + &m68008_device::roxr_w_dd_ds_dp8, + &m68008_device::ror_w_dd_ds_dp8, + &m68008_device::asr_l_imm3_ds_dp8, + &m68008_device::lsr_l_imm3_ds_dp8, + &m68008_device::roxr_l_imm3_ds_dp8, + &m68008_device::ror_l_imm3_ds_dp8, + &m68008_device::asr_l_dd_ds_dp8, + &m68008_device::lsr_l_dd_ds_dp8, + &m68008_device::roxr_l_dd_ds_dp8, + &m68008_device::ror_l_dd_ds_dp8, + &m68008_device::asr_ais_dp8, + &m68008_device::asr_aips_dp8, + &m68008_device::asr_pais_dp8, + &m68008_device::asr_das_dp8, + &m68008_device::asr_dais_dp8, + &m68008_device::asr_adr16_dp8, + &m68008_device::asr_adr32_dp8, + &m68008_device::asl_b_imm3_ds_dp8, + &m68008_device::lsl_b_imm3_ds_dp8, + &m68008_device::roxl_b_imm3_ds_dp8, + &m68008_device::rol_b_imm3_ds_dp8, + &m68008_device::asl_b_dd_ds_dp8, + &m68008_device::lsl_b_dd_ds_dp8, + &m68008_device::roxl_b_dd_ds_dp8, + &m68008_device::rol_b_dd_ds_dp8, + &m68008_device::asl_w_imm3_ds_dp8, + &m68008_device::lsl_w_imm3_ds_dp8, + &m68008_device::roxl_w_imm3_ds_dp8, + &m68008_device::rol_w_imm3_ds_dp8, + &m68008_device::asl_w_dd_ds_dp8, + &m68008_device::lsl_w_dd_ds_dp8, + &m68008_device::roxl_w_dd_ds_dp8, + &m68008_device::rol_w_dd_ds_dp8, + &m68008_device::asl_l_imm3_ds_dp8, + &m68008_device::lsl_l_imm3_ds_dp8, + &m68008_device::roxl_l_imm3_ds_dp8, + &m68008_device::rol_l_imm3_ds_dp8, + &m68008_device::asl_l_dd_ds_dp8, + &m68008_device::lsl_l_dd_ds_dp8, + &m68008_device::roxl_l_dd_ds_dp8, + &m68008_device::rol_l_dd_ds_dp8, + &m68008_device::asl_ais_dp8, + &m68008_device::asl_aips_dp8, + &m68008_device::asl_pais_dp8, + &m68008_device::asl_das_dp8, + &m68008_device::asl_dais_dp8, + &m68008_device::asl_adr16_dp8, + &m68008_device::asl_adr32_dp8, + &m68008_device::lsr_ais_dp8, + &m68008_device::lsr_aips_dp8, + &m68008_device::lsr_pais_dp8, + &m68008_device::lsr_das_dp8, + &m68008_device::lsr_dais_dp8, + &m68008_device::lsr_adr16_dp8, + &m68008_device::lsr_adr32_dp8, + &m68008_device::lsl_ais_dp8, + &m68008_device::lsl_aips_dp8, + &m68008_device::lsl_pais_dp8, + &m68008_device::lsl_das_dp8, + &m68008_device::lsl_dais_dp8, + &m68008_device::lsl_adr16_dp8, + &m68008_device::lsl_adr32_dp8, + &m68008_device::roxr_ais_dp8, + &m68008_device::roxr_aips_dp8, + &m68008_device::roxr_pais_dp8, + &m68008_device::roxr_das_dp8, + &m68008_device::roxr_dais_dp8, + &m68008_device::roxr_adr16_dp8, + &m68008_device::roxr_adr32_dp8, + &m68008_device::roxl_ais_dp8, + &m68008_device::roxl_aips_dp8, + &m68008_device::roxl_pais_dp8, + &m68008_device::roxl_das_dp8, + &m68008_device::roxl_dais_dp8, + &m68008_device::roxl_adr16_dp8, + &m68008_device::roxl_adr32_dp8, + &m68008_device::ror_ais_dp8, + &m68008_device::ror_aips_dp8, + &m68008_device::ror_pais_dp8, + &m68008_device::ror_das_dp8, + &m68008_device::ror_dais_dp8, + &m68008_device::ror_adr16_dp8, + &m68008_device::ror_adr32_dp8, + &m68008_device::rol_ais_dp8, + &m68008_device::rol_aips_dp8, + &m68008_device::rol_pais_dp8, + &m68008_device::rol_das_dp8, + &m68008_device::rol_dais_dp8, + &m68008_device::rol_adr16_dp8, + &m68008_device::rol_adr32_dp8, +}; diff --git a/src/devices/cpu/m68000/m68008-sif8.cpp b/src/devices/cpu/m68000/m68008-sif8.cpp new file mode 100644 index 00000000000..e8638ed88f0 --- /dev/null +++ b/src/devices/cpu/m68000/m68008-sif8.cpp @@ -0,0 +1,239435 @@ +// Instruction handlers for the m68000 (indirect, full, cpu) +// +// Generated by m68000gen.py sif8 m68000.lst m68008-sif8.cpp + +#include "emu.h" +#include "m68008.h" + +void m68008_device::state_reset_if8() +{ + // 002 rstp3 + m_icount -= 2; + // 296 rstp4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 27e rstp5 + debugger_exception_hook(0x00); + m_ftu = 0x0000; + m_icount -= 2; + // 27f rstp6 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_sr |= 0x0700; + update_interrupt(); + m_au = ext32(m_ftu); + m_icount -= 2; + // 2fb rstp7 + m_aob = m_au; + set_16h(m_da[16], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2ff rstp8 + m_aob = m_au; + set_16h(m_da[16], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 300 rstp9 + m_aob = m_au; + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + set_16l(m_da[16], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 11e rstpa + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::state_bus_error_if8() +{ + // 003 bser1 + m_ssw = m_base_ssw | (m_sr & SR_S ? SSW_S : 0); + m_at = m_aob; + m_ftu = m_sr; + m_au = m_pc; + m_icount -= 2; + // 3a7 bser2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3ca bser3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0a2 bser4 + m_aob = m_au; + m_dbout = m_aluo; + m_ftu = m_ird; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3c6 bser5 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 088 bser6 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_pc = m_at; + m_ftu = (m_ftu & ~0x1f) | m_ssw; + m_au = m_au - 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x02); + m_da[16] = m_au; + m_ftu = 0x0008; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::state_address_error_if8() +{ + // 003 bser1 + m_ssw = m_base_ssw | (m_sr & SR_S ? SSW_S : 0); + m_at = m_aob; + m_ftu = m_sr; + m_au = m_pc; + m_icount -= 2; + // 3a7 bser2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3ca bser3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0a2 bser4 + m_aob = m_au; + m_dbout = m_aluo; + m_ftu = m_ird; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3c6 bser5 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 088 bser6 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_pc = m_at; + m_ftu = (m_ftu & ~0x1f) | m_ssw; + m_au = m_au - 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x03); + m_da[16] = m_au; + m_ftu = 0x000c; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::state_double_fault_if8() +{ + // 001 halt1 + m_icount = 0; +} + +void m68008_device::state_interrupt_if8() +{ + // 1c4 itlx1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 234 itlx2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_alub = m_ftu; + m_pc = m_au; + m_sr = (m_sr & ~SR_I) | ((m_next_state >> 16) & SR_I); + update_interrupt(); + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_icount -= 2; + // 235 itlx3 + m_ftu = 0xfff1 | ((m_next_state >> 23) & 0xe); + m_au = m_da[16] - 2; + m_icount -= 2; + // 0eb itlx4 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 236 itlx5 + m_aob = m_at; + m_base_ssw = SSW_CPU | SSW_R | SSW_N; + start_interrupt_vector_lookup(); + m_edb = m_mmu8->read_cpu(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + end_interrupt_vector_lookup(); + m_irc = m_edb; + // 118 itlx6 + m_ir = m_irc; + m_icount -= 2; + // 292 itlx7 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook((m_int_vector) >> 2); + m_da[16] = m_au; + m_ftu = m_int_vector; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::state_trace_if8() +{ + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x09); + m_da[16] = m_au; + m_ftu = 0x0024; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::state_illegal_if8() +{ + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x04); + m_da[16] = m_au; + m_ftu = 0x0010; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::state_priviledge_if8() +{ + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x08); + m_da[16] = m_au; + m_ftu = 0x0020; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::state_linea_if8() +{ + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x0a); + m_da[16] = m_au; + m_ftu = 0x0028; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::state_linef_if8() +{ + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x0b); + m_da[16] = m_au; + m_ftu = 0x002c; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_b_imm8_ds_if8() // 0000 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or8(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_b_imm8_ais_if8() // 0010 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_b_imm8_aips_if8() // 0018 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_b_imm8_pais_if8() // 0020 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_b_imm8_das_if8() // 0028 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_b_imm8_dais_if8() // 0030 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_b_imm8_adr16_if8() // 0038 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_b_imm8_adr32_if8() // 0039 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_imm8_ccr_if8() // 003c ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dtl:m_dt + alu_or8(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_w_imm16_ds_if8() // 0040 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_w_imm16_ais_if8() // 0050 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_w_imm16_aips_if8() // 0058 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_w_imm16_pais_if8() // 0060 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_w_imm16_das_if8() // 0068 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_w_imm16_dais_if8() // 0070 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_w_imm16_adr16_if8() // 0078 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_w_imm16_adr32_if8() // 0079 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_i16u_sr_if8() // 007c ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=14 c=2 m=..... i=....... ALU.or_ a=R.ftu:m_ftu d=R.dtl:m_dt + alu_or(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_l_imm32_ds_if8() // 0080 fff8 +{ + int ry = m_irdi & 7; + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or(m_dt, m_da[ry]); + sr_nzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=18:m_da[ry] + alu_or(high16(m_dt), high16(m_da[ry])); + sr_nzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_l_imm32_ais_if8() // 0090 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_l_imm32_aips_if8() // 0098 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_l_imm32_pais_if8() // 00a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_l_imm32_das_if8() // 00a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_l_imm32_dais_if8() // 00b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_l_imm32_adr16_if8() // 00b8 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ori_l_imm32_adr32_if8() // 00b9 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_ds_if8() // 0100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 3e7 btsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor(m_da[rx], m_da[ry]); + // 0e7 btsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto btsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +btsr3: + // 044 btsr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_and(high16(m_da[ry]), 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movep_w_das_dd_if8() // 0108 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1d2 mpiw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 29a mpiw2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + set_8h(m_dbin, m_edb); + // 368 mpiw3 + m_aob = m_au; + m_ir = m_irc; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_8(m_dbin, m_edb); + // 36a mpiw4 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_ais_if8() // 0110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_aips_if8() // 0118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_pais_if8() // 0120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_das_if8() // 0128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_dais_if8() // 0130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_adr16_if8() // 0138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_adr32_if8() // 0139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_dpc_if8() // 013a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_dpci_if8() // 013b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_dd_imm_if8() // 013c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0ab btsi1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16h(m_dt, high16(m_at)); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + // 0e7 btsr2 + m_t = m_dcr & 0x10; + m_alub = m_dt; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto btsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_dt, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +btsr3: + // 044 btsr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=23:m_dt d=R.dcro8:m_dcro8 + alu_and8(high16(m_dt), 1 << (m_dcr & 7)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_dd_ds_if8() // 0140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 3ef bcsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor(m_da[rx], m_da[ry]); + // 06a bcsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=13 c=2 m=..... i=....... ALU.eor a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_eor(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bcsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bcsr3: + // 084 bcsr3 + m_alub = high16(m_da[ry]); + // alu r=13 c=2 m=..... i=....... ALU.eor a=18:m_da[ry] d=R.dcro:m_dcro + alu_eor(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movep_l_das_dd_if8() // 0148 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1d6 mpil1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 29e mpil2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + set_8h(m_dbin, m_edb); + // 34e mpil3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_8(m_dbin, m_edb); + // 34f mpil4 + m_aob = m_au; + set_16h(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + set_8h(m_dbin, m_edb); + // 368 mpiw3 + m_aob = m_au; + m_ir = m_irc; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_8(m_dbin, m_edb); + // 36a mpiw4 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_dd_ais_if8() // 0150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_dd_aips_if8() // 0158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_dd_pais_if8() // 0160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_dd_das_if8() // 0168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_dd_dais_if8() // 0170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_dd_adr16_if8() // 0178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_dd_adr32_if8() // 0179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_dd_ds_if8() // 0180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 3eb bclr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_or(m_da[rx], m_da[ry]); + // 06e bclr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=14 c=2 m=..... i=.l..... ALU.or_ a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_or(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bclr3; + else + goto bclr4; +bclr4: + // 0cc bclr4 + // alu r=14 c=4 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=R.dcro:m_dcro + alu_eor(m_aluo, 1 << (m_dcr & 15)); + m_icount -= 2; + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.l...i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bclr3: + // 08c bclr3 + m_alub = high16(m_da[ry]); + // alu r=14 c=2 m=..... i=.l..... ALU.or_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_or(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0c8 bclr5 + // alu r=14 c=4 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=R.dcro:m_dcro + alu_eor(m_aluo, 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.l...i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movep_w_dd_das_if8() // 0188 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1ca mpow1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 36d mpow2 + m_aob = m_au; + m_ir = m_irc; + set_8xh(m_dbout, m_da[rx]); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dxl:m_da[rx] + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + // 36e mpow3 + m_aob = m_au; + set_8xl(m_dbout, m_da[rx]); + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_dd_ais_if8() // 0190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_dd_aips_if8() // 0198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_dd_pais_if8() // 01a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_dd_das_if8() // 01a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_dd_dais_if8() // 01b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_dd_adr16_if8() // 01b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_dd_adr32_if8() // 01b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_dd_ds_if8() // 01c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 3ef bcsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_or(m_da[rx], m_da[ry]); + // 06a bcsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=14 c=2 m=..... i=....... ALU.or_ a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_or(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bcsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bcsr3: + // 084 bcsr3 + m_alub = high16(m_da[ry]); + // alu r=14 c=2 m=..... i=....... ALU.or_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_or(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movep_l_dd_das_if8() // 01c8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1ce mpol1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 36b mpol2 + m_aob = m_au; + set_8xh(m_dbout, high16(m_da[rx])); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=16:m_da[rx] d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + // 36c mpol3 + m_aob = m_au; + set_8xl(m_dbout, high16(m_da[rx])); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=16:m_da[rx] d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 36d mpow2 + m_aob = m_au; + m_ir = m_irc; + set_8xh(m_dbout, m_da[rx]); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dxl:m_da[rx] + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + // 36e mpow3 + m_aob = m_au; + set_8xl(m_dbout, m_da[rx]); + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_dd_ais_if8() // 01d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_dd_aips_if8() // 01d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_dd_pais_if8() // 01e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_dd_das_if8() // 01e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_dd_dais_if8() // 01f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_dd_adr16_if8() // 01f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_dd_adr32_if8() // 01f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_b_imm8_ds_if8() // 0200 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_and8(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_b_imm8_ais_if8() // 0210 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_b_imm8_aips_if8() // 0218 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_b_imm8_pais_if8() // 0220 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_b_imm8_das_if8() // 0228 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_b_imm8_dais_if8() // 0230 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_b_imm8_adr16_if8() // 0238 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_b_imm8_adr32_if8() // 0239 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_imm8_ccr_if8() // 023c ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=4 c=2 m=..... i=b...... ALU.and_ a=R.ftu:m_ftu d=R.dtl:m_dt + alu_and8(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_w_imm16_ds_if8() // 0240 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_and(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_w_imm16_ais_if8() // 0250 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_w_imm16_aips_if8() // 0258 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_w_imm16_pais_if8() // 0260 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_w_imm16_das_if8() // 0268 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_w_imm16_dais_if8() // 0270 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_w_imm16_adr16_if8() // 0278 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_w_imm16_adr32_if8() // 0279 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_i16u_sr_if8() // 027c ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=4 c=2 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=R.dtl:m_dt + alu_and(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_l_imm32_ds_if8() // 0280 fff8 +{ + int ry = m_irdi & 7; + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_and(m_dt, m_da[ry]); + sr_nzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=18:m_da[ry] + alu_and(high16(m_dt), high16(m_da[ry])); + sr_nzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_l_imm32_ais_if8() // 0290 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_l_imm32_aips_if8() // 0298 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_l_imm32_pais_if8() // 02a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_l_imm32_das_if8() // 02a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_l_imm32_dais_if8() // 02b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_l_imm32_adr16_if8() // 02b8 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::andi_l_imm32_adr32_if8() // 02b9 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_b_imm8_ds_if8() // 0400 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub8(m_dt, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_b_imm8_ais_if8() // 0410 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_b_imm8_aips_if8() // 0418 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_b_imm8_pais_if8() // 0420 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_b_imm8_das_if8() // 0428 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_b_imm8_dais_if8() // 0430 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_b_imm8_adr16_if8() // 0438 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_b_imm8_adr32_if8() // 0439 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_w_imm16_ds_if8() // 0440 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub(m_dt, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_w_imm16_ais_if8() // 0450 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_w_imm16_aips_if8() // 0458 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_w_imm16_pais_if8() // 0460 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_w_imm16_das_if8() // 0468 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_w_imm16_dais_if8() // 0470 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_w_imm16_adr16_if8() // 0478 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_w_imm16_adr32_if8() // 0479 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_l_imm32_ds_if8() // 0480 fff8 +{ + int ry = m_irdi & 7; + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub(m_dt, m_da[ry]); + sr_xnzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=18:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + sr_xnzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_l_imm32_ais_if8() // 0490 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_l_imm32_aips_if8() // 0498 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_l_imm32_pais_if8() // 04a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_l_imm32_das_if8() // 04a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_l_imm32_dais_if8() // 04b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_l_imm32_adr16_if8() // 04b8 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subi_l_imm32_adr32_if8() // 04b9 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_b_imm8_ds_if8() // 0600 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_add8(m_dt, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_b_imm8_ais_if8() // 0610 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_b_imm8_aips_if8() // 0618 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_b_imm8_pais_if8() // 0620 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_b_imm8_das_if8() // 0628 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_b_imm8_dais_if8() // 0630 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_b_imm8_adr16_if8() // 0638 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_b_imm8_adr32_if8() // 0639 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_w_imm16_ds_if8() // 0640 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_add(m_dt, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_w_imm16_ais_if8() // 0650 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_w_imm16_aips_if8() // 0658 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_w_imm16_pais_if8() // 0660 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_w_imm16_das_if8() // 0668 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_w_imm16_dais_if8() // 0670 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_w_imm16_adr16_if8() // 0678 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_w_imm16_adr32_if8() // 0679 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_l_imm32_ds_if8() // 0680 fff8 +{ + int ry = m_irdi & 7; + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_add(m_dt, m_da[ry]); + sr_xnzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=18:m_da[ry] + alu_addc(high16(m_dt), high16(m_da[ry])); + sr_xnzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_l_imm32_ais_if8() // 0690 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_l_imm32_aips_if8() // 0698 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_l_imm32_pais_if8() // 06a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_l_imm32_das_if8() // 06a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_l_imm32_dais_if8() // 06b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_l_imm32_adr16_if8() // 06b8 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addi_l_imm32_adr32_if8() // 06b9 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_ds_if8() // 0800 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3e7 btsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_dt; + m_at = m_dt; + m_au = m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor(m_dt, m_da[ry]); + // 0e7 btsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto btsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +btsr3: + // 044 btsr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_and(high16(m_da[ry]), 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_ais_if8() // 0810 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_aips_if8() // 0818 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_pais_if8() // 0820 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_das_if8() // 0828 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_dais_if8() // 0830 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_adr16_if8() // 0838 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_adr32_if8() // 0839 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_dpc_if8() // 083a ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::btst_imm8_dpci_if8() // 083b ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_imm8_ds_if8() // 0840 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3ef bcsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_dt; + m_at = m_dt; + m_au = m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor(m_dt, m_da[ry]); + // 06a bcsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=13 c=2 m=..... i=....... ALU.eor a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_eor(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bcsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bcsr3: + // 084 bcsr3 + m_alub = high16(m_da[ry]); + // alu r=13 c=2 m=..... i=....... ALU.eor a=18:m_da[ry] d=R.dcro:m_dcro + alu_eor(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_imm8_ais_if8() // 0850 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_imm8_aips_if8() // 0858 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_imm8_pais_if8() // 0860 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_imm8_das_if8() // 0868 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_imm8_dais_if8() // 0870 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_imm8_adr16_if8() // 0878 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bchg_imm8_adr32_if8() // 0879 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_imm8_ds_if8() // 0880 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3eb bclr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_dt; + m_at = m_dt; + m_au = m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or(m_dt, m_da[ry]); + // 06e bclr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=14 c=2 m=..... i=.l..... ALU.or_ a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_or(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bclr3; + else + goto bclr4; +bclr4: + // 0cc bclr4 + // alu r=14 c=4 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=R.dcro:m_dcro + alu_eor(m_aluo, 1 << (m_dcr & 15)); + m_icount -= 2; + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.l...i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bclr3: + // 08c bclr3 + m_alub = high16(m_da[ry]); + // alu r=14 c=2 m=..... i=.l..... ALU.or_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_or(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0c8 bclr5 + // alu r=14 c=4 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=R.dcro:m_dcro + alu_eor(m_aluo, 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.l...i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_imm8_ais_if8() // 0890 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_imm8_aips_if8() // 0898 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_imm8_pais_if8() // 08a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_imm8_das_if8() // 08a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_imm8_dais_if8() // 08b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_imm8_adr16_if8() // 08b8 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bclr_imm8_adr32_if8() // 08b9 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_imm8_ds_if8() // 08c0 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3ef bcsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_dt; + m_at = m_dt; + m_au = m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or(m_dt, m_da[ry]); + // 06a bcsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=14 c=2 m=..... i=....... ALU.or_ a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_or(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bcsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bcsr3: + // 084 bcsr3 + m_alub = high16(m_da[ry]); + // alu r=14 c=2 m=..... i=....... ALU.or_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_or(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_imm8_ais_if8() // 08d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_imm8_aips_if8() // 08d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_imm8_pais_if8() // 08e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_imm8_das_if8() // 08e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_imm8_dais_if8() // 08f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_imm8_adr16_if8() // 08f8 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bset_imm8_adr32_if8() // 08f9 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_b_imm8_ds_if8() // 0a00 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor8(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_b_imm8_ais_if8() // 0a10 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_b_imm8_aips_if8() // 0a18 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_b_imm8_pais_if8() // 0a20 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_b_imm8_das_if8() // 0a28 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_b_imm8_dais_if8() // 0a30 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_b_imm8_adr16_if8() // 0a38 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_b_imm8_adr32_if8() // 0a39 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_imm8_ccr_if8() // 0a3c ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.ftu:m_ftu d=R.dtl:m_dt + alu_eor8(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_w_imm16_ds_if8() // 0a40 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_w_imm16_ais_if8() // 0a50 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_w_imm16_aips_if8() // 0a58 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_w_imm16_pais_if8() // 0a60 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_w_imm16_das_if8() // 0a68 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_w_imm16_dais_if8() // 0a70 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_w_imm16_adr16_if8() // 0a78 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_w_imm16_adr32_if8() // 0a79 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_i16u_sr_if8() // 0a7c ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=13 c=2 m=..... i=....... ALU.eor a=R.ftu:m_ftu d=R.dtl:m_dt + alu_eor(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_l_imm32_ds_if8() // 0a80 fff8 +{ + int ry = m_irdi & 7; + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor(m_dt, m_da[ry]); + sr_nzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=18:m_da[ry] + alu_eor(high16(m_dt), high16(m_da[ry])); + sr_nzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_l_imm32_ais_if8() // 0a90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_l_imm32_aips_if8() // 0a98 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_l_imm32_pais_if8() // 0aa0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_l_imm32_das_if8() // 0aa8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_l_imm32_dais_if8() // 0ab0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=13 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_l_imm32_adr16_if8() // 0ab8 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eori_l_imm32_adr32_if8() // 0ab9 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_b_imm8_ds_if8() // 0c00 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 108 rcaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub8(m_dt, m_da[ry]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_b_imm8_ais_if8() // 0c10 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_b_imm8_aips_if8() // 0c18 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_b_imm8_pais_if8() // 0c20 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_b_imm8_das_if8() // 0c28 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_b_imm8_dais_if8() // 0c30 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_b_imm8_adr16_if8() // 0c38 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_b_imm8_adr32_if8() // 0c39 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_w_imm16_ds_if8() // 0c40 fff8 +{ + int ry = m_irdi & 7; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 108 rcaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub(m_dt, m_da[ry]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_w_imm16_ais_if8() // 0c50 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_w_imm16_aips_if8() // 0c58 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_w_imm16_pais_if8() // 0c60 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_w_imm16_das_if8() // 0c68 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_w_imm16_dais_if8() // 0c70 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_w_imm16_adr16_if8() // 0c78 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_w_imm16_adr32_if8() // 0c79 ffff +{ + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_l_imm32_ds_if8() // 0c80 fff8 +{ + int ry = m_irdi & 7; + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + if(!m_cmpild_instr_callback.isnull()) (m_cmpild_instr_callback)(ry, (m_dt & 0xffff0000) | m_dbin); + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 104 rcal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub(m_dt, m_da[ry]); + sr_nzvc(); + // 239 rcal2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=18:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_l_imm32_ais_if8() // 0c90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_l_imm32_aips_if8() // 0c98 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_l_imm32_pais_if8() // 0ca0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_l_imm32_das_if8() // 0ca8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_l_imm32_dais_if8() // 0cb0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_l_imm32_adr16_if8() // 0cb8 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpi_l_imm32_adr32_if8() // 0cb9 ffff +{ + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ds_dd_if8() // 1000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ais_dd_if8() // 1010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_aips_dd_if8() // 1018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_pais_dd_if8() // 1020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_das_dd_if8() // 1028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dais_dd_if8() // 1030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr16_dd_if8() // 1038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr32_dd_if8() // 1039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpc_dd_if8() // 103a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpci_dd_if8() // 103b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_imm8_dd_if8() // 103c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ds_aid_if8() // 1080 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ais_aid_if8() // 1090 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_aips_aid_if8() // 1098 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_pais_aid_if8() // 10a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_das_aid_if8() // 10a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dais_aid_if8() // 10b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr16_aid_if8() // 10b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr32_aid_if8() // 10b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpc_aid_if8() // 10ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpci_aid_if8() // 10bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_imm8_aid_if8() // 10bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dt); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ds_aipd_if8() // 10c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ais_aipd_if8() // 10d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_aips_aipd_if8() // 10d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_pais_aipd_if8() // 10e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_das_aipd_if8() // 10e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dais_aipd_if8() // 10f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr16_aipd_if8() // 10f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr32_aipd_if8() // 10f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpc_aipd_if8() // 10fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpci_aipd_if8() // 10fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_imm8_aipd_if8() // 10fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dt); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ds_paid_if8() // 1100 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ais_paid_if8() // 1110 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_aips_paid_if8() // 1118 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_pais_paid_if8() // 1120 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_das_paid_if8() // 1128 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dais_paid_if8() // 1130 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr16_paid_if8() // 1138 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr32_paid_if8() // 1139 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpc_paid_if8() // 113a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpci_paid_if8() // 113b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_imm8_paid_if8() // 113c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ds_dad_if8() // 1140 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + set_8xl(m_dbout, m_da[ry]); + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ais_dad_if8() // 1150 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_aips_dad_if8() // 1158 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_pais_dad_if8() // 1160 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_das_dad_if8() // 1168 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dais_dad_if8() // 1170 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr16_dad_if8() // 1178 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr32_dad_if8() // 1179 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpc_dad_if8() // 117a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpci_dad_if8() // 117b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_imm8_dad_if8() // 117c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + set_8xl(m_dbout, m_dt); + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ds_daid_if8() // 1180 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + set_8xl(m_dbout, m_da[ry]); + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ais_daid_if8() // 1190 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_aips_daid_if8() // 1198 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_pais_daid_if8() // 11a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_das_daid_if8() // 11a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dais_daid_if8() // 11b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr16_daid_if8() // 11b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr32_daid_if8() // 11b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpc_daid_if8() // 11ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpci_daid_if8() // 11bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_imm8_daid_if8() // 11bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + set_8xl(m_dbout, m_dt); + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ds_adr16_if8() // 11c0 fff8 +{ + int ry = m_irdi & 7; + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ais_adr16_if8() // 11d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_aips_adr16_if8() // 11d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_pais_adr16_if8() // 11e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_das_adr16_if8() // 11e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dais_adr16_if8() // 11f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr16_adr16_if8() // 11f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr32_adr16_if8() // 11f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpc_adr16_if8() // 11fa ffff +{ + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpci_adr16_if8() // 11fb ffff +{ + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_imm8_adr16_if8() // 11fc ffff +{ + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ds_adr32_if8() // 13c0 fff8 +{ + int ry = m_irdi & 7; + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_ais_adr32_if8() // 13d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_aips_adr32_if8() // 13d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_pais_adr32_if8() // 13e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_das_adr32_if8() // 13e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dais_adr32_if8() // 13f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr16_adr32_if8() // 13f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_adr32_adr32_if8() // 13f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpc_adr32_if8() // 13fa ffff +{ + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_dpci_adr32_if8() // 13fb ffff +{ + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_b_imm8_adr32_if8() // 13fc ffff +{ + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ds_dd_if8() // 2000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_da[rx] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_as_dd_if8() // 2008 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ais_dd_if8() // 2010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_aips_dd_if8() // 2018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_pais_dd_if8() // 2020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_das_dd_if8() // 2028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dais_dd_if8() // 2030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr16_dd_if8() // 2038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr32_dd_if8() // 2039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpc_dd_if8() // 203a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpci_dd_if8() // 203b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_imm32_dd_if8() // 203c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_ds_ad_if8() // 2040 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_as_ad_if8() // 2048 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + m_da[rx] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_ais_ad_if8() // 2050 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_aips_ad_if8() // 2058 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_pais_ad_if8() // 2060 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_das_ad_if8() // 2068 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_dais_ad_if8() // 2070 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_adr16_ad_if8() // 2078 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_adr32_ad_if8() // 2079 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_dpc_ad_if8() // 207a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_dpci_ad_if8() // 207b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_l_imm32_ad_if8() // 207c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ds_aid_if8() // 2080 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2f9 rmrl1 + m_aob = m_da[rx]; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23f rmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_as_aid_if8() // 2088 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2f9 rmrl1 + m_aob = m_da[rx]; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23f rmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ais_aid_if8() // 2090 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_aips_aid_if8() // 2098 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_pais_aid_if8() // 20a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_das_aid_if8() // 20a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dais_aid_if8() // 20b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr16_aid_if8() // 20b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr32_aid_if8() // 20b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpc_aid_if8() // 20ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpci_aid_if8() // 20bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_imm32_aid_if8() // 20bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f9 rmrl1 + m_aob = m_da[rx]; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23f rmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ds_aipd_if8() // 20c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2fd rmil1 + m_aob = m_da[rx]; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23c rmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23d rmil3 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_as_aipd_if8() // 20c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2fd rmil1 + m_aob = m_da[rx]; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23c rmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23d rmil3 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ais_aipd_if8() // 20d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_aips_aipd_if8() // 20d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_pais_aipd_if8() // 20e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_das_aipd_if8() // 20e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dais_aipd_if8() // 20f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr16_aipd_if8() // 20f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr32_aipd_if8() // 20f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpc_aipd_if8() // 20fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpci_aipd_if8() // 20fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_imm32_aipd_if8() // 20fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fd rmil1 + m_aob = m_da[rx]; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23c rmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 23d rmil3 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ds_paid_if8() // 2100 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2fc rmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 23e rmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_as_paid_if8() // 2108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2fc rmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 23e rmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ais_paid_if8() // 2110 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_aips_paid_if8() // 2118 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_pais_paid_if8() // 2120 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_das_paid_if8() // 2128 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dais_paid_if8() // 2130 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr16_paid_if8() // 2138 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr32_paid_if8() // 2139 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpc_paid_if8() // 213a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpci_paid_if8() // 213b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_imm32_paid_if8() // 213c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fc rmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 23e rmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ds_dad_if8() // 2140 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2de rmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_as_dad_if8() // 2148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2de rmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ais_dad_if8() // 2150 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_aips_dad_if8() // 2158 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_pais_dad_if8() // 2160 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_das_dad_if8() // 2168 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dais_dad_if8() // 2170 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr16_dad_if8() // 2178 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr32_dad_if8() // 2179 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpc_dad_if8() // 217a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpci_dad_if8() // 217b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_imm32_dad_if8() // 217c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2de rmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ds_daid_if8() // 2180 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1ef rmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 105 rmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxl3; + else + goto rmxl2; +rmxl2: + // 12c rmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmxl3: + // 1ec rmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmdl2: + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_as_daid_if8() // 2188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1ef rmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 105 rmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxl3; + else + goto rmxl2; +rmxl2: + // 12c rmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmxl3: + // 1ec rmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmdl2: + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ais_daid_if8() // 2190 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_aips_daid_if8() // 2198 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_pais_daid_if8() // 21a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_das_daid_if8() // 21a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dais_daid_if8() // 21b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr16_daid_if8() // 21b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr32_daid_if8() // 21b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpc_daid_if8() // 21ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpci_daid_if8() // 21bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_imm32_daid_if8() // 21bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1ef rmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 105 rmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxl3; + else + goto rmxl2; +rmxl2: + // 12c rmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmxl3: + // 1ec rmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmdl2: + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ds_adr16_if8() // 21c0 fff8 +{ + int ry = m_irdi & 7; + // 2dd rawl1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_as_adr16_if8() // 21c8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2dd rawl1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ais_adr16_if8() // 21d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_aips_adr16_if8() // 21d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_pais_adr16_if8() // 21e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_das_adr16_if8() // 21e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dais_adr16_if8() // 21f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr16_adr16_if8() // 21f8 ffff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr32_adr16_if8() // 21f9 ffff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpc_adr16_if8() // 21fa ffff +{ + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpci_adr16_if8() // 21fb ffff +{ + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_imm32_adr16_if8() // 21fc ffff +{ + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2dd rawl1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ds_adr32_if8() // 23c0 fff8 +{ + int ry = m_irdi & 7; + // 1ee rall1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bf rall2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_as_adr32_if8() // 23c8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1ee rall1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bf rall2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_ais_adr32_if8() // 23d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_aips_adr32_if8() // 23d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_pais_adr32_if8() // 23e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_das_adr32_if8() // 23e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dais_adr32_if8() // 23f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr16_adr32_if8() // 23f8 ffff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_adr32_adr32_if8() // 23f9 ffff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpc_adr32_if8() // 23fa ffff +{ + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_dpci_adr32_if8() // 23fb ffff +{ + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_l_imm32_adr32_if8() // 23fc ffff +{ + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1ee rall1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bf rall2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ds_dd_if8() // 3000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_as_dd_if8() // 3008 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ais_dd_if8() // 3010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_aips_dd_if8() // 3018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_pais_dd_if8() // 3020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_das_dd_if8() // 3028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dais_dd_if8() // 3030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr16_dd_if8() // 3038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr32_dd_if8() // 3039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpc_dd_if8() // 303a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpci_dd_if8() // 303b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_imm16_dd_if8() // 303c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_ds_ad_if8() // 3040 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 279 rrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + m_au = m_au + 2; + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_as_ad_if8() // 3048 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 279 rrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + m_au = m_au + 2; + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + m_da[rx] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_ais_ad_if8() // 3050 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_aips_ad_if8() // 3058 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_pais_ad_if8() // 3060 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_das_ad_if8() // 3068 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_dais_ad_if8() // 3070 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_adr16_ad_if8() // 3078 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_adr32_ad_if8() // 3079 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_dpc_ad_if8() // 307a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_dpci_ad_if8() // 307b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movea_w_imm16_ad_if8() // 307c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 279 rrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + m_au = m_au + 2; + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ds_aid_if8() // 3080 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_as_aid_if8() // 3088 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ais_aid_if8() // 3090 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_aips_aid_if8() // 3098 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_pais_aid_if8() // 30a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_das_aid_if8() // 30a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dais_aid_if8() // 30b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr16_aid_if8() // 30b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr32_aid_if8() // 30b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpc_aid_if8() // 30ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpci_aid_if8() // 30bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_imm16_aid_if8() // 30bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dt; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ds_aipd_if8() // 30c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_as_aipd_if8() // 30c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ais_aipd_if8() // 30d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_aips_aipd_if8() // 30d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_pais_aipd_if8() // 30e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_das_aipd_if8() // 30e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dais_aipd_if8() // 30f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr16_aipd_if8() // 30f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr32_aipd_if8() // 30f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpc_aipd_if8() // 30fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpci_aipd_if8() // 30fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_imm16_aipd_if8() // 30fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dt; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ds_paid_if8() // 3100 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_as_paid_if8() // 3108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ais_paid_if8() // 3110 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_aips_paid_if8() // 3118 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_pais_paid_if8() // 3120 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_das_paid_if8() // 3128 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dais_paid_if8() // 3130 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr16_paid_if8() // 3138 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr32_paid_if8() // 3139 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpc_paid_if8() // 313a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpci_paid_if8() // 313b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_imm16_paid_if8() // 313c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ds_dad_if8() // 3140 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_as_dad_if8() // 3148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ais_dad_if8() // 3150 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_aips_dad_if8() // 3158 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_pais_dad_if8() // 3160 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_das_dad_if8() // 3168 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dais_dad_if8() // 3170 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr16_dad_if8() // 3178 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr32_dad_if8() // 3179 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpc_dad_if8() // 317a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpci_dad_if8() // 317b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_imm16_dad_if8() // 317c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ds_daid_if8() // 3180 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_as_daid_if8() // 3188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ais_daid_if8() // 3190 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_aips_daid_if8() // 3198 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_pais_daid_if8() // 31a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_das_daid_if8() // 31a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dais_daid_if8() // 31b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr16_daid_if8() // 31b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr32_daid_if8() // 31b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpc_daid_if8() // 31ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpci_daid_if8() // 31bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_imm16_daid_if8() // 31bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ds_adr16_if8() // 31c0 fff8 +{ + int ry = m_irdi & 7; + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_as_adr16_if8() // 31c8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ais_adr16_if8() // 31d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_aips_adr16_if8() // 31d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_pais_adr16_if8() // 31e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_das_adr16_if8() // 31e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dais_adr16_if8() // 31f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr16_adr16_if8() // 31f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr32_adr16_if8() // 31f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpc_adr16_if8() // 31fa ffff +{ + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpci_adr16_if8() // 31fb ffff +{ + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_imm16_adr16_if8() // 31fc ffff +{ + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ds_adr32_if8() // 33c0 fff8 +{ + int ry = m_irdi & 7; + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_as_adr32_if8() // 33c8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_ais_adr32_if8() // 33d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_aips_adr32_if8() // 33d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_pais_adr32_if8() // 33e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_das_adr32_if8() // 33e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dais_adr32_if8() // 33f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr16_adr32_if8() // 33f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_adr32_adr32_if8() // 33f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpc_adr32_if8() // 33fa ffff +{ + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_dpci_adr32_if8() // 33fb ffff +{ + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_w_imm16_adr32_if8() // 33fc ffff +{ + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_b_ds_if8() // 4000 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dyl:m_da[ry] d=0 + alu_subx8(m_da[ry], 0x0000); + sr_xnzvc_u(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_b_ais_if8() // 4010 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_b_aips_if8() // 4018 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_b_pais_if8() // 4020 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_b_das_if8() // 4028 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_b_dais_if8() // 4030 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=10 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_b_adr16_if8() // 4038 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_b_adr32_if8() // 4039 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_w_ds_if8() // 4040 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dyl:m_da[ry] d=0 + alu_subx(m_da[ry], 0x0000); + sr_xnzvc_u(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_w_ais_if8() // 4050 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_w_aips_if8() // 4058 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_w_pais_if8() // 4060 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_w_das_if8() // 4068 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_w_dais_if8() // 4070 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=10 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_w_adr16_if8() // 4078 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_w_adr32_if8() // 4079 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_l_ds_if8() // 4080 fff8 +{ + int ry = m_irdi & 7; + // 137 nnrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dyl:m_da[ry] d=0 + alu_subx(m_da[ry], 0x0000); + sr_xnzvc_u(); + // 15e nnrl2 + set_16l(m_da[ry], m_aluo); + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=18:m_da[ry] d=0 + alu_subc(high16(m_da[ry]), 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_l_ais_if8() // 4090 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_l_aips_if8() // 4098 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_l_pais_if8() // 40a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_l_das_if8() // 40a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_l_dais_if8() // 40b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=10 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_l_adr16_if8() // 40b8 ffff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::negx_l_adr32_if8() // 40b9 ffff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_sr_ds_if8() // 40c0 fff8 +{ + int ry = m_irdi & 7; + // 3a5 strw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 340 strw2 + set_16l(m_da[ry], m_ftu); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_sr_ais_if8() // 40d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_sr_aips_if8() // 40d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_sr_pais_if8() // 40e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_sr_das_if8() // 40e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_sr_dais_if8() // 40f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=10 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_sr_adr16_if8() // 40f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_sr_adr32_if8() // 40f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::chk_w_ds_dd_if8() // 4180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 152 chkr1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_sub(m_da[rx], m_da[ry]); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_ais_dd_if8() // 4190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_aips_dd_if8() // 4198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_pais_dd_if8() // 41a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_das_dd_if8() // 41a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_dais_dd_if8() // 41b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_adr16_dd_if8() // 41b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_adr32_dd_if8() // 41b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_dpc_dd_if8() // 41ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_dpci_dd_if8() // 41bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::chk_w_imm16_dd_if8() // 41bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 152 chkr1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dtl:m_dt + alu_sub(m_da[rx], m_dt); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +} + +void m68008_device::lea_ais_ad_if8() // 41d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2f1 leaa1 + m_aob = m_au; + m_ir = m_irc; + m_movemr = m_dbin; + m_pc = m_au; + m_at = m_da[ry]; + m_ftu = m_dbin; + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lea_das_ad_if8() // 41e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 2f2 lead1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // 309 lead2 + m_da[rx] = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lea_dais_ad_if8() // 41f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1fb leax0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3ea leax1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto leax3; + else + goto leax2; +leax2: + // 130 leax2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto leax4; +leax3: + // 1f0 leax3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto leax4; +leax4: + // 30a leax4 + m_da[rx] = m_au; + m_au = m_pc + 4; + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lea_adr16_ad_if8() // 41f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 275 laaw1 + m_aob = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lea_adr32_ad_if8() // 41f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 3e4 laal1 + m_aob = m_au; + set_16h(m_da[rx], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bd laal2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lea_dpc_ad_if8() // 41fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 2f2 lead1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // 309 lead2 + m_da[rx] = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lea_dpci_ad_if8() // 41fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1fb leax0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3ea leax1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto leax3; + else + goto leax2; +leax2: + // 130 leax2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto leax4; +leax3: + // 1f0 leax3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto leax4; +leax4: + // 30a leax4 + m_da[rx] = m_au; + m_au = m_pc + 4; + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_b_ds_if8() // 4200 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=0 + alu_and8(m_da[ry], 0x0000); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_b_ais_if8() // 4210 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_b_aips_if8() // 4218 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and8(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_b_pais_if8() // 4220 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and8(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_b_das_if8() // 4228 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_b_dais_if8() // 4230 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_b_adr16_if8() // 4238 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_b_adr32_if8() // 4239 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_w_ds_if8() // 4240 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=0 + alu_and(m_da[ry], 0x0000); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_w_ais_if8() // 4250 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_w_aips_if8() // 4258 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_w_pais_if8() // 4260 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_w_das_if8() // 4268 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_w_dais_if8() // 4270 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_w_adr16_if8() // 4278 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_w_adr32_if8() // 4279 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_l_ds_if8() // 4280 fff8 +{ + int ry = m_irdi & 7; + // 137 nnrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=0 + alu_and(m_da[ry], 0x0000); + sr_nzvc(); + // 15e nnrl2 + set_16l(m_da[ry], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=18:m_da[ry] d=0 + alu_and(high16(m_da[ry]), 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_l_ais_if8() // 4290 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_l_aips_if8() // 4298 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_l_pais_if8() // 42a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_l_das_if8() // 42a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_l_dais_if8() // 42b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_l_adr16_if8() // 42b8 ffff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::clr_l_adr32_if8() // 42b9 ffff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_b_ds_if8() // 4400 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dyl:m_da[ry] d=0 + alu_sub8(m_da[ry], 0x0000); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_b_ais_if8() // 4410 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_b_aips_if8() // 4418 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_b_pais_if8() // 4420 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_b_das_if8() // 4428 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_b_dais_if8() // 4430 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_b_adr16_if8() // 4438 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_b_adr32_if8() // 4439 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_w_ds_if8() // 4440 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=0 + alu_sub(m_da[ry], 0x0000); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_w_ais_if8() // 4450 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_w_aips_if8() // 4458 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_w_pais_if8() // 4460 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_w_das_if8() // 4468 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_w_dais_if8() // 4470 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_w_adr16_if8() // 4478 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_w_adr32_if8() // 4479 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_l_ds_if8() // 4480 fff8 +{ + int ry = m_irdi & 7; + // 137 nnrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dyl:m_da[ry] d=0 + alu_sub(m_da[ry], 0x0000); + sr_xnzvc(); + // 15e nnrl2 + set_16l(m_da[ry], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=18:m_da[ry] d=0 + alu_subc(high16(m_da[ry]), 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_l_ais_if8() // 4490 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_l_aips_if8() // 4498 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_l_pais_if8() // 44a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_l_das_if8() // 44a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_l_dais_if8() // 44b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_l_adr16_if8() // 44b8 ffff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::neg_l_adr32_if8() // 44b9 ffff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_ds_ccr_if8() // 44c0 fff8 +{ + int ry = m_irdi & 7; + // 301 rstw1 + m_movemr = m_dbin; + m_ftu = m_da[ry]; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_ais_ccr_if8() // 44d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_aips_ccr_if8() // 44d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_pais_ccr_if8() // 44e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_das_ccr_if8() // 44e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_dais_ccr_if8() // 44f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_adr16_ccr_if8() // 44f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_adr32_ccr_if8() // 44f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_dpc_ccr_if8() // 44fa ffff +{ + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_dpci_ccr_if8() // 44fb ffff +{ + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_imm8_ccr_if8() // 44fc ffff +{ + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 301 rstw1 + m_movemr = m_dbin; + m_ftu = m_dt; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_b_ds_if8() // 4600 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dyl:m_da[ry] d=0 + alu_not8(m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_b_ais_if8() // 4610 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_b_aips_if8() // 4618 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=alub d=-1 + alu_and8x(m_alub, 0xff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_b_pais_if8() // 4620 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=alub d=-1 + alu_and8x(m_alub, 0xff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_b_das_if8() // 4628 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_b_dais_if8() // 4630 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_b_adr16_if8() // 4638 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_b_adr32_if8() // 4639 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_w_ds_if8() // 4640 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dyl:m_da[ry] d=0 + alu_not(m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_w_ais_if8() // 4650 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_w_aips_if8() // 4658 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_w_pais_if8() // 4660 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_w_das_if8() // 4668 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_w_dais_if8() // 4670 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_w_adr16_if8() // 4678 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_w_adr32_if8() // 4679 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_l_ds_if8() // 4680 fff8 +{ + int ry = m_irdi & 7; + // 137 nnrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dyl:m_da[ry] d=0 + alu_not(m_da[ry]); + sr_nzvc(); + // 15e nnrl2 + set_16l(m_da[ry], m_aluo); + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=18:m_da[ry] d=0 + alu_not(high16(m_da[ry])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_l_ais_if8() // 4690 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_l_aips_if8() // 4698 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_l_pais_if8() // 46a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_l_das_if8() // 46a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_l_dais_if8() // 46b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=11 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_l_adr16_if8() // 46b8 ffff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::not_l_adr32_if8() // 46b9 ffff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_ds_sr_if8() // 46c0 fff8 +{ + int ry = m_irdi & 7; + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 301 rstw1 + m_movemr = m_dbin; + m_ftu = m_da[ry]; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_ais_sr_if8() // 46d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_aips_sr_if8() // 46d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_pais_sr_if8() // 46e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_das_sr_if8() // 46e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_dais_sr_if8() // 46f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_adr16_sr_if8() // 46f8 ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_adr32_sr_if8() // 46f9 ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_dpc_sr_if8() // 46fa ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_dpci_sr_if8() // 46fb ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_i16u_sr_if8() // 46fc ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 301 rstw1 + m_movemr = m_dbin; + m_ftu = m_dt; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nbcd_b_ds_if8() // 4800 fff8 +{ + int ry = m_irdi & 7; + // 13b nbcr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dyl:m_da[ry] d=0 + alu_sbcd8(m_da[ry], 0x0000); + sr_xnzvc_u(); + // 117 nbcr2 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nbcd_b_ais_if8() // 4810 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nbcd_b_aips_if8() // 4818 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nbcd_b_pais_if8() // 4820 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nbcd_b_das_if8() // 4828 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nbcd_b_dais_if8() // 4830 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=9 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nbcd_b_adr16_if8() // 4838 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nbcd_b_adr32_if8() // 4839 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::swap_ds_if8() // 4840 fff8 +{ + int ry = m_irdi & 7; + // 341 swap1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[ry]; + m_pc = m_au; + set_16h(m_at, m_da[ry]); + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nzvc(); + // 342 swap2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[ry] = merge_16_32(high16(m_at), m_aluo); + m_au = m_au + 2; + // alu r=9 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::pea_ais_if8() // 4850 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 17c peaa1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[m_sp] - 4; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::pea_das_if8() // 4868 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 17d pead1 + m_aob = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 17e pead2 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_aluo) + m_at; + // 17f pead3 + m_at = m_au; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::pea_dais_if8() // 4870 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1ff peax0 + // alu r=9 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3ee peax1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto peax3; + else + goto peax2; +peax2: + // 134 peax2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto peax4; +peax3: + // 1f4 peax3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto peax4; +peax4: + // 218 peax4 + m_ir = m_irc; + m_at = m_au; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_pc + 4; + m_icount -= 2; + // 219 peax5 + m_aob = m_au; + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::pea_adr16_if8() // 4878 ffff +{ + // 178 paaw1 + m_aob = m_au; + m_pc = m_au; + m_at = ext32(m_dbin); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 10a paaw2 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::pea_adr32_if8() // 4879 ffff +{ + // 1fa paal1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15f paal2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 10a paaw2 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::pea_dpc_if8() // 487a ffff +{ + // 17d pead1 + m_aob = m_au; + m_at = m_pc; + m_au = m_au + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 17e pead2 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_aluo) + m_at; + // 17f pead3 + m_at = m_au; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::pea_dpci_if8() // 487b ffff +{ + // 1ff peax0 + // alu r=9 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3ee peax1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto peax3; + else + goto peax2; +peax2: + // 134 peax2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto peax4; +peax3: + // 1f4 peax3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto peax4; +peax4: + // 218 peax4 + m_ir = m_irc; + m_at = m_au; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_pc + 4; + m_icount -= 2; + // 219 peax5 + m_aob = m_au; + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ext_w_ds_if8() // 4880 fff8 +{ + int ry = m_irdi & 7; + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=2 m=.nzvc i=.l...i. ALU.ext a=R.dyl:m_da[ry] d=0 + alu_ext(m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_list_ais_if8() // 4890 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3a0 stmr1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + // 323 stmr2 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_listp_pais_if8() // 48a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3a4 push1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + // 21e push2 + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] - 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + step_movem_predec(); + if(m_t) + goto push3; + else + goto push5; +push5: + // 083 push5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_at = m_au; + m_au = m_au - 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem_predec(); + if(m_t) + goto push3; + else + goto push5; +push3: + // 043 push3 + m_aob = m_pc; + m_ir = m_irc; + m_da[ry] = m_at; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_list_das_if8() // 48a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1f1 stmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c9 stmd2 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 322 stmd3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_da[ry] + ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_list_dais_if8() // 48b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 325 stmx1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 326 stmx2 + m_pc = m_au; + set_16l(m_at, m_dbin); + m_au = m_au - 2; + // alu r=8 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02f stmx3 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto stmx5; + else + goto stmx4; +stmx4: + // 138 stmx4 + m_t = !m_movemr; + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmx5: + // 1f8 stmx5 + m_t = !m_movemr; + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_list_adr16_if8() // 48b8 ffff +{ + // 1ed smaw1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c1 smaw2 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 04b smaw3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_list_adr32_if8() // 48b9 ffff +{ + // 1e5 smal1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 112 smal2 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 305 smal3 + m_aob = m_au; + set_16l(m_at, m_dbin); + m_au = m_au + 2; + // 04b smaw3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ext_l_ds_if8() // 48c0 fff8 +{ + int ry = m_irdi & 7; + // 232 extr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=8 c=3 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 233 extr2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[ry] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_list_ais_if8() // 48d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3a0 stmr1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + // 323 stmr2 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_listp_pais_if8() // 48e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 3a4 push1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + // 21e push2 + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] - 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + step_movem_predec(); + if(m_t) + goto push3; + else + goto push4; +push4: + // 0c3 push4 + m_aob = m_au; + m_dbout = m_da[m_movems]; + m_at = m_au; + m_au = m_au - 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 21f push5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = high16(m_da[m_movems]); + m_at = m_au; + m_au = m_au - 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem_predec(); + if(m_t) + goto push3; + else + goto push4; +push3: + // 043 push3 + m_aob = m_pc; + m_ir = m_irc; + m_da[ry] = m_at; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_list_das_if8() // 48e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1f1 stmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c9 stmd2 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 322 stmd3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_da[ry] + ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_list_dais_if8() // 48f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 325 stmx1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 326 stmx2 + m_pc = m_au; + set_16l(m_at, m_dbin); + m_au = m_au - 2; + // alu r=8 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02f stmx3 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto stmx5; + else + goto stmx4; +stmx4: + // 138 stmx4 + m_t = !m_movemr; + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmx5: + // 1f8 stmx5 + m_t = !m_movemr; + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_list_adr16_if8() // 48f8 ffff +{ + // 1ed smaw1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c1 smaw2 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 04b smaw3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_list_adr32_if8() // 48f9 ffff +{ + // 1e5 smal1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 112 smal2 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 305 smal3 + m_aob = m_au; + set_16l(m_at, m_dbin); + m_au = m_au + 2; + // 04b smaw3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_b_ds_if8() // 4a00 fff8 +{ + int ry = m_irdi & 7; + // 12d tsrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_b_ais_if8() // 4a10 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_b_aips_if8() // 4a18 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_b_pais_if8() // 4a20 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_b_das_if8() // 4a28 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_b_dais_if8() // 4a30 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_b_adr16_if8() // 4a38 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_b_adr32_if8() // 4a39 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_w_ds_if8() // 4a40 fff8 +{ + int ry = m_irdi & 7; + // 12d tsrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_w_ais_if8() // 4a50 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_w_aips_if8() // 4a58 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_w_pais_if8() // 4a60 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_w_das_if8() // 4a68 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_w_dais_if8() // 4a70 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_w_adr16_if8() // 4a78 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_w_adr32_if8() // 4a79 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_l_ds_if8() // 4a80 fff8 +{ + int ry = m_irdi & 7; + // 125 tsrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 362 tsrl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_l_ais_if8() // 4a90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_l_aips_if8() // 4a98 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_l_pais_if8() // 4aa0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_l_das_if8() // 4aa8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_l_dais_if8() // 4ab0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=15 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_l_adr16_if8() // 4ab8 ffff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tst_l_adr32_if8() // 4ab9 ffff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tas_ds_if8() // 4ac0 fff8 +{ + int ry = m_irdi & 7; + // 345 tasr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[ry]; + m_pc = m_au; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_or8(m_ftu, m_da[ry]); + // 346 tasr2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tas_ais_if8() // 4ad0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + return; + } + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 4; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tas_aips_if8() // 4ad8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + return; + } + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 4; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tas_pais_if8() // 4ae0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + return; + } + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 4; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tas_das_if8() // 4ae8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + return; + } + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 8; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tas_dais_if8() // 4af0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + return; + } + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 8; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tas_adr16_if8() // 4af8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + return; + } + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 8; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::tas_adr32_if8() // 4af9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + return; + } + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 12; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_ais_list_if8() // 4c90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 127 ldmr1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 111 ldmr2 + m_aob = m_da[ry]; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_aips_list_if8() // 4c98 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 123 popm1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 115 popm2 + m_aob = m_da[ry]; + m_ir = m_irc; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto popm6; + else + goto popm4; +popm4: + // 3ac popm4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto popm6; + else + goto popm4; +popm6: + // 32c popm6 + m_aob = m_pc; + m_da[ry] = m_at; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_das_list_if8() // 4ca8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1fd ldmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f6 ldmd2 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // 276 ldmd3 + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 237 ldmd4 + m_aob = m_at; + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_dais_list_if8() // 4cb0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1f5 ldmx0 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 027 ldmx1 + // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02b ldmx2 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto ldmx4; + else + goto ldmx3; +ldmx3: + // 021 ldmx3 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx4: + // 0e1 ldmx4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx5: + // 02e ldmx5 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=0 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 277 ldmx6 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_adr16_list_if8() // 4cb8 ffff +{ + // 1f9 lmaw1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 30e lmaw2 + m_aob = m_au; + m_dt = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 111 ldmr2 + m_aob = m_dt; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_dt; + m_au = m_dt + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_adr32_list_if8() // 4cb9 ffff +{ + // 1e9 lmal1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0af lmal2 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ee lmal3 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 111 ldmr2 + m_aob = m_dt; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_dt; + m_au = m_dt + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_dpc_list_if8() // 4cba ffff +{ + // 1fd ldmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f6 ldmd2 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // 276 ldmd3 + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 237 ldmd4 + m_aob = m_at; + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_w_dpci_list_if8() // 4cbb ffff +{ + // 1f5 ldmx0 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 027 ldmx1 + // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02b ldmx2 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto ldmx4; + else + goto ldmx3; +ldmx3: + // 021 ldmx3 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx4: + // 0e1 ldmx4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx5: + // 02e ldmx5 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=0 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 277 ldmx6 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_ais_list_if8() // 4cd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 127 ldmr1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 111 ldmr2 + m_aob = m_da[ry]; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_aips_list_if8() // 4cd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 123 popm1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 115 popm2 + m_aob = m_da[ry]; + m_ir = m_irc; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto popm6; + else + goto popm3; +popm3: + // 3ec popm3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f4 popm5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto popm6; + else + goto popm3; +popm6: + // 32c popm6 + m_aob = m_pc; + m_da[ry] = m_at; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_das_list_if8() // 4ce8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1fd ldmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f6 ldmd2 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // 276 ldmd3 + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 237 ldmd4 + m_aob = m_at; + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_dais_list_if8() // 4cf0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1f5 ldmx0 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 027 ldmx1 + // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02b ldmx2 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto ldmx4; + else + goto ldmx3; +ldmx3: + // 021 ldmx3 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx4: + // 0e1 ldmx4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx5: + // 02e ldmx5 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 277 ldmx6 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_adr16_list_if8() // 4cf8 ffff +{ + // 1f9 lmaw1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 30e lmaw2 + m_aob = m_au; + m_dt = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 111 ldmr2 + m_aob = m_dt; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_dt; + m_au = m_dt + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_adr32_list_if8() // 4cf9 ffff +{ + // 1e9 lmal1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0af lmal2 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ee lmal3 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 111 ldmr2 + m_aob = m_dt; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_dt; + m_au = m_dt + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_dpc_list_if8() // 4cfa ffff +{ + // 1fd ldmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f6 ldmd2 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // 276 ldmd3 + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 237 ldmd4 + m_aob = m_at; + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::movem_l_dpci_list_if8() // 4cfb ffff +{ + // 1f5 ldmx0 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 027 ldmx1 + // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02b ldmx2 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto ldmx4; + else + goto ldmx3; +ldmx3: + // 021 ldmx3 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx4: + // 0e1 ldmx4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx5: + // 02e ldmx5 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 277 ldmx6 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::trap_imm4_if8() // 4e40 fff0 +{ + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook((0x80 | ((m_ird & 0xf) << 2)) >> 2); + m_da[16] = m_au; + m_ftu = 0x80 | ((m_ird & 0xf) << 2); + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::link_as_imm16_if8() // 4e50 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 30b link1 + m_aob = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 2b5 link2 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 30c link3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = high16(m_at); + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 30d link4 + m_aob = m_au; + m_dbout = m_aluo; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[m_sp] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::unlk_as_if8() // 4e58 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 119 unlk1 + m_aob = m_da[ry]; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + step_movem(); + // 1fe unlk2 + m_aob = m_au; + m_ir = m_irc; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 27c unlk3 + m_aob = m_pc; + m_da[m_sp] = m_au; + m_au = m_pc + 2; + // 27d unlk4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[ry] = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_as_usp_if8() // 4e60 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 2f5 lusp1 + m_aob = m_au; + m_ir = m_irc; + m_movemr = m_dbin; + m_pc = m_au; + m_at = m_da[ry]; + m_ftu = m_dbin; + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[15] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::move_usp_as_if8() // 4e68 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 230 susp1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[15]; + m_at = m_da[15]; + m_au = m_da[ry]; + // 233 extr2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[ry] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::reset_if8() // 4e70 ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 3a6 rset1 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + m_icount -= 2; + // 27b rset2 + m_ir = m_irc; + m_au = ext32(m_aluo) - 2; + m_icount -= 2; + m_reset_cb(1); + goto rset3; +rset3: + // 0e4 rset3 + m_au = m_au - 2; + m_icount -= 2; + // 114 rset4 + m_t = !(m_au & 0x3f); + m_icount -= 2; + if(m_t) + goto rset5; + else + goto rset3; +rset5: + m_reset_cb(0); + // 064 rset5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::nop_if8() // 4e71 ffff +{ + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::stop_i16u_if8() // 4e72 ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 3a2 stop1 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + m_icount -= 2; + // 327 aaa01 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_au = m_au - 2; + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + return; +} + +void m68008_device::rte_if8() // 4e73 ffff +{ + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 12a rtr1 + if(!m_rte_instr_callback.isnull()) (m_rte_instr_callback)(1); + m_aob = m_da[m_sp]; + m_au = m_da[m_sp] + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 12b rtr2 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c5 rtr3 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 302 rtr4 + set_16h(m_at, m_dbin); + m_da[m_sp] = m_au; + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b3 jmal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rts_if8() // 4e75 ffff +{ + // 126 rts1 + m_aob = m_da[m_sp]; + m_au = m_da[m_sp] + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 116 rts2 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 303 rts3 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_da[m_sp] = m_au; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::trapv_if8() // 4e76 ffff +{ + // 06d trpv1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_isr & SR_V; + m_alub = m_dbin; + m_ftu = m_sr; + if(m_t) + goto trpv3; + else + goto trpv2; +trpv2: + // 0e2 trpv2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +trpv3: + // 022 trpv3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x07); + m_da[16] = m_au; + m_ftu = 0x001c; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rtr_if8() // 4e77 ffff +{ + // 12a rtr1 + m_aob = m_da[m_sp]; + m_au = m_da[m_sp] + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 12b rtr2 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c5 rtr3 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 302 rtr4 + set_16h(m_at, m_dbin); + m_da[m_sp] = m_au; + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b3 jmal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jsr_ais_if8() // 4e90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 273 jsra1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jsr_das_if8() // 4ea8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b0 jsrd1 + m_au = ext32(m_dbin) + m_da[ry]; + m_icount -= 2; + // 274 jsrd2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 2; + // 2b1 jsrd3 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jsr_dais_if8() // 4eb0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1f3 jsrx0 + // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 2b2 jsrx1 + m_t = m_irc & 0x0800; + m_au = ext32(m_aluo) + m_da[ry]; + m_icount -= 2; + if(m_t) + goto jsrx3; + else + goto jsrx2; +jsrx2: + // 029 jsrx2 + m_au = m_au + ext32(m_da[map_sp(m_irc >> 12)]); + m_icount -= 2; + goto jsrd2; +jsrx3: + // 0e9 jsrx3 + m_au = m_au + m_da[map_sp(m_irc >> 12)]; + m_icount -= 2; + goto jsrd2; +jsrd2: + // 274 jsrd2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 2; + // 2b1 jsrd3 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jsr_adr16_if8() // 4eb8 ffff +{ + // 293 jsaw0 + m_at = ext32(m_dbin); + m_icount -= 2; + // 270 jsaw1 + m_aob = m_at; + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jsr_adr32_if8() // 4eb9 ffff +{ + // 1f2 jsal1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 256 jsal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_pc = m_au; + set_16l(m_at, m_dbin); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jsr_dpc_if8() // 4eba ffff +{ + // 2b0 jsrd1 + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + // 274 jsrd2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 2; + // 2b1 jsrd3 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jsr_dpci_if8() // 4ebb ffff +{ + // 1f3 jsrx0 + // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 2b2 jsrx1 + m_t = m_irc & 0x0800; + m_au = ext32(m_aluo) + m_pc; + m_icount -= 2; + if(m_t) + goto jsrx3; + else + goto jsrx2; +jsrx2: + // 029 jsrx2 + m_au = m_au + ext32(m_da[map_sp(m_irc >> 12)]); + m_icount -= 2; + goto jsrd2; +jsrx3: + // 0e9 jsrx3 + m_au = m_au + m_da[map_sp(m_irc >> 12)]; + m_icount -= 2; + goto jsrd2; +jsrd2: + // 274 jsrd2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 2; + // 2b1 jsrd3 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jmp_ais_if8() // 4ed0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 255 jmpa1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jmp_das_if8() // 4ee8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2b4 jmpd1 + m_au = ext32(m_dbin) + m_da[ry]; + m_icount -= 2; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jmp_dais_if8() // 4ef0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1f7 jmpx0 + // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 2b6 jmpx1 + m_t = m_irc & 0x0800; + m_au = ext32(m_aluo) + m_da[ry]; + m_icount -= 2; + if(m_t) + goto jmpx3; + else + goto jmpx2; +jmpx2: + // 02d jmpx2 + m_au = m_au + ext32(m_da[map_sp(m_irc >> 12)]); + m_icount -= 2; + goto bbci3; +jmpx3: + // 0ed jmpx3 + m_au = m_au + m_da[map_sp(m_irc >> 12)]; + m_icount -= 2; + goto bbci3; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jmp_adr16_if8() // 4ef8 ffff +{ + // 297 jmaw1 + m_at = ext32(m_dbin); + m_icount -= 2; + // 2b3 jmal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jmp_adr32_if8() // 4ef9 ffff +{ + // 1f6 jmal1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b3 jmal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jmp_dpc_if8() // 4efa ffff +{ + // 2b4 jmpd1 + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::jmp_dpci_if8() // 4efb ffff +{ + // 1f7 jmpx0 + // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 2b6 jmpx1 + m_t = m_irc & 0x0800; + m_au = ext32(m_aluo) + m_pc; + m_icount -= 2; + if(m_t) + goto jmpx3; + else + goto jmpx2; +jmpx2: + // 02d jmpx2 + m_au = m_au + ext32(m_da[map_sp(m_irc >> 12)]); + m_icount -= 2; + goto bbci3; +jmpx3: + // 0ed jmpx3 + m_au = m_au + m_da[map_sp(m_irc >> 12)]; + m_icount -= 2; + goto bbci3; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_b_imm3_ds_if8() // 5000 f1f8 +{ + int ry = m_irdi & 7; + // 2d8 raqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_add8(m_ftu, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_b_imm3_ais_if8() // 5010 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_b_imm3_aips_if8() // 5018 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_b_imm3_pais_if8() // 5020 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_b_imm3_das_if8() // 5028 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_b_imm3_dais_if8() // 5030 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_b_imm3_adr16_if8() // 5038 f1ff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_b_imm3_adr32_if8() // 5039 f1ff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_ds_if8() // 5040 f1f8 +{ + int ry = m_irdi & 7; + // 2d8 raqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_add(m_ftu, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_as_if8() // 5048 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.ftu:m_ftu d=R.ayl:m_da[ry] + alu_add(m_ftu, m_da[ry]); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=23:m_dt d=17:m_da[ry] + alu_addc(high16(m_dt), high16(m_da[ry])); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_ais_if8() // 5050 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_aips_if8() // 5058 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_pais_if8() // 5060 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_das_if8() // 5068 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_dais_if8() // 5070 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_adr16_if8() // 5078 f1ff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_w_imm3_adr32_if8() // 5079 f1ff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_ds_if8() // 5080 f1f8 +{ + int ry = m_irdi & 7; + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_add(m_ftu, m_da[ry]); + sr_xnzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=18:m_da[ry] + alu_addc(high16(m_dt), high16(m_da[ry])); + sr_xnzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_as_if8() // 5088 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=..... i=.l...i. ALU.add a=R.ftu:m_ftu d=R.ayl:m_da[ry] + alu_add(m_ftu, m_da[ry]); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=2 c=3 m=..... i=.l....f ALU.addc a=23:m_dt d=17:m_da[ry] + alu_addc(high16(m_dt), high16(m_da[ry])); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_ais_if8() // 5090 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_aips_if8() // 5098 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_pais_if8() // 50a0 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_das_if8() // 50a8 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_dais_if8() // 50b0 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_adr16_if8() // 50b8 f1ff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addq_l_imm3_adr32_if8() // 50b9 f1ff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::st_ds_if8() // 50c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbt_ds_rel16_if8() // 50c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = 1; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::st_ais_if8() // 50d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::st_aips_if8() // 50d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::st_pais_if8() // 50e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::st_das_if8() // 50e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::st_dais_if8() // 50f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::st_adr16_if8() // 50f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::st_adr32_if8() // 50f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_b_imm3_ds_if8() // 5100 f1f8 +{ + int ry = m_irdi & 7; + // 2d8 raqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_sub8(m_ftu, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_b_imm3_ais_if8() // 5110 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_b_imm3_aips_if8() // 5118 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_b_imm3_pais_if8() // 5120 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_b_imm3_das_if8() // 5128 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_b_imm3_dais_if8() // 5130 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_b_imm3_adr16_if8() // 5138 f1ff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_b_imm3_adr32_if8() // 5139 f1ff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_ds_if8() // 5140 f1f8 +{ + int ry = m_irdi & 7; + // 2d8 raqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_sub(m_ftu, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_as_if8() // 5148 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.ftu:m_ftu d=R.ayl:m_da[ry] + alu_sub(m_ftu, m_da[ry]); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=23:m_dt d=17:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_ais_if8() // 5150 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_aips_if8() // 5158 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_pais_if8() // 5160 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_das_if8() // 5168 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_dais_if8() // 5170 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_adr16_if8() // 5178 f1ff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_w_imm3_adr32_if8() // 5179 f1ff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_ds_if8() // 5180 f1f8 +{ + int ry = m_irdi & 7; + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_sub(m_ftu, m_da[ry]); + sr_xnzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=18:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + sr_xnzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_as_if8() // 5188 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=..... i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.ayl:m_da[ry] + alu_sub(m_ftu, m_da[ry]); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=5 c=3 m=..... i=.l....f ALU.subc a=23:m_dt d=17:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_ais_if8() // 5190 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_aips_if8() // 5198 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_pais_if8() // 51a0 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_das_if8() // 51a8 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_dais_if8() // 51b0 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_adr16_if8() // 51b8 f1ff +{ + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subq_l_imm3_adr32_if8() // 51b9 f1ff +{ + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sf_ds_if8() // 51c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbra_ds_rel16_if8() // 51c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = 0; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::sf_ais_if8() // 51d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sf_aips_if8() // 51d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sf_pais_if8() // 51e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sf_das_if8() // 51e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sf_dais_if8() // 51f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sf_adr16_if8() // 51f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sf_adr32_if8() // 51f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::shi_ds_if8() // 52c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbhi_ds_rel16_if8() // 52c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::shi_ais_if8() // 52d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::shi_aips_if8() // 52d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::shi_pais_if8() // 52e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::shi_das_if8() // 52e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::shi_dais_if8() // 52f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::shi_adr16_if8() // 52f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::shi_adr32_if8() // 52f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sls_ds_if8() // 53c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbls_ds_rel16_if8() // 53c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::sls_ais_if8() // 53d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sls_aips_if8() // 53d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sls_pais_if8() // 53e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sls_das_if8() // 53e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sls_dais_if8() // 53f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sls_adr16_if8() // 53f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sls_adr32_if8() // 53f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scc_ds_if8() // 54c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbcc_ds_rel16_if8() // 54c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = !(m_sr & SR_C); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::scc_ais_if8() // 54d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scc_aips_if8() // 54d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scc_pais_if8() // 54e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scc_das_if8() // 54e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scc_dais_if8() // 54f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scc_adr16_if8() // 54f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scc_adr32_if8() // 54f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scs_ds_if8() // 55c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbcs_ds_rel16_if8() // 55c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = m_sr & SR_C; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::scs_ais_if8() // 55d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scs_aips_if8() // 55d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scs_pais_if8() // 55e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scs_das_if8() // 55e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scs_dais_if8() // 55f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scs_adr16_if8() // 55f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::scs_adr32_if8() // 55f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sne_ds_if8() // 56c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbne_ds_rel16_if8() // 56c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = !(m_sr & SR_Z); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::sne_ais_if8() // 56d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sne_aips_if8() // 56d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sne_pais_if8() // 56e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sne_das_if8() // 56e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sne_dais_if8() // 56f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sne_adr16_if8() // 56f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sne_adr32_if8() // 56f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::seq_ds_if8() // 57c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbeq_ds_rel16_if8() // 57c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = m_sr & SR_Z; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::seq_ais_if8() // 57d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::seq_aips_if8() // 57d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::seq_pais_if8() // 57e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::seq_das_if8() // 57e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::seq_dais_if8() // 57f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::seq_adr16_if8() // 57f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::seq_adr32_if8() // 57f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svc_ds_if8() // 58c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbvc_ds_rel16_if8() // 58c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = !(m_sr & SR_V); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::svc_ais_if8() // 58d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svc_aips_if8() // 58d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svc_pais_if8() // 58e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svc_das_if8() // 58e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svc_dais_if8() // 58f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svc_adr16_if8() // 58f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svc_adr32_if8() // 58f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svs_ds_if8() // 59c0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbvs_ds_rel16_if8() // 59c8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = m_sr & SR_V; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::svs_ais_if8() // 59d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svs_aips_if8() // 59d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svs_pais_if8() // 59e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svs_das_if8() // 59e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svs_dais_if8() // 59f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svs_adr16_if8() // 59f8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::svs_adr32_if8() // 59f9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::spl_ds_if8() // 5ac0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbpl_ds_rel16_if8() // 5ac8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = !(m_sr & SR_N); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::spl_ais_if8() // 5ad0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::spl_aips_if8() // 5ad8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::spl_pais_if8() // 5ae0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::spl_das_if8() // 5ae8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::spl_dais_if8() // 5af0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::spl_adr16_if8() // 5af8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::spl_adr32_if8() // 5af9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::smi_ds_if8() // 5bc0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbmi_ds_rel16_if8() // 5bc8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = m_sr & SR_N; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::smi_ais_if8() // 5bd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::smi_aips_if8() // 5bd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::smi_pais_if8() // 5be0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::smi_das_if8() // 5be8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::smi_dais_if8() // 5bf0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::smi_adr16_if8() // 5bf8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::smi_adr32_if8() // 5bf9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sge_ds_if8() // 5cc0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbge_ds_rel16_if8() // 5cc8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::sge_ais_if8() // 5cd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sge_aips_if8() // 5cd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sge_pais_if8() // 5ce0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sge_das_if8() // 5ce8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sge_dais_if8() // 5cf0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sge_adr16_if8() // 5cf8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sge_adr32_if8() // 5cf9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::slt_ds_if8() // 5dc0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dblt_ds_rel16_if8() // 5dc8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::slt_ais_if8() // 5dd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::slt_aips_if8() // 5dd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::slt_pais_if8() // 5de0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::slt_das_if8() // 5de8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::slt_dais_if8() // 5df0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::slt_adr16_if8() // 5df8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::slt_adr32_if8() // 5df9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sgt_ds_if8() // 5ec0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dbgt_ds_rel16_if8() // 5ec8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::sgt_ais_if8() // 5ed0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sgt_aips_if8() // 5ed8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sgt_pais_if8() // 5ee0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sgt_das_if8() // 5ee8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sgt_dais_if8() // 5ef0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sgt_adr16_if8() // 5ef8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sgt_adr32_if8() // 5ef9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sle_ds_if8() // 5fc0 fff8 +{ + int ry = m_irdi & 7; + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::dble_ds_rel16_if8() // 5fc8 fff8 +{ + int ry = m_irdi & 7; + // 06c dbcc1 + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; +} + +void m68008_device::sle_ais_if8() // 5fd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sle_aips_if8() // 5fd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sle_pais_if8() // 5fe0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sle_das_if8() // 5fe8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sle_dais_if8() // 5ff0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sle_adr16_if8() // 5ff8 ffff +{ + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sle_adr32_if8() // 5ff9 ffff +{ + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bra_rel16_if8() // 6000 ffff +{ + // 068 bbcw1 + m_t = 1; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bra_rel8_if8() // 6000 ff00 +{ + // 308 bbci1 + m_t = 1; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bsr_rel16_if8() // 6100 ffff +{ + // 0a9 bsrw1 + m_at = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[m_sp] - 4; + m_icount -= 2; + // 10e bsrw2 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0aa bsrw3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bsr_rel8_if8() // 6100 ff00 +{ + // 089 bsri1 + m_at = m_pc; + m_au = m_da[m_sp] - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 102 bsri2 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0a8 bsri3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = ext32(m_ftu) + m_pc; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bhi_rel16_if8() // 6200 ffff +{ + // 068 bbcw1 + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bhi_rel8_if8() // 6200 ff00 +{ + // 308 bbci1 + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bls_rel16_if8() // 6300 ffff +{ + // 068 bbcw1 + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bls_rel8_if8() // 6300 ff00 +{ + // 308 bbci1 + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bcc_rel16_if8() // 6400 ffff +{ + // 068 bbcw1 + m_t = !(m_sr & SR_C); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bcc_rel8_if8() // 6400 ff00 +{ + // 308 bbci1 + m_t = !(m_sr & SR_C); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bcs_rel16_if8() // 6500 ffff +{ + // 068 bbcw1 + m_t = m_sr & SR_C; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bcs_rel8_if8() // 6500 ff00 +{ + // 308 bbci1 + m_t = m_sr & SR_C; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bne_rel16_if8() // 6600 ffff +{ + // 068 bbcw1 + m_t = !(m_sr & SR_Z); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bne_rel8_if8() // 6600 ff00 +{ + // 308 bbci1 + m_t = !(m_sr & SR_Z); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::beq_rel16_if8() // 6700 ffff +{ + // 068 bbcw1 + m_t = m_sr & SR_Z; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::beq_rel8_if8() // 6700 ff00 +{ + // 308 bbci1 + m_t = m_sr & SR_Z; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bvc_rel16_if8() // 6800 ffff +{ + // 068 bbcw1 + m_t = !(m_sr & SR_V); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bvc_rel8_if8() // 6800 ff00 +{ + // 308 bbci1 + m_t = !(m_sr & SR_V); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bvs_rel16_if8() // 6900 ffff +{ + // 068 bbcw1 + m_t = m_sr & SR_V; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bvs_rel8_if8() // 6900 ff00 +{ + // 308 bbci1 + m_t = m_sr & SR_V; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bpl_rel16_if8() // 6a00 ffff +{ + // 068 bbcw1 + m_t = !(m_sr & SR_N); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bpl_rel8_if8() // 6a00 ff00 +{ + // 308 bbci1 + m_t = !(m_sr & SR_N); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bmi_rel16_if8() // 6b00 ffff +{ + // 068 bbcw1 + m_t = m_sr & SR_N; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bmi_rel8_if8() // 6b00 ff00 +{ + // 308 bbci1 + m_t = m_sr & SR_N; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bge_rel16_if8() // 6c00 ffff +{ + // 068 bbcw1 + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bge_rel8_if8() // 6c00 ff00 +{ + // 308 bbci1 + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::blt_rel16_if8() // 6d00 ffff +{ + // 068 bbcw1 + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::blt_rel8_if8() // 6d00 ff00 +{ + // 308 bbci1 + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bgt_rel16_if8() // 6e00 ffff +{ + // 068 bbcw1 + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::bgt_rel8_if8() // 6e00 ff00 +{ + // 308 bbci1 + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ble_rel16_if8() // 6f00 ffff +{ + // 068 bbcw1 + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ble_rel8_if8() // 6f00 ff00 +{ + // 308 bbci1 + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::moveq_imm8o_dd_if8() // 7000 f100 +{ + int rx = (m_irdi >> 9) & 7; + // 23b rlql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_ftu); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_ds_dd_if8() // 8000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_or8(m_da[ry], m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_ais_dd_if8() // 8010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_aips_dd_if8() // 8018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_pais_dd_if8() // 8020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_das_dd_if8() // 8028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dais_dd_if8() // 8030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_adr16_dd_if8() // 8038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_adr32_dd_if8() // 8039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dpc_dd_if8() // 803a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dpci_dd_if8() // 803b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_imm8_dd_if8() // 803c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_or8(m_dt, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_ds_dd_if8() // 8040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_or(m_da[ry], m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_ais_dd_if8() // 8050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_aips_dd_if8() // 8058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_pais_dd_if8() // 8060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_das_dd_if8() // 8068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dais_dd_if8() // 8070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_adr16_dd_if8() // 8078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_adr32_dd_if8() // 8079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dpc_dd_if8() // 807a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dpci_dd_if8() // 807b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_imm16_dd_if8() // 807c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_or(m_dt, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_ds_dd_if8() // 8080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_or(m_da[ry], m_da[rx]); + sr_nzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=18:m_da[ry] d=16:m_da[rx] + alu_or(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_ais_dd_if8() // 8090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_aips_dd_if8() // 8098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_pais_dd_if8() // 80a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_das_dd_if8() // 80a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dais_dd_if8() // 80b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_adr16_dd_if8() // 80b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_adr32_dd_if8() // 80b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dpc_dd_if8() // 80ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dpci_dd_if8() // 80bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e7 aixw0 + // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_imm32_dd_if8() // 80bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_or(m_dt, m_da[rx]); + sr_nzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=16:m_da[rx] + alu_or(high16(m_dt), high16(m_da[rx])); + sr_nzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_ds_dd_if8() // 80c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 0a6 dvur1 + m_alub = m_da[ry]; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_da[ry]); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_ais_dd_if8() // 80d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_aips_dd_if8() // 80d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_pais_dd_if8() // 80e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_das_dd_if8() // 80e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_dais_dd_if8() // 80f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=1 c=5 m=..... i=.l.d... ALU.over a=R.dbin:m_dbin d=0 + alu_over(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_adr16_dd_if8() // 80f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_adr32_dd_if8() // 80f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_dpc_dd_if8() // 80fa f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_dpci_dd_if8() // 80fb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=1 c=5 m=..... i=.l.d... ALU.over a=R.dbin:m_dbin d=0 + alu_over(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divu_w_imm16_dd_if8() // 80fc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0a6 dvur1 + m_alub = m_dt; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dt); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sbcd_ds_dd_if8() // 8100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1cd rbrb1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sbcd8(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 11b rbrb2 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 238 rbrb3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sbcd_pais_paid_if8() // 8108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 107 asbb1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 135 asbb2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 136 asbb3 + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 04e asbb4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_dbin = m_edb; + // 040 asbb5 + m_aob = m_pc; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=alub d=R.dbin:m_dbin + alu_sbcd8(m_alub, m_dbin); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dd_ais_if8() // 8110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dd_aips_if8() // 8118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dd_pais_if8() // 8120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dd_das_if8() // 8128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dd_dais_if8() // 8130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dd_adr16_if8() // 8138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_b_dd_adr32_if8() // 8139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dd_ais_if8() // 8150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dd_aips_if8() // 8158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dd_pais_if8() // 8160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dd_das_if8() // 8168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dd_dais_if8() // 8170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dd_adr16_if8() // 8178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_w_dd_adr32_if8() // 8179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dd_ais_if8() // 8190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dd_aips_if8() // 8198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dd_pais_if8() // 81a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dd_das_if8() // 81a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dd_dais_if8() // 81b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dd_adr16_if8() // 81b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::or_l_dd_adr32_if8() // 81b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::divs_w_ds_dd_if8() // 81c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 0ae dvs02 + m_alub = m_da[ry]; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_da[ry]); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_ais_dd_if8() // 81d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_aips_dd_if8() // 81d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_pais_dd_if8() // 81e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_das_dd_if8() // 81e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_dais_dd_if8() // 81f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=1 c=5 m=..... i=.l.d... ALU.over a=R.dbin:m_dbin d=0 + alu_over(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_adr16_dd_if8() // 81f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_adr32_dd_if8() // 81f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_dpc_dd_if8() // 81fa f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_dpci_dd_if8() // 81fb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=1 c=5 m=..... i=.l.d... ALU.over a=R.dbin:m_dbin d=0 + alu_over(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::divs_w_imm16_dd_if8() // 81fc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0ae dvs02 + m_alub = m_dt; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dt); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; +} + +void m68008_device::sub_b_ds_dd_if8() // 9000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub8(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_ais_dd_if8() // 9010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_aips_dd_if8() // 9018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_pais_dd_if8() // 9020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_das_dd_if8() // 9028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dais_dd_if8() // 9030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_adr16_dd_if8() // 9038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_adr32_dd_if8() // 9039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dpc_dd_if8() // 903a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dpci_dd_if8() // 903b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_imm8_dd_if8() // 903c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub8(m_dt, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_ds_dd_if8() // 9040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_as_dd_if8() // 9048 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_ais_dd_if8() // 9050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_aips_dd_if8() // 9058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_pais_dd_if8() // 9060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_das_dd_if8() // 9068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dais_dd_if8() // 9070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_adr16_dd_if8() // 9078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_adr32_dd_if8() // 9079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dpc_dd_if8() // 907a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dpci_dd_if8() // 907b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_imm16_dd_if8() // 907c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_ds_dd_if8() // 9080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=18:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_as_dd_if8() // 9088 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=17:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_ais_dd_if8() // 9090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_aips_dd_if8() // 9098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_pais_dd_if8() // 90a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_das_dd_if8() // 90a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dais_dd_if8() // 90b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_adr16_dd_if8() // 90b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_adr32_dd_if8() // 90b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dpc_dd_if8() // 90ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dpci_dd_if8() // 90bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_imm32_dd_if8() // 90bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=16:m_da[rx] + alu_subc(high16(m_dt), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_ds_ad_if8() // 90c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_as_ad_if8() // 90c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_ais_ad_if8() // 90d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_aips_ad_if8() // 90d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_pais_ad_if8() // 90e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_das_ad_if8() // 90e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_dais_ad_if8() // 90f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_adr16_ad_if8() // 90f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_adr32_ad_if8() // 90f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_dpc_ad_if8() // 90fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_dpci_ad_if8() // 90fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_w_imm16_ad_if8() // 90fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subx_b_ds_dd_if8() // 9100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_subx8(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subx_b_pais_paid_if8() // 9108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 10f asxw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 131 asxw2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 132 asxw3 + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 04a asxw4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_dbin = m_edb; + // 065 asxw5 + m_aob = m_pc; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=alub d=R.dbin:m_dbin + alu_subx8(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dd_ais_if8() // 9110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dd_aips_if8() // 9118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dd_pais_if8() // 9120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dd_das_if8() // 9128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dd_dais_if8() // 9130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dd_adr16_if8() // 9138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_b_dd_adr32_if8() // 9139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subx_w_ds_dd_if8() // 9140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_subx(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subx_w_pais_paid_if8() // 9148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 10f asxw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 131 asxw2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 132 asxw3 + m_au = m_da[rx] - 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 04a asxw4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 065 asxw5 + m_aob = m_pc; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=alub d=R.dbin:m_dbin + alu_subx(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dd_ais_if8() // 9150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dd_aips_if8() // 9158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dd_pais_if8() // 9160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dd_das_if8() // 9168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dd_dais_if8() // 9170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dd_adr16_if8() // 9178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_w_dd_adr32_if8() // 9179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subx_l_ds_dd_if8() // 9180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_subx(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=18:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::subx_l_pais_paid_if8() // 9188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 10b asxl1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 048 asxl2 + m_aob = m_au; + m_alub = m_dbin; + m_au = m_au - 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 139 asxl3 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 13a asxl4 + m_au = m_da[rx] - 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 04c asxl5 + m_aob = m_au; + m_alub = m_dbin; + m_au = m_au - 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 047 asxl6 + m_aob = m_au; + m_at = m_au; + m_da[rx] = m_au; + m_au = m_au + 2; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_subx(m_aluo, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 061 asxl7 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = ext32(m_dbin); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 062 asxl8 + m_aob = m_pc; + m_au = m_at; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=R.dbin:m_dbin + alu_subc(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dd_ais_if8() // 9190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dd_aips_if8() // 9198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dd_pais_if8() // 91a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dd_das_if8() // 91a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dd_dais_if8() // 91b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dd_adr16_if8() // 91b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::sub_l_dd_adr32_if8() // 91b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_ds_ad_if8() // 91c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=18:m_da[ry] d=15:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_as_ad_if8() // 91c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=17:m_da[ry] d=15:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_ais_ad_if8() // 91d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_aips_ad_if8() // 91d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_pais_ad_if8() // 91e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_das_ad_if8() // 91e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_dais_ad_if8() // 91f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_adr16_ad_if8() // 91f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_adr32_ad_if8() // 91f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_dpc_ad_if8() // 91fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_dpci_ad_if8() // 91fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::suba_l_imm32_ad_if8() // 91fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=23:m_dt d=15:m_da[rx] + alu_subc(high16(m_dt), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_ds_dd_if8() // b000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub8(m_da[ry], m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_ais_dd_if8() // b010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_aips_dd_if8() // b018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_pais_dd_if8() // b020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_das_dd_if8() // b028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_dais_dd_if8() // b030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_adr16_dd_if8() // b038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_adr32_dd_if8() // b039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_dpc_dd_if8() // b03a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_dpci_dd_if8() // b03b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_b_imm8_dd_if8() // b03c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub8(m_dt, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_ds_dd_if8() // b040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_as_dd_if8() // b048 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_ais_dd_if8() // b050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_aips_dd_if8() // b058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_pais_dd_if8() // b060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_das_dd_if8() // b068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_dais_dd_if8() // b070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_adr16_dd_if8() // b078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_adr32_dd_if8() // b079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_dpc_dd_if8() // b07a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_dpci_dd_if8() // b07b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_w_imm16_dd_if8() // b07c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_ds_dd_if8() // b080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=18:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_as_dd_if8() // b088 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=17:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_ais_dd_if8() // b090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_aips_dd_if8() // b098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_pais_dd_if8() // b0a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_das_dd_if8() // b0a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_dais_dd_if8() // b0b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_adr16_dd_if8() // b0b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_adr32_dd_if8() // b0b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_dpc_dd_if8() // b0ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_dpci_dd_if8() // b0bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmp_l_imm32_dd_if8() // b0bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=16:m_da[rx] + alu_subc(high16(m_dt), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_ds_ad_if8() // b0c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1d9 cprm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_as_ad_if8() // b0c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1d9 cprm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_ais_ad_if8() // b0d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_aips_ad_if8() // b0d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_pais_ad_if8() // b0e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_das_ad_if8() // b0e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_dais_ad_if8() // b0f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_adr16_ad_if8() // b0f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_adr32_ad_if8() // b0f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_dpc_ad_if8() // b0fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_dpci_ad_if8() // b0fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_w_imm16_ad_if8() // b0fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d9 cprm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_b_dd_ds_if8() // b100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor8(m_da[rx], m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpm_b_aips_aipd_if8() // b108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 06b cmmw1 + m_aob = m_da[ry]; + m_pc = m_au; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 086 cmmw2 + m_at = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 122 cmmw3 + m_aob = m_da[rx]; + m_ir = m_irc; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_dbin = m_edb; + // 170 cmmw4 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_sub8(m_aluo, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_b_dd_ais_if8() // b110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_b_dd_aips_if8() // b118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_b_dd_pais_if8() // b120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_b_dd_das_if8() // b128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_b_dd_dais_if8() // b130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_b_dd_adr16_if8() // b138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_b_dd_adr32_if8() // b139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_w_dd_ds_if8() // b140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor(m_da[rx], m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpm_w_aips_aipd_if8() // b148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 06b cmmw1 + m_aob = m_da[ry]; + m_pc = m_au; + m_au = m_da[ry] + 2; + // 086 cmmw2 + m_at = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 122 cmmw3 + m_aob = m_da[rx]; + m_ir = m_irc; + m_au = m_da[rx] + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 170 cmmw4 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_sub(m_aluo, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_w_dd_ais_if8() // b150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_w_dd_aips_if8() // b158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_w_dd_pais_if8() // b160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_w_dd_das_if8() // b168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_w_dd_dais_if8() // b170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_w_dd_adr16_if8() // b178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_w_dd_adr32_if8() // b179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_l_dd_ds_if8() // b180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor(m_da[rx], m_da[ry]); + sr_nzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=18:m_da[ry] + alu_eor(high16(m_da[rx]), high16(m_da[ry])); + sr_nzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpm_l_aips_aipd_if8() // b188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 06f cmml1 + m_aob = m_da[ry]; + m_pc = m_au; + m_au = m_da[ry] + 2; + // 08e cmml2 + m_at = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 154 cmml3 + m_aob = m_at; + m_alub = m_dbin; + m_da[ry] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 12e cmml4 + m_aob = m_da[rx]; + m_ir = m_irc; + m_au = m_da[rx] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 155 cmml5 + m_aob = m_au; + m_alue = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 156 cmml6 + m_aob = m_pc; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_sub(m_aluo, m_dbin); + sr_nzvc(); + // 157 cmml7 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=R.alue:m_alue + alu_subc(m_alub, m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_l_dd_ais_if8() // b190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_l_dd_aips_if8() // b198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_l_dd_pais_if8() // b1a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_l_dd_das_if8() // b1a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_l_dd_dais_if8() // b1b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=13 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_l_dd_adr16_if8() // b1b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::eor_l_dd_adr32_if8() // b1b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_ds_ad_if8() // b1c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=18:m_da[ry] d=15:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_as_ad_if8() // b1c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=17:m_da[ry] d=15:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_ais_ad_if8() // b1d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_aips_ad_if8() // b1d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_pais_ad_if8() // b1e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_das_ad_if8() // b1e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_dais_ad_if8() // b1f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_adr16_ad_if8() // b1f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_adr32_ad_if8() // b1f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_dpc_ad_if8() // b1fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_dpci_ad_if8() // b1fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::cmpa_l_imm32_ad_if8() // b1fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=23:m_dt d=15:m_da[rx] + alu_subc(high16(m_dt), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_ds_dd_if8() // c000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_and8(m_da[ry], m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_ais_dd_if8() // c010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_aips_dd_if8() // c018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_pais_dd_if8() // c020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_das_dd_if8() // c028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dais_dd_if8() // c030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_adr16_dd_if8() // c038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_adr32_dd_if8() // c039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dpc_dd_if8() // c03a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dpci_dd_if8() // c03b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_imm8_dd_if8() // c03c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_and8(m_dt, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_ds_dd_if8() // c040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_and(m_da[ry], m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_ais_dd_if8() // c050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_aips_dd_if8() // c058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_pais_dd_if8() // c060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_das_dd_if8() // c068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dais_dd_if8() // c070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_adr16_dd_if8() // c078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_adr32_dd_if8() // c079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dpc_dd_if8() // c07a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dpci_dd_if8() // c07b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_imm16_dd_if8() // c07c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_and(m_dt, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_ds_dd_if8() // c080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_and(m_da[ry], m_da[rx]); + sr_nzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=18:m_da[ry] d=16:m_da[rx] + alu_and(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_ais_dd_if8() // c090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_aips_dd_if8() // c098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_pais_dd_if8() // c0a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_das_dd_if8() // c0a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dais_dd_if8() // c0b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_adr16_dd_if8() // c0b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_adr32_dd_if8() // c0b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dpc_dd_if8() // c0ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dpci_dd_if8() // c0bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_imm32_dd_if8() // c0bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_and(m_dt, m_da[rx]); + sr_nzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=16:m_da[rx] + alu_and(high16(m_dt), high16(m_da[rx])); + sr_nzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_ds_dd_if8() // c0c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 15b mulr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_da[ry]; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_ais_dd_if8() // c0d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_aips_dd_if8() // c0d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_pais_dd_if8() // c0e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_das_dd_if8() // c0e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_dais_dd_if8() // c0f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=7 c=5 m=..... i=.lm.... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_adr16_dd_if8() // c0f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_adr32_dd_if8() // c0f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_dpc_dd_if8() // c0fa f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_dpci_dd_if8() // c0fb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=7 c=5 m=..... i=.lm.... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::mulu_w_imm16_dd_if8() // c0fc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15b mulr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dt; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::abcd_ds_dd_if8() // c100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1cd rbrb1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=3 c=2 m=xnzvc i=b....i. ALU.abcd a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_abcd8(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 11b rbrb2 + m_au = m_at; + // alu r=3 c=3 m=xnzvc i=b.....f ALU.add a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 238 rbrb3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::abcd_pais_paid_if8() // c108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 107 asbb1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 135 asbb2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=3 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 136 asbb3 + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 04e asbb4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_dbin = m_edb; + // 040 asbb5 + m_aob = m_pc; + // alu r=3 c=2 m=xnzvc i=b....i. ALU.abcd a=alub d=R.dbin:m_dbin + alu_abcd8(m_alub, m_dbin); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=3 c=3 m=xnzvc i=b.....f ALU.add a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dd_ais_if8() // c110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dd_aips_if8() // c118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dd_pais_if8() // c120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dd_das_if8() // c128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dd_dais_if8() // c130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dd_adr16_if8() // c138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_b_dd_adr32_if8() // c139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::exg_dd_ds_if8() // c140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 3e3 exge1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // 231 exge2 + m_da[rx] = m_au; + m_da[ry] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::exg_ad_as_if8() // c148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 3e3 exge1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // 231 exge2 + m_da[rx] = m_au; + m_da[ry] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dd_ais_if8() // c150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dd_aips_if8() // c158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dd_pais_if8() // c160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dd_das_if8() // c168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dd_dais_if8() // c170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dd_adr16_if8() // c178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_w_dd_adr32_if8() // c179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::exg_dd_as_if8() // c188 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 3e3 exge1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // 231 exge2 + m_da[rx] = m_au; + m_da[ry] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dd_ais_if8() // c190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dd_aips_if8() // c198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dd_pais_if8() // c1a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dd_das_if8() // c1a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dd_dais_if8() // c1b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dd_adr16_if8() // c1b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::and_l_dd_adr32_if8() // c1b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::muls_w_ds_dd_if8() // c1c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 15b mulr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_da[ry]; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_ais_dd_if8() // c1d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_aips_dd_if8() // c1d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_pais_dd_if8() // c1e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_das_dd_if8() // c1e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_dais_dd_if8() // c1f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=7 c=5 m=..... i=.lm.... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_adr16_dd_if8() // c1f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_adr32_dd_if8() // c1f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_dpc_dd_if8() // c1fa f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_dpci_dd_if8() // c1fb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=7 c=5 m=..... i=.lm.... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::muls_w_imm16_dd_if8() // c1fc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15b mulr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dt; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +} + +void m68008_device::add_b_ds_dd_if8() // d000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_add8(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_ais_dd_if8() // d010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_aips_dd_if8() // d018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_pais_dd_if8() // d020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_das_dd_if8() // d028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dais_dd_if8() // d030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_adr16_dd_if8() // d038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_adr32_dd_if8() // d039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dpc_dd_if8() // d03a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dpci_dd_if8() // d03b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_imm8_dd_if8() // d03c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_add8(m_dt, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_ds_dd_if8() // d040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_as_dd_if8() // d048 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_ais_dd_if8() // d050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_aips_dd_if8() // d058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_pais_dd_if8() // d060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_das_dd_if8() // d068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dais_dd_if8() // d070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_adr16_dd_if8() // d078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_adr32_dd_if8() // d079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dpc_dd_if8() // d07a f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dpci_dd_if8() // d07b f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_imm16_dd_if8() // d07c f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_add(m_dt, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_ds_dd_if8() // d080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=18:m_da[ry] d=16:m_da[rx] + alu_addc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_as_dd_if8() // d088 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=17:m_da[ry] d=16:m_da[rx] + alu_addc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_ais_dd_if8() // d090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_aips_dd_if8() // d098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_pais_dd_if8() // d0a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_das_dd_if8() // d0a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dais_dd_if8() // d0b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_adr16_dd_if8() // d0b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_adr32_dd_if8() // d0b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dpc_dd_if8() // d0ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dpci_dd_if8() // d0bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_imm32_dd_if8() // d0bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_add(m_dt, m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=16:m_da[rx] + alu_addc(high16(m_dt), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_ds_ad_if8() // d0c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_as_ad_if8() // d0c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_ais_ad_if8() // d0d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_aips_ad_if8() // d0d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_pais_ad_if8() // d0e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_das_ad_if8() // d0e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_dais_ad_if8() // d0f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_adr16_ad_if8() // d0f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_adr32_ad_if8() // d0f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_dpc_ad_if8() // d0fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_dpci_ad_if8() // d0fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_w_imm16_ad_if8() // d0fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_add(m_dt, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addx_b_ds_dd_if8() // d100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=12 c=2 m=xnzvc i=b....i. ALU.addx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_addx8(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=b...... ALU.addx a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addx_b_pais_paid_if8() // d108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 10f asxw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=12 c=0 m=..... i=b...... ALU.addx a=none d=R.dbin:m_dbin + m_icount -= 2; + // 131 asxw2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=12 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 132 asxw3 + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=12 c=0 m=..... i=b...... ALU.addx a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 04a asxw4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + // alu r=12 c=0 m=..... i=b...... ALU.addx a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_dbin = m_edb; + // 065 asxw5 + m_aob = m_pc; + m_au = m_at; + // alu r=12 c=2 m=xnzvc i=b....i. ALU.addx a=alub d=R.dbin:m_dbin + alu_addx8(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=b...... ALU.addx a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dd_ais_if8() // d110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dd_aips_if8() // d118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dd_pais_if8() // d120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dd_das_if8() // d128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dd_dais_if8() // d130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dd_adr16_if8() // d138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_b_dd_adr32_if8() // d139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addx_w_ds_dd_if8() // d140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=12 c=2 m=xnzvc i=.....i. ALU.addx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_addx(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=....... ALU.addx a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addx_w_pais_paid_if8() // d148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 10f asxw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + // alu r=12 c=0 m=..... i=....... ALU.addx a=none d=R.dbin:m_dbin + m_icount -= 2; + // 131 asxw2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=12 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 132 asxw3 + m_au = m_da[rx] - 2; + // alu r=12 c=0 m=..... i=....... ALU.addx a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 04a asxw4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + // alu r=12 c=0 m=..... i=....... ALU.addx a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 065 asxw5 + m_aob = m_pc; + m_au = m_at; + // alu r=12 c=2 m=xnzvc i=.....i. ALU.addx a=alub d=R.dbin:m_dbin + alu_addx(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=....... ALU.addx a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dd_ais_if8() // d150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dd_aips_if8() // d158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dd_pais_if8() // d160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dd_das_if8() // d168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dd_dais_if8() // d170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dd_adr16_if8() // d178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_w_dd_adr32_if8() // d179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addx_l_ds_dd_if8() // d180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=12 c=2 m=xnzvc i=.l...i. ALU.addx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_addx(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=12 c=3 m=xnzvc i=.l....f ALU.addx a=18:m_da[ry] d=16:m_da[rx] + alu_addx(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::addx_l_pais_paid_if8() // d188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 10b asxl1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=R.dbin:m_dbin + m_icount -= 2; + // 048 asxl2 + m_aob = m_au; + m_alub = m_dbin; + m_au = m_au - 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=R.dbin:m_dbin d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 139 asxl3 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=12 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 13a asxl4 + m_au = m_da[rx] - 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 04c asxl5 + m_aob = m_au; + m_alub = m_dbin; + m_au = m_au - 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=R.dbin:m_dbin d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 047 asxl6 + m_aob = m_au; + m_at = m_au; + m_da[rx] = m_au; + m_au = m_au + 2; + // alu r=12 c=2 m=xnzvc i=.l...i. ALU.addx a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_addx(m_aluo, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 061 asxl7 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = ext32(m_dbin); + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 062 asxl8 + m_aob = m_pc; + m_au = m_at; + // alu r=12 c=3 m=xnzvc i=.l....f ALU.addx a=alub d=R.dbin:m_dbin + alu_addx(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dd_ais_if8() // d190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dd_aips_if8() // d198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dd_pais_if8() // d1a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dd_das_if8() // d1a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dd_dais_if8() // d1b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dd_adr16_if8() // d1b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::add_l_dd_adr32_if8() // d1b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_ds_ad_if8() // d1c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=18:m_da[ry] d=15:m_da[rx] + alu_addc(high16(m_da[ry]), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_as_ad_if8() // d1c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=17:m_da[ry] d=15:m_da[rx] + alu_addc(high16(m_da[ry]), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_ais_ad_if8() // d1d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_aips_ad_if8() // d1d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_pais_ad_if8() // d1e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_das_ad_if8() // d1e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_dais_ad_if8() // d1f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_adr16_ad_if8() // d1f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_adr32_ad_if8() // d1f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_dpc_ad_if8() // d1fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_dpci_ad_if8() // d1fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::adda_l_imm32_ad_if8() // d1fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_add(m_dt, m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=23:m_dt d=15:m_da[rx] + alu_addc(high16(m_dt), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_b_imm3_ds_if8() // e000 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=b....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_b_imm3_ds_if8() // e008 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=b....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_b_imm3_ds_if8() // e010 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=8 c=1 m=..... i=b...r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_and8x(high16(m_da[ry]), 0xff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=b...ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8x(m_da[ry], 0xff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=b....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_b_imm3_ds_if8() // e018 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=b....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror8(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_b_dd_ds_if8() // e020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=b....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_b_dd_ds_if8() // e028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=b....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_b_dd_ds_if8() // e030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=8 c=1 m=..... i=b...r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_and8x(high16(m_da[ry]), 0xff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=b...ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8x(m_da[ry], 0xff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=b....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_b_dd_ds_if8() // e038 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=b....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror8(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_w_imm3_ds_if8() // e040 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_w_imm3_ds_if8() // e048 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=5 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_w_imm3_ds_if8() // e050 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_w_imm3_ds_if8() // e058 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=10 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_w_dd_ds_if8() // e060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_w_dd_ds_if8() // e068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=5 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_w_dd_ds_if8() // e070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_w_dd_ds_if8() // e078 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=10 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_l_imm3_ds_if8() // e080 f1f8 +{ + int ry = m_irdi & 7; + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=.l...i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_l_imm3_ds_if8() // e088 f1f8 +{ + int ry = m_irdi & 7; + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=.l...i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=5 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_l_imm3_ds_if8() // e090 f1f8 +{ + int ry = m_irdi & 7; + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=8 c=1 m=..... i=.l..r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=.l..ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=.l...i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=8 c=1 m=.nz.. i=.l..r.f ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_l_imm3_ds_if8() // e098 f1f8 +{ + int ry = m_irdi & 7; + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=.l...i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror32(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=10 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_l_dd_ds_if8() // e0a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=.l...i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_l_dd_ds_if8() // e0a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=.l...i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=5 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_l_dd_ds_if8() // e0b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=8 c=1 m=..... i=.l..r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=.l..ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=.l...i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=8 c=1 m=.nz.. i=.l..r.f ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_l_dd_ds_if8() // e0b8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=.l...i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror32(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=10 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_ais_if8() // e0d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_aips_if8() // e0d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_pais_if8() // e0e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_das_if8() // e0e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_dais_if8() // e0f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_adr16_if8() // e0f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asr_adr32_if8() // e0f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_b_imm3_ds_if8() // e100 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=3 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=b....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_b_imm3_ds_if8() // e108 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=b....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_b_imm3_ds_if8() // e110 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_and8x(high16(m_da[ry]), 0xff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=b...ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8x(m_da[ry], 0xff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=b....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_b_imm3_ds_if8() // e118 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=b....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol8(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_b_dd_ds_if8() // e120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=3 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=b....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_b_dd_ds_if8() // e128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=b....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_b_dd_ds_if8() // e130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_and8x(high16(m_da[ry]), 0xff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=b...ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8x(m_da[ry], 0xff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=b....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_b_dd_ds_if8() // e138 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=b....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol8(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_w_imm3_ds_if8() // e140 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=3 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_w_imm3_ds_if8() // e148 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=4 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_w_imm3_ds_if8() // e150 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_w_imm3_ds_if8() // e158 f1f8 +{ + int ry = m_irdi & 7; + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=9 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_w_dd_ds_if8() // e160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=3 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_w_dd_ds_if8() // e168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=4 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_w_dd_ds_if8() // e170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_w_dd_ds_if8() // e178 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=9 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_l_imm3_ds_if8() // e180 f1f8 +{ + int ry = m_irdi & 7; + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=3 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=.l...i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=3 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_l_imm3_ds_if8() // e188 f1f8 +{ + int ry = m_irdi & 7; + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=.l...i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=R.alue:m_alue + alu_and(m_aluo, m_alue); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=4 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_l_imm3_ds_if8() // e190 f1f8 +{ + int ry = m_irdi & 7; + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=.l..ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=.l...i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=11 c=1 m=.nz.. i=.l..r.f ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_l_imm3_ds_if8() // e198 f1f8 +{ + int ry = m_irdi & 7; + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=9 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=.l...i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol32(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=9 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_l_dd_ds_if8() // e1a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=3 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=.l...i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=3 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_l_dd_ds_if8() // e1a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=.l...i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=R.alue:m_alue + alu_and(m_aluo, m_alue); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=4 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_l_dd_ds_if8() // e1b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=.l..ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=.l...i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=11 c=1 m=.nz.. i=.l..r.f ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_l_dd_ds_if8() // e1b8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=9 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=.l...i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol32(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=9 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_ais_if8() // e1d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_aips_if8() // e1d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_pais_if8() // e1e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_das_if8() // e1e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_dais_if8() // e1f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=3 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_adr16_if8() // e1f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::asl_adr32_if8() // e1f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_ais_if8() // e2d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_aips_if8() // e2d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_pais_if8() // e2e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_das_if8() // e2e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_dais_if8() // e2f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_adr16_if8() // e2f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsr_adr32_if8() // e2f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_ais_if8() // e3d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_aips_if8() // e3d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_pais_if8() // e3e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_das_if8() // e3e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_dais_if8() // e3f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_adr16_if8() // e3f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::lsl_adr32_if8() // e3f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_ais_if8() // e4d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_aips_if8() // e4d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_pais_if8() // e4e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_das_if8() // e4e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_dais_if8() // e4f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=8 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_adr16_if8() // e4f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxr_adr32_if8() // e4f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_ais_if8() // e5d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_aips_if8() // e5d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_pais_if8() // e5e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_das_if8() // e5e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_dais_if8() // e5f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_adr16_if8() // e5f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::roxl_adr32_if8() // e5f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_ais_if8() // e6d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_aips_if8() // e6d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_pais_if8() // e6e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_das_if8() // e6e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_dais_if8() // e6f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=10 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_adr16_if8() // e6f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::ror_adr32_if8() // e6f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_ais_if8() // e7d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_aips_if8() // e7d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_pais_if8() // e7e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_das_if8() // e7e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_dais_if8() // e7f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + // 1e3 aixl0 + // alu r=9 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_adr16_if8() // e7f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +void m68008_device::rol_adr32_if8() // e7f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +} + +const m68008_device::handler8 m68008_device::s_handlers_if8[] = { + &m68008_device::state_reset_if8, + &m68008_device::state_bus_error_if8, + &m68008_device::state_address_error_if8, + &m68008_device::state_double_fault_if8, + &m68008_device::state_interrupt_if8, + &m68008_device::state_trace_if8, + &m68008_device::state_illegal_if8, + &m68008_device::state_priviledge_if8, + &m68008_device::state_linea_if8, + &m68008_device::state_linef_if8, + &m68008_device::ori_b_imm8_ds_if8, + &m68008_device::ori_b_imm8_ais_if8, + &m68008_device::ori_b_imm8_aips_if8, + &m68008_device::ori_b_imm8_pais_if8, + &m68008_device::ori_b_imm8_das_if8, + &m68008_device::ori_b_imm8_dais_if8, + &m68008_device::ori_b_imm8_adr16_if8, + &m68008_device::ori_b_imm8_adr32_if8, + &m68008_device::ori_imm8_ccr_if8, + &m68008_device::ori_w_imm16_ds_if8, + &m68008_device::ori_w_imm16_ais_if8, + &m68008_device::ori_w_imm16_aips_if8, + &m68008_device::ori_w_imm16_pais_if8, + &m68008_device::ori_w_imm16_das_if8, + &m68008_device::ori_w_imm16_dais_if8, + &m68008_device::ori_w_imm16_adr16_if8, + &m68008_device::ori_w_imm16_adr32_if8, + &m68008_device::ori_i16u_sr_if8, + &m68008_device::ori_l_imm32_ds_if8, + &m68008_device::ori_l_imm32_ais_if8, + &m68008_device::ori_l_imm32_aips_if8, + &m68008_device::ori_l_imm32_pais_if8, + &m68008_device::ori_l_imm32_das_if8, + &m68008_device::ori_l_imm32_dais_if8, + &m68008_device::ori_l_imm32_adr16_if8, + &m68008_device::ori_l_imm32_adr32_if8, + &m68008_device::btst_dd_ds_if8, + &m68008_device::movep_w_das_dd_if8, + &m68008_device::btst_dd_ais_if8, + &m68008_device::btst_dd_aips_if8, + &m68008_device::btst_dd_pais_if8, + &m68008_device::btst_dd_das_if8, + &m68008_device::btst_dd_dais_if8, + &m68008_device::btst_dd_adr16_if8, + &m68008_device::btst_dd_adr32_if8, + &m68008_device::btst_dd_dpc_if8, + &m68008_device::btst_dd_dpci_if8, + &m68008_device::btst_dd_imm_if8, + &m68008_device::bchg_dd_ds_if8, + &m68008_device::movep_l_das_dd_if8, + &m68008_device::bchg_dd_ais_if8, + &m68008_device::bchg_dd_aips_if8, + &m68008_device::bchg_dd_pais_if8, + &m68008_device::bchg_dd_das_if8, + &m68008_device::bchg_dd_dais_if8, + &m68008_device::bchg_dd_adr16_if8, + &m68008_device::bchg_dd_adr32_if8, + &m68008_device::bclr_dd_ds_if8, + &m68008_device::movep_w_dd_das_if8, + &m68008_device::bclr_dd_ais_if8, + &m68008_device::bclr_dd_aips_if8, + &m68008_device::bclr_dd_pais_if8, + &m68008_device::bclr_dd_das_if8, + &m68008_device::bclr_dd_dais_if8, + &m68008_device::bclr_dd_adr16_if8, + &m68008_device::bclr_dd_adr32_if8, + &m68008_device::bset_dd_ds_if8, + &m68008_device::movep_l_dd_das_if8, + &m68008_device::bset_dd_ais_if8, + &m68008_device::bset_dd_aips_if8, + &m68008_device::bset_dd_pais_if8, + &m68008_device::bset_dd_das_if8, + &m68008_device::bset_dd_dais_if8, + &m68008_device::bset_dd_adr16_if8, + &m68008_device::bset_dd_adr32_if8, + &m68008_device::andi_b_imm8_ds_if8, + &m68008_device::andi_b_imm8_ais_if8, + &m68008_device::andi_b_imm8_aips_if8, + &m68008_device::andi_b_imm8_pais_if8, + &m68008_device::andi_b_imm8_das_if8, + &m68008_device::andi_b_imm8_dais_if8, + &m68008_device::andi_b_imm8_adr16_if8, + &m68008_device::andi_b_imm8_adr32_if8, + &m68008_device::andi_imm8_ccr_if8, + &m68008_device::andi_w_imm16_ds_if8, + &m68008_device::andi_w_imm16_ais_if8, + &m68008_device::andi_w_imm16_aips_if8, + &m68008_device::andi_w_imm16_pais_if8, + &m68008_device::andi_w_imm16_das_if8, + &m68008_device::andi_w_imm16_dais_if8, + &m68008_device::andi_w_imm16_adr16_if8, + &m68008_device::andi_w_imm16_adr32_if8, + &m68008_device::andi_i16u_sr_if8, + &m68008_device::andi_l_imm32_ds_if8, + &m68008_device::andi_l_imm32_ais_if8, + &m68008_device::andi_l_imm32_aips_if8, + &m68008_device::andi_l_imm32_pais_if8, + &m68008_device::andi_l_imm32_das_if8, + &m68008_device::andi_l_imm32_dais_if8, + &m68008_device::andi_l_imm32_adr16_if8, + &m68008_device::andi_l_imm32_adr32_if8, + &m68008_device::subi_b_imm8_ds_if8, + &m68008_device::subi_b_imm8_ais_if8, + &m68008_device::subi_b_imm8_aips_if8, + &m68008_device::subi_b_imm8_pais_if8, + &m68008_device::subi_b_imm8_das_if8, + &m68008_device::subi_b_imm8_dais_if8, + &m68008_device::subi_b_imm8_adr16_if8, + &m68008_device::subi_b_imm8_adr32_if8, + &m68008_device::subi_w_imm16_ds_if8, + &m68008_device::subi_w_imm16_ais_if8, + &m68008_device::subi_w_imm16_aips_if8, + &m68008_device::subi_w_imm16_pais_if8, + &m68008_device::subi_w_imm16_das_if8, + &m68008_device::subi_w_imm16_dais_if8, + &m68008_device::subi_w_imm16_adr16_if8, + &m68008_device::subi_w_imm16_adr32_if8, + &m68008_device::subi_l_imm32_ds_if8, + &m68008_device::subi_l_imm32_ais_if8, + &m68008_device::subi_l_imm32_aips_if8, + &m68008_device::subi_l_imm32_pais_if8, + &m68008_device::subi_l_imm32_das_if8, + &m68008_device::subi_l_imm32_dais_if8, + &m68008_device::subi_l_imm32_adr16_if8, + &m68008_device::subi_l_imm32_adr32_if8, + &m68008_device::addi_b_imm8_ds_if8, + &m68008_device::addi_b_imm8_ais_if8, + &m68008_device::addi_b_imm8_aips_if8, + &m68008_device::addi_b_imm8_pais_if8, + &m68008_device::addi_b_imm8_das_if8, + &m68008_device::addi_b_imm8_dais_if8, + &m68008_device::addi_b_imm8_adr16_if8, + &m68008_device::addi_b_imm8_adr32_if8, + &m68008_device::addi_w_imm16_ds_if8, + &m68008_device::addi_w_imm16_ais_if8, + &m68008_device::addi_w_imm16_aips_if8, + &m68008_device::addi_w_imm16_pais_if8, + &m68008_device::addi_w_imm16_das_if8, + &m68008_device::addi_w_imm16_dais_if8, + &m68008_device::addi_w_imm16_adr16_if8, + &m68008_device::addi_w_imm16_adr32_if8, + &m68008_device::addi_l_imm32_ds_if8, + &m68008_device::addi_l_imm32_ais_if8, + &m68008_device::addi_l_imm32_aips_if8, + &m68008_device::addi_l_imm32_pais_if8, + &m68008_device::addi_l_imm32_das_if8, + &m68008_device::addi_l_imm32_dais_if8, + &m68008_device::addi_l_imm32_adr16_if8, + &m68008_device::addi_l_imm32_adr32_if8, + &m68008_device::btst_imm8_ds_if8, + &m68008_device::btst_imm8_ais_if8, + &m68008_device::btst_imm8_aips_if8, + &m68008_device::btst_imm8_pais_if8, + &m68008_device::btst_imm8_das_if8, + &m68008_device::btst_imm8_dais_if8, + &m68008_device::btst_imm8_adr16_if8, + &m68008_device::btst_imm8_adr32_if8, + &m68008_device::btst_imm8_dpc_if8, + &m68008_device::btst_imm8_dpci_if8, + &m68008_device::bchg_imm8_ds_if8, + &m68008_device::bchg_imm8_ais_if8, + &m68008_device::bchg_imm8_aips_if8, + &m68008_device::bchg_imm8_pais_if8, + &m68008_device::bchg_imm8_das_if8, + &m68008_device::bchg_imm8_dais_if8, + &m68008_device::bchg_imm8_adr16_if8, + &m68008_device::bchg_imm8_adr32_if8, + &m68008_device::bclr_imm8_ds_if8, + &m68008_device::bclr_imm8_ais_if8, + &m68008_device::bclr_imm8_aips_if8, + &m68008_device::bclr_imm8_pais_if8, + &m68008_device::bclr_imm8_das_if8, + &m68008_device::bclr_imm8_dais_if8, + &m68008_device::bclr_imm8_adr16_if8, + &m68008_device::bclr_imm8_adr32_if8, + &m68008_device::bset_imm8_ds_if8, + &m68008_device::bset_imm8_ais_if8, + &m68008_device::bset_imm8_aips_if8, + &m68008_device::bset_imm8_pais_if8, + &m68008_device::bset_imm8_das_if8, + &m68008_device::bset_imm8_dais_if8, + &m68008_device::bset_imm8_adr16_if8, + &m68008_device::bset_imm8_adr32_if8, + &m68008_device::eori_b_imm8_ds_if8, + &m68008_device::eori_b_imm8_ais_if8, + &m68008_device::eori_b_imm8_aips_if8, + &m68008_device::eori_b_imm8_pais_if8, + &m68008_device::eori_b_imm8_das_if8, + &m68008_device::eori_b_imm8_dais_if8, + &m68008_device::eori_b_imm8_adr16_if8, + &m68008_device::eori_b_imm8_adr32_if8, + &m68008_device::eori_imm8_ccr_if8, + &m68008_device::eori_w_imm16_ds_if8, + &m68008_device::eori_w_imm16_ais_if8, + &m68008_device::eori_w_imm16_aips_if8, + &m68008_device::eori_w_imm16_pais_if8, + &m68008_device::eori_w_imm16_das_if8, + &m68008_device::eori_w_imm16_dais_if8, + &m68008_device::eori_w_imm16_adr16_if8, + &m68008_device::eori_w_imm16_adr32_if8, + &m68008_device::eori_i16u_sr_if8, + &m68008_device::eori_l_imm32_ds_if8, + &m68008_device::eori_l_imm32_ais_if8, + &m68008_device::eori_l_imm32_aips_if8, + &m68008_device::eori_l_imm32_pais_if8, + &m68008_device::eori_l_imm32_das_if8, + &m68008_device::eori_l_imm32_dais_if8, + &m68008_device::eori_l_imm32_adr16_if8, + &m68008_device::eori_l_imm32_adr32_if8, + &m68008_device::cmpi_b_imm8_ds_if8, + &m68008_device::cmpi_b_imm8_ais_if8, + &m68008_device::cmpi_b_imm8_aips_if8, + &m68008_device::cmpi_b_imm8_pais_if8, + &m68008_device::cmpi_b_imm8_das_if8, + &m68008_device::cmpi_b_imm8_dais_if8, + &m68008_device::cmpi_b_imm8_adr16_if8, + &m68008_device::cmpi_b_imm8_adr32_if8, + &m68008_device::cmpi_w_imm16_ds_if8, + &m68008_device::cmpi_w_imm16_ais_if8, + &m68008_device::cmpi_w_imm16_aips_if8, + &m68008_device::cmpi_w_imm16_pais_if8, + &m68008_device::cmpi_w_imm16_das_if8, + &m68008_device::cmpi_w_imm16_dais_if8, + &m68008_device::cmpi_w_imm16_adr16_if8, + &m68008_device::cmpi_w_imm16_adr32_if8, + &m68008_device::cmpi_l_imm32_ds_if8, + &m68008_device::cmpi_l_imm32_ais_if8, + &m68008_device::cmpi_l_imm32_aips_if8, + &m68008_device::cmpi_l_imm32_pais_if8, + &m68008_device::cmpi_l_imm32_das_if8, + &m68008_device::cmpi_l_imm32_dais_if8, + &m68008_device::cmpi_l_imm32_adr16_if8, + &m68008_device::cmpi_l_imm32_adr32_if8, + &m68008_device::move_b_ds_dd_if8, + &m68008_device::move_b_ais_dd_if8, + &m68008_device::move_b_aips_dd_if8, + &m68008_device::move_b_pais_dd_if8, + &m68008_device::move_b_das_dd_if8, + &m68008_device::move_b_dais_dd_if8, + &m68008_device::move_b_adr16_dd_if8, + &m68008_device::move_b_adr32_dd_if8, + &m68008_device::move_b_dpc_dd_if8, + &m68008_device::move_b_dpci_dd_if8, + &m68008_device::move_b_imm8_dd_if8, + &m68008_device::move_b_ds_aid_if8, + &m68008_device::move_b_ais_aid_if8, + &m68008_device::move_b_aips_aid_if8, + &m68008_device::move_b_pais_aid_if8, + &m68008_device::move_b_das_aid_if8, + &m68008_device::move_b_dais_aid_if8, + &m68008_device::move_b_adr16_aid_if8, + &m68008_device::move_b_adr32_aid_if8, + &m68008_device::move_b_dpc_aid_if8, + &m68008_device::move_b_dpci_aid_if8, + &m68008_device::move_b_imm8_aid_if8, + &m68008_device::move_b_ds_aipd_if8, + &m68008_device::move_b_ais_aipd_if8, + &m68008_device::move_b_aips_aipd_if8, + &m68008_device::move_b_pais_aipd_if8, + &m68008_device::move_b_das_aipd_if8, + &m68008_device::move_b_dais_aipd_if8, + &m68008_device::move_b_adr16_aipd_if8, + &m68008_device::move_b_adr32_aipd_if8, + &m68008_device::move_b_dpc_aipd_if8, + &m68008_device::move_b_dpci_aipd_if8, + &m68008_device::move_b_imm8_aipd_if8, + &m68008_device::move_b_ds_paid_if8, + &m68008_device::move_b_ais_paid_if8, + &m68008_device::move_b_aips_paid_if8, + &m68008_device::move_b_pais_paid_if8, + &m68008_device::move_b_das_paid_if8, + &m68008_device::move_b_dais_paid_if8, + &m68008_device::move_b_adr16_paid_if8, + &m68008_device::move_b_adr32_paid_if8, + &m68008_device::move_b_dpc_paid_if8, + &m68008_device::move_b_dpci_paid_if8, + &m68008_device::move_b_imm8_paid_if8, + &m68008_device::move_b_ds_dad_if8, + &m68008_device::move_b_ais_dad_if8, + &m68008_device::move_b_aips_dad_if8, + &m68008_device::move_b_pais_dad_if8, + &m68008_device::move_b_das_dad_if8, + &m68008_device::move_b_dais_dad_if8, + &m68008_device::move_b_adr16_dad_if8, + &m68008_device::move_b_adr32_dad_if8, + &m68008_device::move_b_dpc_dad_if8, + &m68008_device::move_b_dpci_dad_if8, + &m68008_device::move_b_imm8_dad_if8, + &m68008_device::move_b_ds_daid_if8, + &m68008_device::move_b_ais_daid_if8, + &m68008_device::move_b_aips_daid_if8, + &m68008_device::move_b_pais_daid_if8, + &m68008_device::move_b_das_daid_if8, + &m68008_device::move_b_dais_daid_if8, + &m68008_device::move_b_adr16_daid_if8, + &m68008_device::move_b_adr32_daid_if8, + &m68008_device::move_b_dpc_daid_if8, + &m68008_device::move_b_dpci_daid_if8, + &m68008_device::move_b_imm8_daid_if8, + &m68008_device::move_b_ds_adr16_if8, + &m68008_device::move_b_ais_adr16_if8, + &m68008_device::move_b_aips_adr16_if8, + &m68008_device::move_b_pais_adr16_if8, + &m68008_device::move_b_das_adr16_if8, + &m68008_device::move_b_dais_adr16_if8, + &m68008_device::move_b_adr16_adr16_if8, + &m68008_device::move_b_adr32_adr16_if8, + &m68008_device::move_b_dpc_adr16_if8, + &m68008_device::move_b_dpci_adr16_if8, + &m68008_device::move_b_imm8_adr16_if8, + &m68008_device::move_b_ds_adr32_if8, + &m68008_device::move_b_ais_adr32_if8, + &m68008_device::move_b_aips_adr32_if8, + &m68008_device::move_b_pais_adr32_if8, + &m68008_device::move_b_das_adr32_if8, + &m68008_device::move_b_dais_adr32_if8, + &m68008_device::move_b_adr16_adr32_if8, + &m68008_device::move_b_adr32_adr32_if8, + &m68008_device::move_b_dpc_adr32_if8, + &m68008_device::move_b_dpci_adr32_if8, + &m68008_device::move_b_imm8_adr32_if8, + &m68008_device::move_l_ds_dd_if8, + &m68008_device::move_l_as_dd_if8, + &m68008_device::move_l_ais_dd_if8, + &m68008_device::move_l_aips_dd_if8, + &m68008_device::move_l_pais_dd_if8, + &m68008_device::move_l_das_dd_if8, + &m68008_device::move_l_dais_dd_if8, + &m68008_device::move_l_adr16_dd_if8, + &m68008_device::move_l_adr32_dd_if8, + &m68008_device::move_l_dpc_dd_if8, + &m68008_device::move_l_dpci_dd_if8, + &m68008_device::move_l_imm32_dd_if8, + &m68008_device::movea_l_ds_ad_if8, + &m68008_device::movea_l_as_ad_if8, + &m68008_device::movea_l_ais_ad_if8, + &m68008_device::movea_l_aips_ad_if8, + &m68008_device::movea_l_pais_ad_if8, + &m68008_device::movea_l_das_ad_if8, + &m68008_device::movea_l_dais_ad_if8, + &m68008_device::movea_l_adr16_ad_if8, + &m68008_device::movea_l_adr32_ad_if8, + &m68008_device::movea_l_dpc_ad_if8, + &m68008_device::movea_l_dpci_ad_if8, + &m68008_device::movea_l_imm32_ad_if8, + &m68008_device::move_l_ds_aid_if8, + &m68008_device::move_l_as_aid_if8, + &m68008_device::move_l_ais_aid_if8, + &m68008_device::move_l_aips_aid_if8, + &m68008_device::move_l_pais_aid_if8, + &m68008_device::move_l_das_aid_if8, + &m68008_device::move_l_dais_aid_if8, + &m68008_device::move_l_adr16_aid_if8, + &m68008_device::move_l_adr32_aid_if8, + &m68008_device::move_l_dpc_aid_if8, + &m68008_device::move_l_dpci_aid_if8, + &m68008_device::move_l_imm32_aid_if8, + &m68008_device::move_l_ds_aipd_if8, + &m68008_device::move_l_as_aipd_if8, + &m68008_device::move_l_ais_aipd_if8, + &m68008_device::move_l_aips_aipd_if8, + &m68008_device::move_l_pais_aipd_if8, + &m68008_device::move_l_das_aipd_if8, + &m68008_device::move_l_dais_aipd_if8, + &m68008_device::move_l_adr16_aipd_if8, + &m68008_device::move_l_adr32_aipd_if8, + &m68008_device::move_l_dpc_aipd_if8, + &m68008_device::move_l_dpci_aipd_if8, + &m68008_device::move_l_imm32_aipd_if8, + &m68008_device::move_l_ds_paid_if8, + &m68008_device::move_l_as_paid_if8, + &m68008_device::move_l_ais_paid_if8, + &m68008_device::move_l_aips_paid_if8, + &m68008_device::move_l_pais_paid_if8, + &m68008_device::move_l_das_paid_if8, + &m68008_device::move_l_dais_paid_if8, + &m68008_device::move_l_adr16_paid_if8, + &m68008_device::move_l_adr32_paid_if8, + &m68008_device::move_l_dpc_paid_if8, + &m68008_device::move_l_dpci_paid_if8, + &m68008_device::move_l_imm32_paid_if8, + &m68008_device::move_l_ds_dad_if8, + &m68008_device::move_l_as_dad_if8, + &m68008_device::move_l_ais_dad_if8, + &m68008_device::move_l_aips_dad_if8, + &m68008_device::move_l_pais_dad_if8, + &m68008_device::move_l_das_dad_if8, + &m68008_device::move_l_dais_dad_if8, + &m68008_device::move_l_adr16_dad_if8, + &m68008_device::move_l_adr32_dad_if8, + &m68008_device::move_l_dpc_dad_if8, + &m68008_device::move_l_dpci_dad_if8, + &m68008_device::move_l_imm32_dad_if8, + &m68008_device::move_l_ds_daid_if8, + &m68008_device::move_l_as_daid_if8, + &m68008_device::move_l_ais_daid_if8, + &m68008_device::move_l_aips_daid_if8, + &m68008_device::move_l_pais_daid_if8, + &m68008_device::move_l_das_daid_if8, + &m68008_device::move_l_dais_daid_if8, + &m68008_device::move_l_adr16_daid_if8, + &m68008_device::move_l_adr32_daid_if8, + &m68008_device::move_l_dpc_daid_if8, + &m68008_device::move_l_dpci_daid_if8, + &m68008_device::move_l_imm32_daid_if8, + &m68008_device::move_l_ds_adr16_if8, + &m68008_device::move_l_as_adr16_if8, + &m68008_device::move_l_ais_adr16_if8, + &m68008_device::move_l_aips_adr16_if8, + &m68008_device::move_l_pais_adr16_if8, + &m68008_device::move_l_das_adr16_if8, + &m68008_device::move_l_dais_adr16_if8, + &m68008_device::move_l_adr16_adr16_if8, + &m68008_device::move_l_adr32_adr16_if8, + &m68008_device::move_l_dpc_adr16_if8, + &m68008_device::move_l_dpci_adr16_if8, + &m68008_device::move_l_imm32_adr16_if8, + &m68008_device::move_l_ds_adr32_if8, + &m68008_device::move_l_as_adr32_if8, + &m68008_device::move_l_ais_adr32_if8, + &m68008_device::move_l_aips_adr32_if8, + &m68008_device::move_l_pais_adr32_if8, + &m68008_device::move_l_das_adr32_if8, + &m68008_device::move_l_dais_adr32_if8, + &m68008_device::move_l_adr16_adr32_if8, + &m68008_device::move_l_adr32_adr32_if8, + &m68008_device::move_l_dpc_adr32_if8, + &m68008_device::move_l_dpci_adr32_if8, + &m68008_device::move_l_imm32_adr32_if8, + &m68008_device::move_w_ds_dd_if8, + &m68008_device::move_w_as_dd_if8, + &m68008_device::move_w_ais_dd_if8, + &m68008_device::move_w_aips_dd_if8, + &m68008_device::move_w_pais_dd_if8, + &m68008_device::move_w_das_dd_if8, + &m68008_device::move_w_dais_dd_if8, + &m68008_device::move_w_adr16_dd_if8, + &m68008_device::move_w_adr32_dd_if8, + &m68008_device::move_w_dpc_dd_if8, + &m68008_device::move_w_dpci_dd_if8, + &m68008_device::move_w_imm16_dd_if8, + &m68008_device::movea_w_ds_ad_if8, + &m68008_device::movea_w_as_ad_if8, + &m68008_device::movea_w_ais_ad_if8, + &m68008_device::movea_w_aips_ad_if8, + &m68008_device::movea_w_pais_ad_if8, + &m68008_device::movea_w_das_ad_if8, + &m68008_device::movea_w_dais_ad_if8, + &m68008_device::movea_w_adr16_ad_if8, + &m68008_device::movea_w_adr32_ad_if8, + &m68008_device::movea_w_dpc_ad_if8, + &m68008_device::movea_w_dpci_ad_if8, + &m68008_device::movea_w_imm16_ad_if8, + &m68008_device::move_w_ds_aid_if8, + &m68008_device::move_w_as_aid_if8, + &m68008_device::move_w_ais_aid_if8, + &m68008_device::move_w_aips_aid_if8, + &m68008_device::move_w_pais_aid_if8, + &m68008_device::move_w_das_aid_if8, + &m68008_device::move_w_dais_aid_if8, + &m68008_device::move_w_adr16_aid_if8, + &m68008_device::move_w_adr32_aid_if8, + &m68008_device::move_w_dpc_aid_if8, + &m68008_device::move_w_dpci_aid_if8, + &m68008_device::move_w_imm16_aid_if8, + &m68008_device::move_w_ds_aipd_if8, + &m68008_device::move_w_as_aipd_if8, + &m68008_device::move_w_ais_aipd_if8, + &m68008_device::move_w_aips_aipd_if8, + &m68008_device::move_w_pais_aipd_if8, + &m68008_device::move_w_das_aipd_if8, + &m68008_device::move_w_dais_aipd_if8, + &m68008_device::move_w_adr16_aipd_if8, + &m68008_device::move_w_adr32_aipd_if8, + &m68008_device::move_w_dpc_aipd_if8, + &m68008_device::move_w_dpci_aipd_if8, + &m68008_device::move_w_imm16_aipd_if8, + &m68008_device::move_w_ds_paid_if8, + &m68008_device::move_w_as_paid_if8, + &m68008_device::move_w_ais_paid_if8, + &m68008_device::move_w_aips_paid_if8, + &m68008_device::move_w_pais_paid_if8, + &m68008_device::move_w_das_paid_if8, + &m68008_device::move_w_dais_paid_if8, + &m68008_device::move_w_adr16_paid_if8, + &m68008_device::move_w_adr32_paid_if8, + &m68008_device::move_w_dpc_paid_if8, + &m68008_device::move_w_dpci_paid_if8, + &m68008_device::move_w_imm16_paid_if8, + &m68008_device::move_w_ds_dad_if8, + &m68008_device::move_w_as_dad_if8, + &m68008_device::move_w_ais_dad_if8, + &m68008_device::move_w_aips_dad_if8, + &m68008_device::move_w_pais_dad_if8, + &m68008_device::move_w_das_dad_if8, + &m68008_device::move_w_dais_dad_if8, + &m68008_device::move_w_adr16_dad_if8, + &m68008_device::move_w_adr32_dad_if8, + &m68008_device::move_w_dpc_dad_if8, + &m68008_device::move_w_dpci_dad_if8, + &m68008_device::move_w_imm16_dad_if8, + &m68008_device::move_w_ds_daid_if8, + &m68008_device::move_w_as_daid_if8, + &m68008_device::move_w_ais_daid_if8, + &m68008_device::move_w_aips_daid_if8, + &m68008_device::move_w_pais_daid_if8, + &m68008_device::move_w_das_daid_if8, + &m68008_device::move_w_dais_daid_if8, + &m68008_device::move_w_adr16_daid_if8, + &m68008_device::move_w_adr32_daid_if8, + &m68008_device::move_w_dpc_daid_if8, + &m68008_device::move_w_dpci_daid_if8, + &m68008_device::move_w_imm16_daid_if8, + &m68008_device::move_w_ds_adr16_if8, + &m68008_device::move_w_as_adr16_if8, + &m68008_device::move_w_ais_adr16_if8, + &m68008_device::move_w_aips_adr16_if8, + &m68008_device::move_w_pais_adr16_if8, + &m68008_device::move_w_das_adr16_if8, + &m68008_device::move_w_dais_adr16_if8, + &m68008_device::move_w_adr16_adr16_if8, + &m68008_device::move_w_adr32_adr16_if8, + &m68008_device::move_w_dpc_adr16_if8, + &m68008_device::move_w_dpci_adr16_if8, + &m68008_device::move_w_imm16_adr16_if8, + &m68008_device::move_w_ds_adr32_if8, + &m68008_device::move_w_as_adr32_if8, + &m68008_device::move_w_ais_adr32_if8, + &m68008_device::move_w_aips_adr32_if8, + &m68008_device::move_w_pais_adr32_if8, + &m68008_device::move_w_das_adr32_if8, + &m68008_device::move_w_dais_adr32_if8, + &m68008_device::move_w_adr16_adr32_if8, + &m68008_device::move_w_adr32_adr32_if8, + &m68008_device::move_w_dpc_adr32_if8, + &m68008_device::move_w_dpci_adr32_if8, + &m68008_device::move_w_imm16_adr32_if8, + &m68008_device::negx_b_ds_if8, + &m68008_device::negx_b_ais_if8, + &m68008_device::negx_b_aips_if8, + &m68008_device::negx_b_pais_if8, + &m68008_device::negx_b_das_if8, + &m68008_device::negx_b_dais_if8, + &m68008_device::negx_b_adr16_if8, + &m68008_device::negx_b_adr32_if8, + &m68008_device::negx_w_ds_if8, + &m68008_device::negx_w_ais_if8, + &m68008_device::negx_w_aips_if8, + &m68008_device::negx_w_pais_if8, + &m68008_device::negx_w_das_if8, + &m68008_device::negx_w_dais_if8, + &m68008_device::negx_w_adr16_if8, + &m68008_device::negx_w_adr32_if8, + &m68008_device::negx_l_ds_if8, + &m68008_device::negx_l_ais_if8, + &m68008_device::negx_l_aips_if8, + &m68008_device::negx_l_pais_if8, + &m68008_device::negx_l_das_if8, + &m68008_device::negx_l_dais_if8, + &m68008_device::negx_l_adr16_if8, + &m68008_device::negx_l_adr32_if8, + &m68008_device::move_sr_ds_if8, + &m68008_device::move_sr_ais_if8, + &m68008_device::move_sr_aips_if8, + &m68008_device::move_sr_pais_if8, + &m68008_device::move_sr_das_if8, + &m68008_device::move_sr_dais_if8, + &m68008_device::move_sr_adr16_if8, + &m68008_device::move_sr_adr32_if8, + &m68008_device::chk_w_ds_dd_if8, + &m68008_device::chk_w_ais_dd_if8, + &m68008_device::chk_w_aips_dd_if8, + &m68008_device::chk_w_pais_dd_if8, + &m68008_device::chk_w_das_dd_if8, + &m68008_device::chk_w_dais_dd_if8, + &m68008_device::chk_w_adr16_dd_if8, + &m68008_device::chk_w_adr32_dd_if8, + &m68008_device::chk_w_dpc_dd_if8, + &m68008_device::chk_w_dpci_dd_if8, + &m68008_device::chk_w_imm16_dd_if8, + &m68008_device::lea_ais_ad_if8, + &m68008_device::lea_das_ad_if8, + &m68008_device::lea_dais_ad_if8, + &m68008_device::lea_adr16_ad_if8, + &m68008_device::lea_adr32_ad_if8, + &m68008_device::lea_dpc_ad_if8, + &m68008_device::lea_dpci_ad_if8, + &m68008_device::clr_b_ds_if8, + &m68008_device::clr_b_ais_if8, + &m68008_device::clr_b_aips_if8, + &m68008_device::clr_b_pais_if8, + &m68008_device::clr_b_das_if8, + &m68008_device::clr_b_dais_if8, + &m68008_device::clr_b_adr16_if8, + &m68008_device::clr_b_adr32_if8, + &m68008_device::clr_w_ds_if8, + &m68008_device::clr_w_ais_if8, + &m68008_device::clr_w_aips_if8, + &m68008_device::clr_w_pais_if8, + &m68008_device::clr_w_das_if8, + &m68008_device::clr_w_dais_if8, + &m68008_device::clr_w_adr16_if8, + &m68008_device::clr_w_adr32_if8, + &m68008_device::clr_l_ds_if8, + &m68008_device::clr_l_ais_if8, + &m68008_device::clr_l_aips_if8, + &m68008_device::clr_l_pais_if8, + &m68008_device::clr_l_das_if8, + &m68008_device::clr_l_dais_if8, + &m68008_device::clr_l_adr16_if8, + &m68008_device::clr_l_adr32_if8, + &m68008_device::neg_b_ds_if8, + &m68008_device::neg_b_ais_if8, + &m68008_device::neg_b_aips_if8, + &m68008_device::neg_b_pais_if8, + &m68008_device::neg_b_das_if8, + &m68008_device::neg_b_dais_if8, + &m68008_device::neg_b_adr16_if8, + &m68008_device::neg_b_adr32_if8, + &m68008_device::neg_w_ds_if8, + &m68008_device::neg_w_ais_if8, + &m68008_device::neg_w_aips_if8, + &m68008_device::neg_w_pais_if8, + &m68008_device::neg_w_das_if8, + &m68008_device::neg_w_dais_if8, + &m68008_device::neg_w_adr16_if8, + &m68008_device::neg_w_adr32_if8, + &m68008_device::neg_l_ds_if8, + &m68008_device::neg_l_ais_if8, + &m68008_device::neg_l_aips_if8, + &m68008_device::neg_l_pais_if8, + &m68008_device::neg_l_das_if8, + &m68008_device::neg_l_dais_if8, + &m68008_device::neg_l_adr16_if8, + &m68008_device::neg_l_adr32_if8, + &m68008_device::move_ds_ccr_if8, + &m68008_device::move_ais_ccr_if8, + &m68008_device::move_aips_ccr_if8, + &m68008_device::move_pais_ccr_if8, + &m68008_device::move_das_ccr_if8, + &m68008_device::move_dais_ccr_if8, + &m68008_device::move_adr16_ccr_if8, + &m68008_device::move_adr32_ccr_if8, + &m68008_device::move_dpc_ccr_if8, + &m68008_device::move_dpci_ccr_if8, + &m68008_device::move_imm8_ccr_if8, + &m68008_device::not_b_ds_if8, + &m68008_device::not_b_ais_if8, + &m68008_device::not_b_aips_if8, + &m68008_device::not_b_pais_if8, + &m68008_device::not_b_das_if8, + &m68008_device::not_b_dais_if8, + &m68008_device::not_b_adr16_if8, + &m68008_device::not_b_adr32_if8, + &m68008_device::not_w_ds_if8, + &m68008_device::not_w_ais_if8, + &m68008_device::not_w_aips_if8, + &m68008_device::not_w_pais_if8, + &m68008_device::not_w_das_if8, + &m68008_device::not_w_dais_if8, + &m68008_device::not_w_adr16_if8, + &m68008_device::not_w_adr32_if8, + &m68008_device::not_l_ds_if8, + &m68008_device::not_l_ais_if8, + &m68008_device::not_l_aips_if8, + &m68008_device::not_l_pais_if8, + &m68008_device::not_l_das_if8, + &m68008_device::not_l_dais_if8, + &m68008_device::not_l_adr16_if8, + &m68008_device::not_l_adr32_if8, + &m68008_device::move_ds_sr_if8, + &m68008_device::move_ais_sr_if8, + &m68008_device::move_aips_sr_if8, + &m68008_device::move_pais_sr_if8, + &m68008_device::move_das_sr_if8, + &m68008_device::move_dais_sr_if8, + &m68008_device::move_adr16_sr_if8, + &m68008_device::move_adr32_sr_if8, + &m68008_device::move_dpc_sr_if8, + &m68008_device::move_dpci_sr_if8, + &m68008_device::move_i16u_sr_if8, + &m68008_device::nbcd_b_ds_if8, + &m68008_device::nbcd_b_ais_if8, + &m68008_device::nbcd_b_aips_if8, + &m68008_device::nbcd_b_pais_if8, + &m68008_device::nbcd_b_das_if8, + &m68008_device::nbcd_b_dais_if8, + &m68008_device::nbcd_b_adr16_if8, + &m68008_device::nbcd_b_adr32_if8, + &m68008_device::swap_ds_if8, + &m68008_device::pea_ais_if8, + &m68008_device::pea_das_if8, + &m68008_device::pea_dais_if8, + &m68008_device::pea_adr16_if8, + &m68008_device::pea_adr32_if8, + &m68008_device::pea_dpc_if8, + &m68008_device::pea_dpci_if8, + &m68008_device::ext_w_ds_if8, + &m68008_device::movem_w_list_ais_if8, + &m68008_device::movem_w_listp_pais_if8, + &m68008_device::movem_w_list_das_if8, + &m68008_device::movem_w_list_dais_if8, + &m68008_device::movem_w_list_adr16_if8, + &m68008_device::movem_w_list_adr32_if8, + &m68008_device::ext_l_ds_if8, + &m68008_device::movem_l_list_ais_if8, + &m68008_device::movem_l_listp_pais_if8, + &m68008_device::movem_l_list_das_if8, + &m68008_device::movem_l_list_dais_if8, + &m68008_device::movem_l_list_adr16_if8, + &m68008_device::movem_l_list_adr32_if8, + &m68008_device::tst_b_ds_if8, + &m68008_device::tst_b_ais_if8, + &m68008_device::tst_b_aips_if8, + &m68008_device::tst_b_pais_if8, + &m68008_device::tst_b_das_if8, + &m68008_device::tst_b_dais_if8, + &m68008_device::tst_b_adr16_if8, + &m68008_device::tst_b_adr32_if8, + &m68008_device::tst_w_ds_if8, + &m68008_device::tst_w_ais_if8, + &m68008_device::tst_w_aips_if8, + &m68008_device::tst_w_pais_if8, + &m68008_device::tst_w_das_if8, + &m68008_device::tst_w_dais_if8, + &m68008_device::tst_w_adr16_if8, + &m68008_device::tst_w_adr32_if8, + &m68008_device::tst_l_ds_if8, + &m68008_device::tst_l_ais_if8, + &m68008_device::tst_l_aips_if8, + &m68008_device::tst_l_pais_if8, + &m68008_device::tst_l_das_if8, + &m68008_device::tst_l_dais_if8, + &m68008_device::tst_l_adr16_if8, + &m68008_device::tst_l_adr32_if8, + &m68008_device::tas_ds_if8, + &m68008_device::tas_ais_if8, + &m68008_device::tas_aips_if8, + &m68008_device::tas_pais_if8, + &m68008_device::tas_das_if8, + &m68008_device::tas_dais_if8, + &m68008_device::tas_adr16_if8, + &m68008_device::tas_adr32_if8, + &m68008_device::movem_w_ais_list_if8, + &m68008_device::movem_w_aips_list_if8, + &m68008_device::movem_w_das_list_if8, + &m68008_device::movem_w_dais_list_if8, + &m68008_device::movem_w_adr16_list_if8, + &m68008_device::movem_w_adr32_list_if8, + &m68008_device::movem_w_dpc_list_if8, + &m68008_device::movem_w_dpci_list_if8, + &m68008_device::movem_l_ais_list_if8, + &m68008_device::movem_l_aips_list_if8, + &m68008_device::movem_l_das_list_if8, + &m68008_device::movem_l_dais_list_if8, + &m68008_device::movem_l_adr16_list_if8, + &m68008_device::movem_l_adr32_list_if8, + &m68008_device::movem_l_dpc_list_if8, + &m68008_device::movem_l_dpci_list_if8, + &m68008_device::trap_imm4_if8, + &m68008_device::link_as_imm16_if8, + &m68008_device::unlk_as_if8, + &m68008_device::move_as_usp_if8, + &m68008_device::move_usp_as_if8, + &m68008_device::reset_if8, + &m68008_device::nop_if8, + &m68008_device::stop_i16u_if8, + &m68008_device::rte_if8, + &m68008_device::rts_if8, + &m68008_device::trapv_if8, + &m68008_device::rtr_if8, + &m68008_device::jsr_ais_if8, + &m68008_device::jsr_das_if8, + &m68008_device::jsr_dais_if8, + &m68008_device::jsr_adr16_if8, + &m68008_device::jsr_adr32_if8, + &m68008_device::jsr_dpc_if8, + &m68008_device::jsr_dpci_if8, + &m68008_device::jmp_ais_if8, + &m68008_device::jmp_das_if8, + &m68008_device::jmp_dais_if8, + &m68008_device::jmp_adr16_if8, + &m68008_device::jmp_adr32_if8, + &m68008_device::jmp_dpc_if8, + &m68008_device::jmp_dpci_if8, + &m68008_device::addq_b_imm3_ds_if8, + &m68008_device::addq_b_imm3_ais_if8, + &m68008_device::addq_b_imm3_aips_if8, + &m68008_device::addq_b_imm3_pais_if8, + &m68008_device::addq_b_imm3_das_if8, + &m68008_device::addq_b_imm3_dais_if8, + &m68008_device::addq_b_imm3_adr16_if8, + &m68008_device::addq_b_imm3_adr32_if8, + &m68008_device::addq_w_imm3_ds_if8, + &m68008_device::addq_w_imm3_as_if8, + &m68008_device::addq_w_imm3_ais_if8, + &m68008_device::addq_w_imm3_aips_if8, + &m68008_device::addq_w_imm3_pais_if8, + &m68008_device::addq_w_imm3_das_if8, + &m68008_device::addq_w_imm3_dais_if8, + &m68008_device::addq_w_imm3_adr16_if8, + &m68008_device::addq_w_imm3_adr32_if8, + &m68008_device::addq_l_imm3_ds_if8, + &m68008_device::addq_l_imm3_as_if8, + &m68008_device::addq_l_imm3_ais_if8, + &m68008_device::addq_l_imm3_aips_if8, + &m68008_device::addq_l_imm3_pais_if8, + &m68008_device::addq_l_imm3_das_if8, + &m68008_device::addq_l_imm3_dais_if8, + &m68008_device::addq_l_imm3_adr16_if8, + &m68008_device::addq_l_imm3_adr32_if8, + &m68008_device::st_ds_if8, + &m68008_device::dbt_ds_rel16_if8, + &m68008_device::st_ais_if8, + &m68008_device::st_aips_if8, + &m68008_device::st_pais_if8, + &m68008_device::st_das_if8, + &m68008_device::st_dais_if8, + &m68008_device::st_adr16_if8, + &m68008_device::st_adr32_if8, + &m68008_device::subq_b_imm3_ds_if8, + &m68008_device::subq_b_imm3_ais_if8, + &m68008_device::subq_b_imm3_aips_if8, + &m68008_device::subq_b_imm3_pais_if8, + &m68008_device::subq_b_imm3_das_if8, + &m68008_device::subq_b_imm3_dais_if8, + &m68008_device::subq_b_imm3_adr16_if8, + &m68008_device::subq_b_imm3_adr32_if8, + &m68008_device::subq_w_imm3_ds_if8, + &m68008_device::subq_w_imm3_as_if8, + &m68008_device::subq_w_imm3_ais_if8, + &m68008_device::subq_w_imm3_aips_if8, + &m68008_device::subq_w_imm3_pais_if8, + &m68008_device::subq_w_imm3_das_if8, + &m68008_device::subq_w_imm3_dais_if8, + &m68008_device::subq_w_imm3_adr16_if8, + &m68008_device::subq_w_imm3_adr32_if8, + &m68008_device::subq_l_imm3_ds_if8, + &m68008_device::subq_l_imm3_as_if8, + &m68008_device::subq_l_imm3_ais_if8, + &m68008_device::subq_l_imm3_aips_if8, + &m68008_device::subq_l_imm3_pais_if8, + &m68008_device::subq_l_imm3_das_if8, + &m68008_device::subq_l_imm3_dais_if8, + &m68008_device::subq_l_imm3_adr16_if8, + &m68008_device::subq_l_imm3_adr32_if8, + &m68008_device::sf_ds_if8, + &m68008_device::dbra_ds_rel16_if8, + &m68008_device::sf_ais_if8, + &m68008_device::sf_aips_if8, + &m68008_device::sf_pais_if8, + &m68008_device::sf_das_if8, + &m68008_device::sf_dais_if8, + &m68008_device::sf_adr16_if8, + &m68008_device::sf_adr32_if8, + &m68008_device::shi_ds_if8, + &m68008_device::dbhi_ds_rel16_if8, + &m68008_device::shi_ais_if8, + &m68008_device::shi_aips_if8, + &m68008_device::shi_pais_if8, + &m68008_device::shi_das_if8, + &m68008_device::shi_dais_if8, + &m68008_device::shi_adr16_if8, + &m68008_device::shi_adr32_if8, + &m68008_device::sls_ds_if8, + &m68008_device::dbls_ds_rel16_if8, + &m68008_device::sls_ais_if8, + &m68008_device::sls_aips_if8, + &m68008_device::sls_pais_if8, + &m68008_device::sls_das_if8, + &m68008_device::sls_dais_if8, + &m68008_device::sls_adr16_if8, + &m68008_device::sls_adr32_if8, + &m68008_device::scc_ds_if8, + &m68008_device::dbcc_ds_rel16_if8, + &m68008_device::scc_ais_if8, + &m68008_device::scc_aips_if8, + &m68008_device::scc_pais_if8, + &m68008_device::scc_das_if8, + &m68008_device::scc_dais_if8, + &m68008_device::scc_adr16_if8, + &m68008_device::scc_adr32_if8, + &m68008_device::scs_ds_if8, + &m68008_device::dbcs_ds_rel16_if8, + &m68008_device::scs_ais_if8, + &m68008_device::scs_aips_if8, + &m68008_device::scs_pais_if8, + &m68008_device::scs_das_if8, + &m68008_device::scs_dais_if8, + &m68008_device::scs_adr16_if8, + &m68008_device::scs_adr32_if8, + &m68008_device::sne_ds_if8, + &m68008_device::dbne_ds_rel16_if8, + &m68008_device::sne_ais_if8, + &m68008_device::sne_aips_if8, + &m68008_device::sne_pais_if8, + &m68008_device::sne_das_if8, + &m68008_device::sne_dais_if8, + &m68008_device::sne_adr16_if8, + &m68008_device::sne_adr32_if8, + &m68008_device::seq_ds_if8, + &m68008_device::dbeq_ds_rel16_if8, + &m68008_device::seq_ais_if8, + &m68008_device::seq_aips_if8, + &m68008_device::seq_pais_if8, + &m68008_device::seq_das_if8, + &m68008_device::seq_dais_if8, + &m68008_device::seq_adr16_if8, + &m68008_device::seq_adr32_if8, + &m68008_device::svc_ds_if8, + &m68008_device::dbvc_ds_rel16_if8, + &m68008_device::svc_ais_if8, + &m68008_device::svc_aips_if8, + &m68008_device::svc_pais_if8, + &m68008_device::svc_das_if8, + &m68008_device::svc_dais_if8, + &m68008_device::svc_adr16_if8, + &m68008_device::svc_adr32_if8, + &m68008_device::svs_ds_if8, + &m68008_device::dbvs_ds_rel16_if8, + &m68008_device::svs_ais_if8, + &m68008_device::svs_aips_if8, + &m68008_device::svs_pais_if8, + &m68008_device::svs_das_if8, + &m68008_device::svs_dais_if8, + &m68008_device::svs_adr16_if8, + &m68008_device::svs_adr32_if8, + &m68008_device::spl_ds_if8, + &m68008_device::dbpl_ds_rel16_if8, + &m68008_device::spl_ais_if8, + &m68008_device::spl_aips_if8, + &m68008_device::spl_pais_if8, + &m68008_device::spl_das_if8, + &m68008_device::spl_dais_if8, + &m68008_device::spl_adr16_if8, + &m68008_device::spl_adr32_if8, + &m68008_device::smi_ds_if8, + &m68008_device::dbmi_ds_rel16_if8, + &m68008_device::smi_ais_if8, + &m68008_device::smi_aips_if8, + &m68008_device::smi_pais_if8, + &m68008_device::smi_das_if8, + &m68008_device::smi_dais_if8, + &m68008_device::smi_adr16_if8, + &m68008_device::smi_adr32_if8, + &m68008_device::sge_ds_if8, + &m68008_device::dbge_ds_rel16_if8, + &m68008_device::sge_ais_if8, + &m68008_device::sge_aips_if8, + &m68008_device::sge_pais_if8, + &m68008_device::sge_das_if8, + &m68008_device::sge_dais_if8, + &m68008_device::sge_adr16_if8, + &m68008_device::sge_adr32_if8, + &m68008_device::slt_ds_if8, + &m68008_device::dblt_ds_rel16_if8, + &m68008_device::slt_ais_if8, + &m68008_device::slt_aips_if8, + &m68008_device::slt_pais_if8, + &m68008_device::slt_das_if8, + &m68008_device::slt_dais_if8, + &m68008_device::slt_adr16_if8, + &m68008_device::slt_adr32_if8, + &m68008_device::sgt_ds_if8, + &m68008_device::dbgt_ds_rel16_if8, + &m68008_device::sgt_ais_if8, + &m68008_device::sgt_aips_if8, + &m68008_device::sgt_pais_if8, + &m68008_device::sgt_das_if8, + &m68008_device::sgt_dais_if8, + &m68008_device::sgt_adr16_if8, + &m68008_device::sgt_adr32_if8, + &m68008_device::sle_ds_if8, + &m68008_device::dble_ds_rel16_if8, + &m68008_device::sle_ais_if8, + &m68008_device::sle_aips_if8, + &m68008_device::sle_pais_if8, + &m68008_device::sle_das_if8, + &m68008_device::sle_dais_if8, + &m68008_device::sle_adr16_if8, + &m68008_device::sle_adr32_if8, + &m68008_device::bra_rel16_if8, + &m68008_device::bra_rel8_if8, + &m68008_device::bsr_rel16_if8, + &m68008_device::bsr_rel8_if8, + &m68008_device::bhi_rel16_if8, + &m68008_device::bhi_rel8_if8, + &m68008_device::bls_rel16_if8, + &m68008_device::bls_rel8_if8, + &m68008_device::bcc_rel16_if8, + &m68008_device::bcc_rel8_if8, + &m68008_device::bcs_rel16_if8, + &m68008_device::bcs_rel8_if8, + &m68008_device::bne_rel16_if8, + &m68008_device::bne_rel8_if8, + &m68008_device::beq_rel16_if8, + &m68008_device::beq_rel8_if8, + &m68008_device::bvc_rel16_if8, + &m68008_device::bvc_rel8_if8, + &m68008_device::bvs_rel16_if8, + &m68008_device::bvs_rel8_if8, + &m68008_device::bpl_rel16_if8, + &m68008_device::bpl_rel8_if8, + &m68008_device::bmi_rel16_if8, + &m68008_device::bmi_rel8_if8, + &m68008_device::bge_rel16_if8, + &m68008_device::bge_rel8_if8, + &m68008_device::blt_rel16_if8, + &m68008_device::blt_rel8_if8, + &m68008_device::bgt_rel16_if8, + &m68008_device::bgt_rel8_if8, + &m68008_device::ble_rel16_if8, + &m68008_device::ble_rel8_if8, + &m68008_device::moveq_imm8o_dd_if8, + &m68008_device::or_b_ds_dd_if8, + &m68008_device::or_b_ais_dd_if8, + &m68008_device::or_b_aips_dd_if8, + &m68008_device::or_b_pais_dd_if8, + &m68008_device::or_b_das_dd_if8, + &m68008_device::or_b_dais_dd_if8, + &m68008_device::or_b_adr16_dd_if8, + &m68008_device::or_b_adr32_dd_if8, + &m68008_device::or_b_dpc_dd_if8, + &m68008_device::or_b_dpci_dd_if8, + &m68008_device::or_b_imm8_dd_if8, + &m68008_device::or_w_ds_dd_if8, + &m68008_device::or_w_ais_dd_if8, + &m68008_device::or_w_aips_dd_if8, + &m68008_device::or_w_pais_dd_if8, + &m68008_device::or_w_das_dd_if8, + &m68008_device::or_w_dais_dd_if8, + &m68008_device::or_w_adr16_dd_if8, + &m68008_device::or_w_adr32_dd_if8, + &m68008_device::or_w_dpc_dd_if8, + &m68008_device::or_w_dpci_dd_if8, + &m68008_device::or_w_imm16_dd_if8, + &m68008_device::or_l_ds_dd_if8, + &m68008_device::or_l_ais_dd_if8, + &m68008_device::or_l_aips_dd_if8, + &m68008_device::or_l_pais_dd_if8, + &m68008_device::or_l_das_dd_if8, + &m68008_device::or_l_dais_dd_if8, + &m68008_device::or_l_adr16_dd_if8, + &m68008_device::or_l_adr32_dd_if8, + &m68008_device::or_l_dpc_dd_if8, + &m68008_device::or_l_dpci_dd_if8, + &m68008_device::or_l_imm32_dd_if8, + &m68008_device::divu_w_ds_dd_if8, + &m68008_device::divu_w_ais_dd_if8, + &m68008_device::divu_w_aips_dd_if8, + &m68008_device::divu_w_pais_dd_if8, + &m68008_device::divu_w_das_dd_if8, + &m68008_device::divu_w_dais_dd_if8, + &m68008_device::divu_w_adr16_dd_if8, + &m68008_device::divu_w_adr32_dd_if8, + &m68008_device::divu_w_dpc_dd_if8, + &m68008_device::divu_w_dpci_dd_if8, + &m68008_device::divu_w_imm16_dd_if8, + &m68008_device::sbcd_ds_dd_if8, + &m68008_device::sbcd_pais_paid_if8, + &m68008_device::or_b_dd_ais_if8, + &m68008_device::or_b_dd_aips_if8, + &m68008_device::or_b_dd_pais_if8, + &m68008_device::or_b_dd_das_if8, + &m68008_device::or_b_dd_dais_if8, + &m68008_device::or_b_dd_adr16_if8, + &m68008_device::or_b_dd_adr32_if8, + &m68008_device::or_w_dd_ais_if8, + &m68008_device::or_w_dd_aips_if8, + &m68008_device::or_w_dd_pais_if8, + &m68008_device::or_w_dd_das_if8, + &m68008_device::or_w_dd_dais_if8, + &m68008_device::or_w_dd_adr16_if8, + &m68008_device::or_w_dd_adr32_if8, + &m68008_device::or_l_dd_ais_if8, + &m68008_device::or_l_dd_aips_if8, + &m68008_device::or_l_dd_pais_if8, + &m68008_device::or_l_dd_das_if8, + &m68008_device::or_l_dd_dais_if8, + &m68008_device::or_l_dd_adr16_if8, + &m68008_device::or_l_dd_adr32_if8, + &m68008_device::divs_w_ds_dd_if8, + &m68008_device::divs_w_ais_dd_if8, + &m68008_device::divs_w_aips_dd_if8, + &m68008_device::divs_w_pais_dd_if8, + &m68008_device::divs_w_das_dd_if8, + &m68008_device::divs_w_dais_dd_if8, + &m68008_device::divs_w_adr16_dd_if8, + &m68008_device::divs_w_adr32_dd_if8, + &m68008_device::divs_w_dpc_dd_if8, + &m68008_device::divs_w_dpci_dd_if8, + &m68008_device::divs_w_imm16_dd_if8, + &m68008_device::sub_b_ds_dd_if8, + &m68008_device::sub_b_ais_dd_if8, + &m68008_device::sub_b_aips_dd_if8, + &m68008_device::sub_b_pais_dd_if8, + &m68008_device::sub_b_das_dd_if8, + &m68008_device::sub_b_dais_dd_if8, + &m68008_device::sub_b_adr16_dd_if8, + &m68008_device::sub_b_adr32_dd_if8, + &m68008_device::sub_b_dpc_dd_if8, + &m68008_device::sub_b_dpci_dd_if8, + &m68008_device::sub_b_imm8_dd_if8, + &m68008_device::sub_w_ds_dd_if8, + &m68008_device::sub_w_as_dd_if8, + &m68008_device::sub_w_ais_dd_if8, + &m68008_device::sub_w_aips_dd_if8, + &m68008_device::sub_w_pais_dd_if8, + &m68008_device::sub_w_das_dd_if8, + &m68008_device::sub_w_dais_dd_if8, + &m68008_device::sub_w_adr16_dd_if8, + &m68008_device::sub_w_adr32_dd_if8, + &m68008_device::sub_w_dpc_dd_if8, + &m68008_device::sub_w_dpci_dd_if8, + &m68008_device::sub_w_imm16_dd_if8, + &m68008_device::sub_l_ds_dd_if8, + &m68008_device::sub_l_as_dd_if8, + &m68008_device::sub_l_ais_dd_if8, + &m68008_device::sub_l_aips_dd_if8, + &m68008_device::sub_l_pais_dd_if8, + &m68008_device::sub_l_das_dd_if8, + &m68008_device::sub_l_dais_dd_if8, + &m68008_device::sub_l_adr16_dd_if8, + &m68008_device::sub_l_adr32_dd_if8, + &m68008_device::sub_l_dpc_dd_if8, + &m68008_device::sub_l_dpci_dd_if8, + &m68008_device::sub_l_imm32_dd_if8, + &m68008_device::suba_w_ds_ad_if8, + &m68008_device::suba_w_as_ad_if8, + &m68008_device::suba_w_ais_ad_if8, + &m68008_device::suba_w_aips_ad_if8, + &m68008_device::suba_w_pais_ad_if8, + &m68008_device::suba_w_das_ad_if8, + &m68008_device::suba_w_dais_ad_if8, + &m68008_device::suba_w_adr16_ad_if8, + &m68008_device::suba_w_adr32_ad_if8, + &m68008_device::suba_w_dpc_ad_if8, + &m68008_device::suba_w_dpci_ad_if8, + &m68008_device::suba_w_imm16_ad_if8, + &m68008_device::subx_b_ds_dd_if8, + &m68008_device::subx_b_pais_paid_if8, + &m68008_device::sub_b_dd_ais_if8, + &m68008_device::sub_b_dd_aips_if8, + &m68008_device::sub_b_dd_pais_if8, + &m68008_device::sub_b_dd_das_if8, + &m68008_device::sub_b_dd_dais_if8, + &m68008_device::sub_b_dd_adr16_if8, + &m68008_device::sub_b_dd_adr32_if8, + &m68008_device::subx_w_ds_dd_if8, + &m68008_device::subx_w_pais_paid_if8, + &m68008_device::sub_w_dd_ais_if8, + &m68008_device::sub_w_dd_aips_if8, + &m68008_device::sub_w_dd_pais_if8, + &m68008_device::sub_w_dd_das_if8, + &m68008_device::sub_w_dd_dais_if8, + &m68008_device::sub_w_dd_adr16_if8, + &m68008_device::sub_w_dd_adr32_if8, + &m68008_device::subx_l_ds_dd_if8, + &m68008_device::subx_l_pais_paid_if8, + &m68008_device::sub_l_dd_ais_if8, + &m68008_device::sub_l_dd_aips_if8, + &m68008_device::sub_l_dd_pais_if8, + &m68008_device::sub_l_dd_das_if8, + &m68008_device::sub_l_dd_dais_if8, + &m68008_device::sub_l_dd_adr16_if8, + &m68008_device::sub_l_dd_adr32_if8, + &m68008_device::suba_l_ds_ad_if8, + &m68008_device::suba_l_as_ad_if8, + &m68008_device::suba_l_ais_ad_if8, + &m68008_device::suba_l_aips_ad_if8, + &m68008_device::suba_l_pais_ad_if8, + &m68008_device::suba_l_das_ad_if8, + &m68008_device::suba_l_dais_ad_if8, + &m68008_device::suba_l_adr16_ad_if8, + &m68008_device::suba_l_adr32_ad_if8, + &m68008_device::suba_l_dpc_ad_if8, + &m68008_device::suba_l_dpci_ad_if8, + &m68008_device::suba_l_imm32_ad_if8, + &m68008_device::cmp_b_ds_dd_if8, + &m68008_device::cmp_b_ais_dd_if8, + &m68008_device::cmp_b_aips_dd_if8, + &m68008_device::cmp_b_pais_dd_if8, + &m68008_device::cmp_b_das_dd_if8, + &m68008_device::cmp_b_dais_dd_if8, + &m68008_device::cmp_b_adr16_dd_if8, + &m68008_device::cmp_b_adr32_dd_if8, + &m68008_device::cmp_b_dpc_dd_if8, + &m68008_device::cmp_b_dpci_dd_if8, + &m68008_device::cmp_b_imm8_dd_if8, + &m68008_device::cmp_w_ds_dd_if8, + &m68008_device::cmp_w_as_dd_if8, + &m68008_device::cmp_w_ais_dd_if8, + &m68008_device::cmp_w_aips_dd_if8, + &m68008_device::cmp_w_pais_dd_if8, + &m68008_device::cmp_w_das_dd_if8, + &m68008_device::cmp_w_dais_dd_if8, + &m68008_device::cmp_w_adr16_dd_if8, + &m68008_device::cmp_w_adr32_dd_if8, + &m68008_device::cmp_w_dpc_dd_if8, + &m68008_device::cmp_w_dpci_dd_if8, + &m68008_device::cmp_w_imm16_dd_if8, + &m68008_device::cmp_l_ds_dd_if8, + &m68008_device::cmp_l_as_dd_if8, + &m68008_device::cmp_l_ais_dd_if8, + &m68008_device::cmp_l_aips_dd_if8, + &m68008_device::cmp_l_pais_dd_if8, + &m68008_device::cmp_l_das_dd_if8, + &m68008_device::cmp_l_dais_dd_if8, + &m68008_device::cmp_l_adr16_dd_if8, + &m68008_device::cmp_l_adr32_dd_if8, + &m68008_device::cmp_l_dpc_dd_if8, + &m68008_device::cmp_l_dpci_dd_if8, + &m68008_device::cmp_l_imm32_dd_if8, + &m68008_device::cmpa_w_ds_ad_if8, + &m68008_device::cmpa_w_as_ad_if8, + &m68008_device::cmpa_w_ais_ad_if8, + &m68008_device::cmpa_w_aips_ad_if8, + &m68008_device::cmpa_w_pais_ad_if8, + &m68008_device::cmpa_w_das_ad_if8, + &m68008_device::cmpa_w_dais_ad_if8, + &m68008_device::cmpa_w_adr16_ad_if8, + &m68008_device::cmpa_w_adr32_ad_if8, + &m68008_device::cmpa_w_dpc_ad_if8, + &m68008_device::cmpa_w_dpci_ad_if8, + &m68008_device::cmpa_w_imm16_ad_if8, + &m68008_device::eor_b_dd_ds_if8, + &m68008_device::cmpm_b_aips_aipd_if8, + &m68008_device::eor_b_dd_ais_if8, + &m68008_device::eor_b_dd_aips_if8, + &m68008_device::eor_b_dd_pais_if8, + &m68008_device::eor_b_dd_das_if8, + &m68008_device::eor_b_dd_dais_if8, + &m68008_device::eor_b_dd_adr16_if8, + &m68008_device::eor_b_dd_adr32_if8, + &m68008_device::eor_w_dd_ds_if8, + &m68008_device::cmpm_w_aips_aipd_if8, + &m68008_device::eor_w_dd_ais_if8, + &m68008_device::eor_w_dd_aips_if8, + &m68008_device::eor_w_dd_pais_if8, + &m68008_device::eor_w_dd_das_if8, + &m68008_device::eor_w_dd_dais_if8, + &m68008_device::eor_w_dd_adr16_if8, + &m68008_device::eor_w_dd_adr32_if8, + &m68008_device::eor_l_dd_ds_if8, + &m68008_device::cmpm_l_aips_aipd_if8, + &m68008_device::eor_l_dd_ais_if8, + &m68008_device::eor_l_dd_aips_if8, + &m68008_device::eor_l_dd_pais_if8, + &m68008_device::eor_l_dd_das_if8, + &m68008_device::eor_l_dd_dais_if8, + &m68008_device::eor_l_dd_adr16_if8, + &m68008_device::eor_l_dd_adr32_if8, + &m68008_device::cmpa_l_ds_ad_if8, + &m68008_device::cmpa_l_as_ad_if8, + &m68008_device::cmpa_l_ais_ad_if8, + &m68008_device::cmpa_l_aips_ad_if8, + &m68008_device::cmpa_l_pais_ad_if8, + &m68008_device::cmpa_l_das_ad_if8, + &m68008_device::cmpa_l_dais_ad_if8, + &m68008_device::cmpa_l_adr16_ad_if8, + &m68008_device::cmpa_l_adr32_ad_if8, + &m68008_device::cmpa_l_dpc_ad_if8, + &m68008_device::cmpa_l_dpci_ad_if8, + &m68008_device::cmpa_l_imm32_ad_if8, + &m68008_device::and_b_ds_dd_if8, + &m68008_device::and_b_ais_dd_if8, + &m68008_device::and_b_aips_dd_if8, + &m68008_device::and_b_pais_dd_if8, + &m68008_device::and_b_das_dd_if8, + &m68008_device::and_b_dais_dd_if8, + &m68008_device::and_b_adr16_dd_if8, + &m68008_device::and_b_adr32_dd_if8, + &m68008_device::and_b_dpc_dd_if8, + &m68008_device::and_b_dpci_dd_if8, + &m68008_device::and_b_imm8_dd_if8, + &m68008_device::and_w_ds_dd_if8, + &m68008_device::and_w_ais_dd_if8, + &m68008_device::and_w_aips_dd_if8, + &m68008_device::and_w_pais_dd_if8, + &m68008_device::and_w_das_dd_if8, + &m68008_device::and_w_dais_dd_if8, + &m68008_device::and_w_adr16_dd_if8, + &m68008_device::and_w_adr32_dd_if8, + &m68008_device::and_w_dpc_dd_if8, + &m68008_device::and_w_dpci_dd_if8, + &m68008_device::and_w_imm16_dd_if8, + &m68008_device::and_l_ds_dd_if8, + &m68008_device::and_l_ais_dd_if8, + &m68008_device::and_l_aips_dd_if8, + &m68008_device::and_l_pais_dd_if8, + &m68008_device::and_l_das_dd_if8, + &m68008_device::and_l_dais_dd_if8, + &m68008_device::and_l_adr16_dd_if8, + &m68008_device::and_l_adr32_dd_if8, + &m68008_device::and_l_dpc_dd_if8, + &m68008_device::and_l_dpci_dd_if8, + &m68008_device::and_l_imm32_dd_if8, + &m68008_device::mulu_w_ds_dd_if8, + &m68008_device::mulu_w_ais_dd_if8, + &m68008_device::mulu_w_aips_dd_if8, + &m68008_device::mulu_w_pais_dd_if8, + &m68008_device::mulu_w_das_dd_if8, + &m68008_device::mulu_w_dais_dd_if8, + &m68008_device::mulu_w_adr16_dd_if8, + &m68008_device::mulu_w_adr32_dd_if8, + &m68008_device::mulu_w_dpc_dd_if8, + &m68008_device::mulu_w_dpci_dd_if8, + &m68008_device::mulu_w_imm16_dd_if8, + &m68008_device::abcd_ds_dd_if8, + &m68008_device::abcd_pais_paid_if8, + &m68008_device::and_b_dd_ais_if8, + &m68008_device::and_b_dd_aips_if8, + &m68008_device::and_b_dd_pais_if8, + &m68008_device::and_b_dd_das_if8, + &m68008_device::and_b_dd_dais_if8, + &m68008_device::and_b_dd_adr16_if8, + &m68008_device::and_b_dd_adr32_if8, + &m68008_device::exg_dd_ds_if8, + &m68008_device::exg_ad_as_if8, + &m68008_device::and_w_dd_ais_if8, + &m68008_device::and_w_dd_aips_if8, + &m68008_device::and_w_dd_pais_if8, + &m68008_device::and_w_dd_das_if8, + &m68008_device::and_w_dd_dais_if8, + &m68008_device::and_w_dd_adr16_if8, + &m68008_device::and_w_dd_adr32_if8, + &m68008_device::exg_dd_as_if8, + &m68008_device::and_l_dd_ais_if8, + &m68008_device::and_l_dd_aips_if8, + &m68008_device::and_l_dd_pais_if8, + &m68008_device::and_l_dd_das_if8, + &m68008_device::and_l_dd_dais_if8, + &m68008_device::and_l_dd_adr16_if8, + &m68008_device::and_l_dd_adr32_if8, + &m68008_device::muls_w_ds_dd_if8, + &m68008_device::muls_w_ais_dd_if8, + &m68008_device::muls_w_aips_dd_if8, + &m68008_device::muls_w_pais_dd_if8, + &m68008_device::muls_w_das_dd_if8, + &m68008_device::muls_w_dais_dd_if8, + &m68008_device::muls_w_adr16_dd_if8, + &m68008_device::muls_w_adr32_dd_if8, + &m68008_device::muls_w_dpc_dd_if8, + &m68008_device::muls_w_dpci_dd_if8, + &m68008_device::muls_w_imm16_dd_if8, + &m68008_device::add_b_ds_dd_if8, + &m68008_device::add_b_ais_dd_if8, + &m68008_device::add_b_aips_dd_if8, + &m68008_device::add_b_pais_dd_if8, + &m68008_device::add_b_das_dd_if8, + &m68008_device::add_b_dais_dd_if8, + &m68008_device::add_b_adr16_dd_if8, + &m68008_device::add_b_adr32_dd_if8, + &m68008_device::add_b_dpc_dd_if8, + &m68008_device::add_b_dpci_dd_if8, + &m68008_device::add_b_imm8_dd_if8, + &m68008_device::add_w_ds_dd_if8, + &m68008_device::add_w_as_dd_if8, + &m68008_device::add_w_ais_dd_if8, + &m68008_device::add_w_aips_dd_if8, + &m68008_device::add_w_pais_dd_if8, + &m68008_device::add_w_das_dd_if8, + &m68008_device::add_w_dais_dd_if8, + &m68008_device::add_w_adr16_dd_if8, + &m68008_device::add_w_adr32_dd_if8, + &m68008_device::add_w_dpc_dd_if8, + &m68008_device::add_w_dpci_dd_if8, + &m68008_device::add_w_imm16_dd_if8, + &m68008_device::add_l_ds_dd_if8, + &m68008_device::add_l_as_dd_if8, + &m68008_device::add_l_ais_dd_if8, + &m68008_device::add_l_aips_dd_if8, + &m68008_device::add_l_pais_dd_if8, + &m68008_device::add_l_das_dd_if8, + &m68008_device::add_l_dais_dd_if8, + &m68008_device::add_l_adr16_dd_if8, + &m68008_device::add_l_adr32_dd_if8, + &m68008_device::add_l_dpc_dd_if8, + &m68008_device::add_l_dpci_dd_if8, + &m68008_device::add_l_imm32_dd_if8, + &m68008_device::adda_w_ds_ad_if8, + &m68008_device::adda_w_as_ad_if8, + &m68008_device::adda_w_ais_ad_if8, + &m68008_device::adda_w_aips_ad_if8, + &m68008_device::adda_w_pais_ad_if8, + &m68008_device::adda_w_das_ad_if8, + &m68008_device::adda_w_dais_ad_if8, + &m68008_device::adda_w_adr16_ad_if8, + &m68008_device::adda_w_adr32_ad_if8, + &m68008_device::adda_w_dpc_ad_if8, + &m68008_device::adda_w_dpci_ad_if8, + &m68008_device::adda_w_imm16_ad_if8, + &m68008_device::addx_b_ds_dd_if8, + &m68008_device::addx_b_pais_paid_if8, + &m68008_device::add_b_dd_ais_if8, + &m68008_device::add_b_dd_aips_if8, + &m68008_device::add_b_dd_pais_if8, + &m68008_device::add_b_dd_das_if8, + &m68008_device::add_b_dd_dais_if8, + &m68008_device::add_b_dd_adr16_if8, + &m68008_device::add_b_dd_adr32_if8, + &m68008_device::addx_w_ds_dd_if8, + &m68008_device::addx_w_pais_paid_if8, + &m68008_device::add_w_dd_ais_if8, + &m68008_device::add_w_dd_aips_if8, + &m68008_device::add_w_dd_pais_if8, + &m68008_device::add_w_dd_das_if8, + &m68008_device::add_w_dd_dais_if8, + &m68008_device::add_w_dd_adr16_if8, + &m68008_device::add_w_dd_adr32_if8, + &m68008_device::addx_l_ds_dd_if8, + &m68008_device::addx_l_pais_paid_if8, + &m68008_device::add_l_dd_ais_if8, + &m68008_device::add_l_dd_aips_if8, + &m68008_device::add_l_dd_pais_if8, + &m68008_device::add_l_dd_das_if8, + &m68008_device::add_l_dd_dais_if8, + &m68008_device::add_l_dd_adr16_if8, + &m68008_device::add_l_dd_adr32_if8, + &m68008_device::adda_l_ds_ad_if8, + &m68008_device::adda_l_as_ad_if8, + &m68008_device::adda_l_ais_ad_if8, + &m68008_device::adda_l_aips_ad_if8, + &m68008_device::adda_l_pais_ad_if8, + &m68008_device::adda_l_das_ad_if8, + &m68008_device::adda_l_dais_ad_if8, + &m68008_device::adda_l_adr16_ad_if8, + &m68008_device::adda_l_adr32_ad_if8, + &m68008_device::adda_l_dpc_ad_if8, + &m68008_device::adda_l_dpci_ad_if8, + &m68008_device::adda_l_imm32_ad_if8, + &m68008_device::asr_b_imm3_ds_if8, + &m68008_device::lsr_b_imm3_ds_if8, + &m68008_device::roxr_b_imm3_ds_if8, + &m68008_device::ror_b_imm3_ds_if8, + &m68008_device::asr_b_dd_ds_if8, + &m68008_device::lsr_b_dd_ds_if8, + &m68008_device::roxr_b_dd_ds_if8, + &m68008_device::ror_b_dd_ds_if8, + &m68008_device::asr_w_imm3_ds_if8, + &m68008_device::lsr_w_imm3_ds_if8, + &m68008_device::roxr_w_imm3_ds_if8, + &m68008_device::ror_w_imm3_ds_if8, + &m68008_device::asr_w_dd_ds_if8, + &m68008_device::lsr_w_dd_ds_if8, + &m68008_device::roxr_w_dd_ds_if8, + &m68008_device::ror_w_dd_ds_if8, + &m68008_device::asr_l_imm3_ds_if8, + &m68008_device::lsr_l_imm3_ds_if8, + &m68008_device::roxr_l_imm3_ds_if8, + &m68008_device::ror_l_imm3_ds_if8, + &m68008_device::asr_l_dd_ds_if8, + &m68008_device::lsr_l_dd_ds_if8, + &m68008_device::roxr_l_dd_ds_if8, + &m68008_device::ror_l_dd_ds_if8, + &m68008_device::asr_ais_if8, + &m68008_device::asr_aips_if8, + &m68008_device::asr_pais_if8, + &m68008_device::asr_das_if8, + &m68008_device::asr_dais_if8, + &m68008_device::asr_adr16_if8, + &m68008_device::asr_adr32_if8, + &m68008_device::asl_b_imm3_ds_if8, + &m68008_device::lsl_b_imm3_ds_if8, + &m68008_device::roxl_b_imm3_ds_if8, + &m68008_device::rol_b_imm3_ds_if8, + &m68008_device::asl_b_dd_ds_if8, + &m68008_device::lsl_b_dd_ds_if8, + &m68008_device::roxl_b_dd_ds_if8, + &m68008_device::rol_b_dd_ds_if8, + &m68008_device::asl_w_imm3_ds_if8, + &m68008_device::lsl_w_imm3_ds_if8, + &m68008_device::roxl_w_imm3_ds_if8, + &m68008_device::rol_w_imm3_ds_if8, + &m68008_device::asl_w_dd_ds_if8, + &m68008_device::lsl_w_dd_ds_if8, + &m68008_device::roxl_w_dd_ds_if8, + &m68008_device::rol_w_dd_ds_if8, + &m68008_device::asl_l_imm3_ds_if8, + &m68008_device::lsl_l_imm3_ds_if8, + &m68008_device::roxl_l_imm3_ds_if8, + &m68008_device::rol_l_imm3_ds_if8, + &m68008_device::asl_l_dd_ds_if8, + &m68008_device::lsl_l_dd_ds_if8, + &m68008_device::roxl_l_dd_ds_if8, + &m68008_device::rol_l_dd_ds_if8, + &m68008_device::asl_ais_if8, + &m68008_device::asl_aips_if8, + &m68008_device::asl_pais_if8, + &m68008_device::asl_das_if8, + &m68008_device::asl_dais_if8, + &m68008_device::asl_adr16_if8, + &m68008_device::asl_adr32_if8, + &m68008_device::lsr_ais_if8, + &m68008_device::lsr_aips_if8, + &m68008_device::lsr_pais_if8, + &m68008_device::lsr_das_if8, + &m68008_device::lsr_dais_if8, + &m68008_device::lsr_adr16_if8, + &m68008_device::lsr_adr32_if8, + &m68008_device::lsl_ais_if8, + &m68008_device::lsl_aips_if8, + &m68008_device::lsl_pais_if8, + &m68008_device::lsl_das_if8, + &m68008_device::lsl_dais_if8, + &m68008_device::lsl_adr16_if8, + &m68008_device::lsl_adr32_if8, + &m68008_device::roxr_ais_if8, + &m68008_device::roxr_aips_if8, + &m68008_device::roxr_pais_if8, + &m68008_device::roxr_das_if8, + &m68008_device::roxr_dais_if8, + &m68008_device::roxr_adr16_if8, + &m68008_device::roxr_adr32_if8, + &m68008_device::roxl_ais_if8, + &m68008_device::roxl_aips_if8, + &m68008_device::roxl_pais_if8, + &m68008_device::roxl_das_if8, + &m68008_device::roxl_dais_if8, + &m68008_device::roxl_adr16_if8, + &m68008_device::roxl_adr32_if8, + &m68008_device::ror_ais_if8, + &m68008_device::ror_aips_if8, + &m68008_device::ror_pais_if8, + &m68008_device::ror_das_if8, + &m68008_device::ror_dais_if8, + &m68008_device::ror_adr16_if8, + &m68008_device::ror_adr32_if8, + &m68008_device::rol_ais_if8, + &m68008_device::rol_aips_if8, + &m68008_device::rol_pais_if8, + &m68008_device::rol_das_if8, + &m68008_device::rol_dais_if8, + &m68008_device::rol_adr16_if8, + &m68008_device::rol_adr32_if8, +}; diff --git a/src/devices/cpu/m68000/m68008-sip8.cpp b/src/devices/cpu/m68000/m68008-sip8.cpp new file mode 100644 index 00000000000..b9979c231c3 --- /dev/null +++ b/src/devices/cpu/m68000/m68008-sip8.cpp @@ -0,0 +1,274771 @@ +// Instruction handlers for the m68000 (indirect, partial, cpu) +// +// Generated by m68000gen.py sip8 m68000.lst m68008-sip8.cpp + +#include "emu.h" +#include "m68008.h" + +void m68008_device::state_reset_ip8() +{ + switch(m_inst_substate) { + case 0: + // 002 rstp3 + m_icount -= 2; + // 296 rstp4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 27e rstp5 + debugger_exception_hook(0x00); + m_ftu = 0x0000; + m_icount -= 2; + // 27f rstp6 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_sr |= 0x0700; + update_interrupt(); + m_au = ext32(m_ftu); + m_icount -= 2; + // 2fb rstp7 + m_aob = m_au; + set_16h(m_da[16], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2ff rstp8 + m_aob = m_au; + set_16h(m_da[16], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 300 rstp9 + m_aob = m_au; + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + set_16l(m_da[16], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 11e rstpa + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::state_bus_error_ip8() +{ + switch(m_inst_substate) { + case 0: + // 003 bser1 + m_ssw = m_base_ssw | (m_sr & SR_S ? SSW_S : 0); + m_at = m_aob; + m_ftu = m_sr; + m_au = m_pc; + m_icount -= 2; + // 3a7 bser2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3ca bser3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0a2 bser4 + m_aob = m_au; + m_dbout = m_aluo; + m_ftu = m_ird; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3c6 bser5 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 088 bser6 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_pc = m_at; + m_ftu = (m_ftu & ~0x1f) | m_ssw; + m_au = m_au - 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x02); + m_da[16] = m_au; + m_ftu = 0x0008; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 41: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::state_address_error_ip8() +{ + switch(m_inst_substate) { + case 0: + // 003 bser1 + m_ssw = m_base_ssw | (m_sr & SR_S ? SSW_S : 0); + m_at = m_aob; + m_ftu = m_sr; + m_au = m_pc; + m_icount -= 2; + // 3a7 bser2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3ca bser3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0a2 bser4 + m_aob = m_au; + m_dbout = m_aluo; + m_ftu = m_ird; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3c6 bser5 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 088 bser6 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_pc = m_at; + m_ftu = (m_ftu & ~0x1f) | m_ssw; + m_au = m_au - 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x03); + m_da[16] = m_au; + m_ftu = 0x000c; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N | SSW_CRITICAL; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 41: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::state_double_fault_ip8() +{ + switch(m_inst_substate) { + case 0: + // 001 halt1 + m_icount = 0; + } +} + +void m68008_device::state_interrupt_ip8() +{ + switch(m_inst_substate) { + case 0: + // 1c4 itlx1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 234 itlx2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_alub = m_ftu; + m_pc = m_au; + m_sr = (m_sr & ~SR_I) | ((m_next_state >> 16) & SR_I); + update_interrupt(); + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_icount -= 2; + // 235 itlx3 + m_ftu = 0xfff1 | ((m_next_state >> 23) & 0xe); + m_au = m_da[16] - 2; + m_icount -= 2; + // 0eb itlx4 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 236 itlx5 + m_aob = m_at; + m_base_ssw = SSW_CPU | SSW_R | SSW_N; + start_interrupt_vector_lookup(); + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_cpu(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + end_interrupt_vector_lookup(); + m_irc = m_edb; + // 118 itlx6 + m_ir = m_irc; + m_icount -= 2; + // 292 itlx7 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook((m_int_vector) >> 2); + m_da[16] = m_au; + m_ftu = m_int_vector; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 15: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 19: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + [[fallthrough]]; case 21: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 23: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + [[fallthrough]]; case 25: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 27: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + [[fallthrough]]; case 29: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::state_trace_ip8() +{ + switch(m_inst_substate) { + case 0: + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x09); + m_da[16] = m_au; + m_ftu = 0x0024; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::state_illegal_ip8() +{ + switch(m_inst_substate) { + case 0: + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x04); + m_da[16] = m_au; + m_ftu = 0x0010; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::state_priviledge_ip8() +{ + switch(m_inst_substate) { + case 0: + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x08); + m_da[16] = m_au; + m_ftu = 0x0020; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::state_linea_ip8() +{ + switch(m_inst_substate) { + case 0: + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x0a); + m_da[16] = m_au; + m_ftu = 0x0028; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::state_linef_ip8() +{ + switch(m_inst_substate) { + case 0: + // 1c0 trac1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 3a3 trac2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + if(m_next_state == S_TRACE) + m_next_state = 0; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x0b); + m_da[16] = m_au; + m_ftu = 0x002c; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_N; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R | SSW_N; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R | SSW_N; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_b_imm8_ds_ip8() // 0000 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or8(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_b_imm8_ais_ip8() // 0010 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_b_imm8_aips_ip8() // 0018 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_b_imm8_pais_ip8() // 0020 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_b_imm8_das_ip8() // 0028 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_b_imm8_dais_ip8() // 0030 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_b_imm8_adr16_ip8() // 0038 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_b_imm8_adr32_ip8() // 0039 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_imm8_ccr_ip8() // 003c ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dtl:m_dt + alu_or8(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_w_imm16_ds_ip8() // 0040 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_w_imm16_ais_ip8() // 0050 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_w_imm16_aips_ip8() // 0058 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_w_imm16_pais_ip8() // 0060 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_w_imm16_das_ip8() // 0068 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_w_imm16_dais_ip8() // 0070 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_w_imm16_adr16_ip8() // 0078 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_w_imm16_adr32_ip8() // 0079 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_i16u_sr_ip8() // 007c ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=14 c=2 m=..... i=....... ALU.or_ a=R.ftu:m_ftu d=R.dtl:m_dt + alu_or(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_l_imm32_ds_ip8() // 0080 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or(m_dt, m_da[ry]); + sr_nzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=18:m_da[ry] + alu_or(high16(m_dt), high16(m_da[ry])); + sr_nzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_l_imm32_ais_ip8() // 0090 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_l_imm32_aips_ip8() // 0098 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_l_imm32_pais_ip8() // 00a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_l_imm32_das_ip8() // 00a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_l_imm32_dais_ip8() // 00b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_l_imm32_adr16_ip8() // 00b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ori_l_imm32_adr32_ip8() // 00b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=R.alue:m_alue + alu_or(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 33: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_ds_ip8() // 0100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3e7 btsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor(m_da[rx], m_da[ry]); + // 0e7 btsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto btsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +btsr3: + // 044 btsr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_and(high16(m_da[ry]), 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movep_w_das_dd_ip8() // 0108 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1d2 mpiw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 29a mpiw2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + set_8h(m_dbin, m_edb); + // 368 mpiw3 + m_aob = m_au; + m_ir = m_irc; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_8(m_dbin, m_edb); + // 36a mpiw4 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_ais_ip8() // 0110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_aips_ip8() // 0118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_pais_ip8() // 0120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_das_ip8() // 0128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_dais_ip8() // 0130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_adr16_ip8() // 0138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_adr32_ip8() // 0139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_dpc_ip8() // 013a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_dpci_ip8() // 013b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_dd_imm_ip8() // 013c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0ab btsi1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16h(m_dt, high16(m_at)); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + // 0e7 btsr2 + m_t = m_dcr & 0x10; + m_alub = m_dt; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto btsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_dt, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +btsr3: + // 044 btsr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=23:m_dt d=R.dcro8:m_dcro8 + alu_and8(high16(m_dt), 1 << (m_dcr & 7)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_dd_ds_ip8() // 0140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3ef bcsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor(m_da[rx], m_da[ry]); + // 06a bcsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=13 c=2 m=..... i=....... ALU.eor a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_eor(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bcsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bcsr3: + // 084 bcsr3 + m_alub = high16(m_da[ry]); + // alu r=13 c=2 m=..... i=....... ALU.eor a=18:m_da[ry] d=R.dcro:m_dcro + alu_eor(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movep_l_das_dd_ip8() // 0148 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1d6 mpil1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 29e mpil2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + set_8h(m_dbin, m_edb); + // 34e mpil3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_8(m_dbin, m_edb); + // 34f mpil4 + m_aob = m_au; + set_16h(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + set_8h(m_dbin, m_edb); + // 368 mpiw3 + m_aob = m_au; + m_ir = m_irc; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_8(m_dbin, m_edb); + // 36a mpiw4 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_dd_ais_ip8() // 0150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_dd_aips_ip8() // 0158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_dd_pais_ip8() // 0160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_dd_das_ip8() // 0168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_dd_dais_ip8() // 0170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_dd_adr16_ip8() // 0178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_dd_adr32_ip8() // 0179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_dd_ds_ip8() // 0180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3eb bclr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_or(m_da[rx], m_da[ry]); + // 06e bclr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=14 c=2 m=..... i=.l..... ALU.or_ a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_or(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bclr3; + else + goto bclr4; +bclr4: + // 0cc bclr4 + // alu r=14 c=4 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=R.dcro:m_dcro + alu_eor(m_aluo, 1 << (m_dcr & 15)); + m_icount -= 2; + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.l...i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bclr3: + // 08c bclr3 + m_alub = high16(m_da[ry]); + // alu r=14 c=2 m=..... i=.l..... ALU.or_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_or(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0c8 bclr5 + // alu r=14 c=4 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=R.dcro:m_dcro + alu_eor(m_aluo, 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.l...i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movep_w_dd_das_ip8() // 0188 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1ca mpow1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 36d mpow2 + m_aob = m_au; + m_ir = m_irc; + set_8xh(m_dbout, m_da[rx]); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dxl:m_da[rx] + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + // 36e mpow3 + m_aob = m_au; + set_8xl(m_dbout, m_da[rx]); + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_dd_ais_ip8() // 0190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_dd_aips_ip8() // 0198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_dd_pais_ip8() // 01a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_dd_das_ip8() // 01a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_dd_dais_ip8() // 01b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_dd_adr16_ip8() // 01b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_dd_adr32_ip8() // 01b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_dd_ds_ip8() // 01c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3ef bcsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_or(m_da[rx], m_da[ry]); + // 06a bcsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=14 c=2 m=..... i=....... ALU.or_ a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_or(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bcsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bcsr3: + // 084 bcsr3 + m_alub = high16(m_da[ry]); + // alu r=14 c=2 m=..... i=....... ALU.or_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_or(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movep_l_dd_das_ip8() // 01c8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1ce mpol1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 36b mpol2 + m_aob = m_au; + set_8xh(m_dbout, high16(m_da[rx])); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=16:m_da[rx] d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + // 36c mpol3 + m_aob = m_au; + set_8xl(m_dbout, high16(m_da[rx])); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=16:m_da[rx] d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 36d mpow2 + m_aob = m_au; + m_ir = m_irc; + set_8xh(m_dbout, m_da[rx]); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dxl:m_da[rx] + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + // 36e mpow3 + m_aob = m_au; + set_8xl(m_dbout, m_da[rx]); + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_dd_ais_ip8() // 01d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_dd_aips_ip8() // 01d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_dd_pais_ip8() // 01e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_dd_das_ip8() // 01e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_dd_dais_ip8() // 01f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_dd_adr16_ip8() // 01f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_dd_adr32_ip8() // 01f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_b_imm8_ds_ip8() // 0200 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_and8(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_b_imm8_ais_ip8() // 0210 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_b_imm8_aips_ip8() // 0218 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_b_imm8_pais_ip8() // 0220 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_b_imm8_das_ip8() // 0228 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_b_imm8_dais_ip8() // 0230 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_b_imm8_adr16_ip8() // 0238 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_b_imm8_adr32_ip8() // 0239 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_imm8_ccr_ip8() // 023c ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=4 c=2 m=..... i=b...... ALU.and_ a=R.ftu:m_ftu d=R.dtl:m_dt + alu_and8(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_w_imm16_ds_ip8() // 0240 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_and(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_w_imm16_ais_ip8() // 0250 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_w_imm16_aips_ip8() // 0258 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_w_imm16_pais_ip8() // 0260 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_w_imm16_das_ip8() // 0268 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_w_imm16_dais_ip8() // 0270 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_w_imm16_adr16_ip8() // 0278 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_w_imm16_adr32_ip8() // 0279 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_i16u_sr_ip8() // 027c ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=4 c=2 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=R.dtl:m_dt + alu_and(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_l_imm32_ds_ip8() // 0280 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_and(m_dt, m_da[ry]); + sr_nzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=18:m_da[ry] + alu_and(high16(m_dt), high16(m_da[ry])); + sr_nzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_l_imm32_ais_ip8() // 0290 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_l_imm32_aips_ip8() // 0298 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_l_imm32_pais_ip8() // 02a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_l_imm32_das_ip8() // 02a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_l_imm32_dais_ip8() // 02b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_l_imm32_adr16_ip8() // 02b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::andi_l_imm32_adr32_ip8() // 02b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_and(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=R.alue:m_alue + alu_and(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 33: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_b_imm8_ds_ip8() // 0400 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub8(m_dt, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_b_imm8_ais_ip8() // 0410 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_b_imm8_aips_ip8() // 0418 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_b_imm8_pais_ip8() // 0420 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_b_imm8_das_ip8() // 0428 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_b_imm8_dais_ip8() // 0430 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_b_imm8_adr16_ip8() // 0438 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_b_imm8_adr32_ip8() // 0439 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_w_imm16_ds_ip8() // 0440 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub(m_dt, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_w_imm16_ais_ip8() // 0450 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_w_imm16_aips_ip8() // 0458 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_w_imm16_pais_ip8() // 0460 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_w_imm16_das_ip8() // 0468 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_w_imm16_dais_ip8() // 0470 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_w_imm16_adr16_ip8() // 0478 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_w_imm16_adr32_ip8() // 0479 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_l_imm32_ds_ip8() // 0480 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub(m_dt, m_da[ry]); + sr_xnzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=18:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + sr_xnzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_l_imm32_ais_ip8() // 0490 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_l_imm32_aips_ip8() // 0498 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_l_imm32_pais_ip8() // 04a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_l_imm32_das_ip8() // 04a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_l_imm32_dais_ip8() // 04b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_l_imm32_adr16_ip8() // 04b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subi_l_imm32_adr32_ip8() // 04b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 33: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_b_imm8_ds_ip8() // 0600 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_add8(m_dt, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_b_imm8_ais_ip8() // 0610 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_b_imm8_aips_ip8() // 0618 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_b_imm8_pais_ip8() // 0620 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_b_imm8_das_ip8() // 0628 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_b_imm8_dais_ip8() // 0630 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_b_imm8_adr16_ip8() // 0638 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_b_imm8_adr32_ip8() // 0639 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add8(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_w_imm16_ds_ip8() // 0640 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_add(m_dt, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_w_imm16_ais_ip8() // 0650 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_w_imm16_aips_ip8() // 0658 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_w_imm16_pais_ip8() // 0660 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_w_imm16_das_ip8() // 0668 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_w_imm16_dais_ip8() // 0670 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_w_imm16_adr16_ip8() // 0678 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_w_imm16_adr32_ip8() // 0679 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_l_imm32_ds_ip8() // 0680 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_add(m_dt, m_da[ry]); + sr_xnzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=18:m_da[ry] + alu_addc(high16(m_dt), high16(m_da[ry])); + sr_xnzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_l_imm32_ais_ip8() // 0690 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_l_imm32_aips_ip8() // 0698 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_l_imm32_pais_ip8() // 06a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_l_imm32_das_ip8() // 06a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_l_imm32_dais_ip8() // 06b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_l_imm32_adr16_ip8() // 06b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addi_l_imm32_adr32_ip8() // 06b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dbin:m_dbin + alu_add(m_dt, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 33: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_ds_ip8() // 0800 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3e7 btsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_dt; + m_at = m_dt; + m_au = m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor(m_dt, m_da[ry]); + // 0e7 btsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto btsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +btsr3: + // 044 btsr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_and(high16(m_da[ry]), 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_ais_ip8() // 0810 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_aips_ip8() // 0818 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_pais_ip8() // 0820 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_das_ip8() // 0828 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_dais_ip8() // 0830 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_adr16_ip8() // 0838 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_adr32_ip8() // 0839 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_dpc_ip8() // 083a ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::btst_imm8_dpci_ip8() // 083b ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 215 btsm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_and8(m_dbin, 1 << (m_dcr & 7)); + sr_z(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_imm8_ds_ip8() // 0840 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3ef bcsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_dt; + m_at = m_dt; + m_au = m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor(m_dt, m_da[ry]); + // 06a bcsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=13 c=2 m=..... i=....... ALU.eor a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_eor(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bcsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bcsr3: + // 084 bcsr3 + m_alub = high16(m_da[ry]); + // alu r=13 c=2 m=..... i=....... ALU.eor a=18:m_da[ry] d=R.dcro:m_dcro + alu_eor(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=13 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_imm8_ais_ip8() // 0850 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_imm8_aips_ip8() // 0858 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_imm8_pais_ip8() // 0860 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_imm8_das_ip8() // 0868 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_imm8_dais_ip8() // 0870 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_imm8_adr16_ip8() // 0878 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bchg_imm8_adr32_ip8() // 0879 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_eor8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=13 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_imm8_ds_ip8() // 0880 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3eb bclr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_dt; + m_at = m_dt; + m_au = m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or(m_dt, m_da[ry]); + // 06e bclr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=14 c=2 m=..... i=.l..... ALU.or_ a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_or(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bclr3; + else + goto bclr4; +bclr4: + // 0cc bclr4 + // alu r=14 c=4 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=R.dcro:m_dcro + alu_eor(m_aluo, 1 << (m_dcr & 15)); + m_icount -= 2; + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.l...i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bclr3: + // 08c bclr3 + m_alub = high16(m_da[ry]); + // alu r=14 c=2 m=..... i=.l..... ALU.or_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_or(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0c8 bclr5 + // alu r=14 c=4 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=R.dcro:m_dcro + alu_eor(m_aluo, 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.l...i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_imm8_ais_ip8() // 0890 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_imm8_aips_ip8() // 0898 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_imm8_pais_ip8() // 08a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_imm8_das_ip8() // 08a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_imm8_dais_ip8() // 08b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_imm8_adr16_ip8() // 08b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bclr_imm8_adr32_ip8() // 08b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 069 bclm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_ftu = m_sr; + // alu r=14 c=2 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + // 067 bclm2 + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=4 m=..... i=bl..... ALU.eor a=R.aluo:m_aluo d=R.dcro8:m_dcro8 + alu_eor8(m_aluo, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=bl...i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_imm8_ds_ip8() // 08c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3ef bcsr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_dt; + m_at = m_dt; + m_au = m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_or(m_dt, m_da[ry]); + // 06a bcsr2 + m_t = m_dcr & 0x10; + m_alub = m_da[ry]; + m_au = m_pc + 2; + // alu r=14 c=2 m=..... i=....... ALU.or_ a=R.dyl:m_da[ry] d=R.dcro:m_dcro + alu_or(m_da[ry], 1 << (m_dcr & 15)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto bcsr3; + else + goto bcsr4; +bcsr4: + // 0c4 bcsr4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +bcsr3: + // 084 bcsr3 + m_alub = high16(m_da[ry]); + // alu r=14 c=2 m=..... i=....... ALU.or_ a=18:m_da[ry] d=R.dcro:m_dcro + alu_or(high16(m_da[ry]), 1 << (m_dcr & 15)); + m_icount -= 2; + // 0a1 bcsr5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + // alu r=14 c=1 m=..z.. i=.....i. ALU.and_ a=alub d=R.dcro:m_dcro + alu_and(m_alub, 1 << (m_dcr & 15)); + sr_z(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_imm8_ais_ip8() // 08d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_imm8_aips_ip8() // 08d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_imm8_pais_ip8() // 08e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_imm8_das_ip8() // 08e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_imm8_dais_ip8() // 08f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_imm8_adr16_ip8() // 08f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bset_imm8_adr32_ip8() // 08f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 081 bcsm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_pc = m_au; + m_au = m_au + 2; + // alu r=14 c=2 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=R.dcro8:m_dcro8 + alu_or8(m_dbin, 1 << (m_dcr & 7)); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 082 bcsm2 + m_aob = m_at; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + // alu r=14 c=1 m=..z.. i=b....i. ALU.and_ a=alub d=R.dcro8:m_dcro8 + alu_and8(m_alub, 1 << (m_dcr & 7)); + sr_z(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_b_imm8_ds_ip8() // 0a00 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor8(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_b_imm8_ais_ip8() // 0a10 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_b_imm8_aips_ip8() // 0a18 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_b_imm8_pais_ip8() // 0a20 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_b_imm8_das_ip8() // 0a28 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_b_imm8_dais_ip8() // 0a30 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_b_imm8_adr16_ip8() // 0a38 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_b_imm8_adr32_ip8() // 0a39 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor8(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_imm8_ccr_ip8() // 0a3c ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=13 c=2 m=..... i=b...... ALU.eor a=R.ftu:m_ftu d=R.dtl:m_dt + alu_eor8(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_w_imm16_ds_ip8() // 0a40 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor(m_dt, m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_w_imm16_ais_ip8() // 0a50 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_w_imm16_aips_ip8() // 0a58 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_w_imm16_pais_ip8() // 0a60 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_w_imm16_das_ip8() // 0a68 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_w_imm16_dais_ip8() // 0a70 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_w_imm16_adr16_ip8() // 0a78 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_w_imm16_adr32_ip8() // 0a79 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_i16u_sr_ip8() // 0a7c ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1cc stiw1 + m_ftu = m_sr; + m_au = m_pc - 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_icount -= 2; + // 307 stiw2 + // alu r=13 c=2 m=..... i=....... ALU.eor a=R.ftu:m_ftu d=R.dtl:m_dt + alu_eor(m_ftu, m_dt); + m_icount -= 2; + // 320 stiw3 + m_movemr = m_dbin; + m_ftu = m_aluo; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_l_imm32_ds_ip8() // 0a80 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_eor(m_dt, m_da[ry]); + sr_nzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=18:m_da[ry] + alu_eor(high16(m_dt), high16(m_da[ry])); + sr_nzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_l_imm32_ais_ip8() // 0a90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_l_imm32_aips_ip8() // 0a98 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_l_imm32_pais_ip8() // 0aa0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_l_imm32_das_ip8() // 0aa8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_l_imm32_dais_ip8() // 0ab0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=13 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_l_imm32_adr16_ip8() // 0ab8 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eori_l_imm32_adr32_ip8() // 0ab9 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dtl:m_dt d=R.dbin:m_dbin + alu_eor(m_dt, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=23:m_dt d=R.alue:m_alue + alu_eor(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 33: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_b_imm8_ds_ip8() // 0c00 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 108 rcaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub8(m_dt, m_da[ry]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_b_imm8_ais_ip8() // 0c10 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_b_imm8_aips_ip8() // 0c18 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_b_imm8_pais_ip8() // 0c20 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_b_imm8_das_ip8() // 0c28 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_b_imm8_dais_ip8() // 0c30 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_b_imm8_adr16_ip8() // 0c38 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_b_imm8_adr32_ip8() // 0c39 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub8(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_w_imm16_ds_ip8() // 0c40 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 108 rcaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub(m_dt, m_da[ry]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_w_imm16_ais_ip8() // 0c50 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_w_imm16_aips_ip8() // 0c58 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_w_imm16_pais_ip8() // 0c60 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_w_imm16_das_ip8() // 0c68 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_w_imm16_dais_ip8() // 0c70 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_w_imm16_adr16_ip8() // 0c78 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_w_imm16_adr32_ip8() // 0c79 ffff +{ + switch(m_inst_substate) { + case 0: + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 087 cpdw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_l_imm32_ds_ip8() // 0c80 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + if(!m_cmpild_instr_callback.isnull()) (m_cmpild_instr_callback)(ry, (m_dt & 0xffff0000) | m_dbin); + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 104 rcal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dyl:m_da[ry] + alu_sub(m_dt, m_da[ry]); + sr_nzvc(); + // 239 rcal2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=18:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_l_imm32_ais_ip8() // 0c90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_l_imm32_aips_ip8() // 0c98 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_l_imm32_pais_ip8() // 0ca0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_l_imm32_das_ip8() // 0ca8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_l_imm32_dais_ip8() // 0cb0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_l_imm32_adr16_ip8() // 0cb8 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpi_l_imm32_adr32_ip8() // 0cb9 ffff +{ + switch(m_inst_substate) { + case 0: + // 3e0 o#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b9 o#w1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 08f cpdl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dbin:m_dbin + alu_sub(m_dt, m_dbin); + sr_nzvc(); + // 171 cpdl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ds_dd_ip8() // 1000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ais_dd_ip8() // 1010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_aips_dd_ip8() // 1018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_pais_dd_ip8() // 1020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_das_dd_ip8() // 1028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dais_dd_ip8() // 1030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr16_dd_ip8() // 1038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr32_dd_ip8() // 1039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpc_dd_ip8() // 103a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpci_dd_ip8() // 103b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_8(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_imm8_dd_ip8() // 103c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ds_aid_ip8() // 1080 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ais_aid_ip8() // 1090 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_aips_aid_ip8() // 1098 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_pais_aid_ip8() // 10a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_das_aid_ip8() // 10a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dais_aid_ip8() // 10b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr16_aid_ip8() // 10b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr32_aid_ip8() // 10b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpc_aid_ip8() // 10ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpci_aid_ip8() // 10bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_imm8_aid_ip8() // 10bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dt); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ds_aipd_ip8() // 10c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ais_aipd_ip8() // 10d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_aips_aipd_ip8() // 10d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_pais_aipd_ip8() // 10e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_das_aipd_ip8() // 10e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dais_aipd_ip8() // 10f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr16_aipd_ip8() // 10f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr32_aipd_ip8() // 10f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpc_aipd_ip8() // 10fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpci_aipd_ip8() // 10fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dbin); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_imm8_aipd_ip8() // 10fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + set_8xl(m_dbout, m_dt); + m_pc = m_au; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ds_paid_ip8() // 1100 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ais_paid_ip8() // 1110 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_aips_paid_ip8() // 1118 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_pais_paid_ip8() // 1120 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_das_paid_ip8() // 1128 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dais_paid_ip8() // 1130 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr16_paid_ip8() // 1138 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr32_paid_ip8() // 1139 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpc_paid_ip8() // 113a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpci_paid_ip8() // 113b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_imm8_paid_ip8() // 113c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ds_dad_ip8() // 1140 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + set_8xl(m_dbout, m_da[ry]); + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ais_dad_ip8() // 1150 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_aips_dad_ip8() // 1158 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_pais_dad_ip8() // 1160 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_das_dad_ip8() // 1168 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dais_dad_ip8() // 1170 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr16_dad_ip8() // 1178 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr32_dad_ip8() // 1179 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpc_dad_ip8() // 117a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpci_dad_ip8() // 117b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_imm8_dad_ip8() // 117c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + set_8xl(m_dbout, m_dt); + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ds_daid_ip8() // 1180 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + set_8xl(m_dbout, m_da[ry]); + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ais_daid_ip8() // 1190 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_aips_daid_ip8() // 1198 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_pais_daid_ip8() // 11a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_das_daid_ip8() // 11a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dais_daid_ip8() // 11b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr16_daid_ip8() // 11b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr32_daid_ip8() // 11b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpc_daid_ip8() // 11ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpci_daid_ip8() // 11bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_imm8_daid_ip8() // 11bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + set_8xl(m_dbout, m_dt); + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=bl...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ds_adr16_ip8() // 11c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ais_adr16_ip8() // 11d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_aips_adr16_ip8() // 11d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_pais_adr16_ip8() // 11e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_das_adr16_ip8() // 11e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dais_adr16_ip8() // 11f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr16_adr16_ip8() // 11f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr32_adr16_ip8() // 11f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpc_adr16_ip8() // 11fa ffff +{ + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpci_adr16_ip8() // 11fb ffff +{ + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_imm8_adr16_ip8() // 11fc ffff +{ + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ds_adr32_ip8() // 13c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_ais_adr32_ip8() // 13d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_aips_adr32_ip8() // 13d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_pais_adr32_ip8() // 13e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_das_adr32_ip8() // 13e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dais_adr32_ip8() // 13f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr16_adr32_ip8() // 13f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_adr32_adr32_ip8() // 13f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpc_adr32_ip8() // 13fa ffff +{ + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_dpci_adr32_ip8() // 13fb ffff +{ + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_b_imm8_adr32_ip8() // 13fc ffff +{ + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and8(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 15: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + [[fallthrough]]; case 17: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ds_dd_ip8() // 2000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_da[rx] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_as_dd_ip8() // 2008 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ais_dd_ip8() // 2010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_aips_dd_ip8() // 2018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_pais_dd_ip8() // 2020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_das_dd_ip8() // 2028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dais_dd_ip8() // 2030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr16_dd_ip8() // 2038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr32_dd_ip8() // 2039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpc_dd_ip8() // 203a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpci_dd_ip8() // 203b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_imm32_dd_ip8() // 203c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_ds_ad_ip8() // 2040 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_as_ad_ip8() // 2048 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + m_da[rx] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_ais_ad_ip8() // 2050 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_aips_ad_ip8() // 2058 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_pais_ad_ip8() // 2060 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_das_ad_ip8() // 2068 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_dais_ad_ip8() // 2070 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_adr16_ad_ip8() // 2078 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_adr32_ad_ip8() // 2079 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_dpc_ad_ip8() // 207a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_dpci_ad_ip8() // 207b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29f mrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 36f mrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_alue); + // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_l_imm32_ad_ip8() // 207c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 129 rrgl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ds_aid_ip8() // 2080 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2f9 rmrl1 + m_aob = m_da[rx]; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23f rmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_as_aid_ip8() // 2088 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2f9 rmrl1 + m_aob = m_da[rx]; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23f rmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ais_aid_ip8() // 2090 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_aips_aid_ip8() // 2098 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_pais_aid_ip8() // 20a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_das_aid_ip8() // 20a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dais_aid_ip8() // 20b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr16_aid_ip8() // 20b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr32_aid_ip8() // 20b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpc_aid_ip8() // 20ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpci_aid_ip8() // 20bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a9 mmrl1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3aa mmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_imm32_aid_ip8() // 20bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f9 rmrl1 + m_aob = m_da[rx]; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23f rmrl2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ds_aipd_ip8() // 20c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2fd rmil1 + m_aob = m_da[rx]; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23c rmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23d rmil3 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_as_aipd_ip8() // 20c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2fd rmil1 + m_aob = m_da[rx]; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23c rmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23d rmil3 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ais_aipd_ip8() // 20d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_aips_aipd_ip8() // 20d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_pais_aipd_ip8() // 20e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_das_aipd_ip8() // 20e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dais_aipd_ip8() // 20f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr16_aipd_ip8() // 20f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr32_aipd_ip8() // 20f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpc_aipd_ip8() // 20fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpci_aipd_ip8() // 20fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ad mmil1 + m_aob = m_da[rx]; + m_dbout = m_alue; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 3ae mmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_imm32_aipd_ip8() // 20fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fd rmil1 + m_aob = m_da[rx]; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_pc = m_au; + m_au = m_da[rx] + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23c rmil2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 23d rmil3 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ds_paid_ip8() // 2100 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2fc rmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 23e rmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_as_paid_ip8() // 2108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2fc rmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 23e rmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ais_paid_ip8() // 2110 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_aips_paid_ip8() // 2118 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_pais_paid_ip8() // 2120 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_das_paid_ip8() // 2128 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dais_paid_ip8() // 2130 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr16_paid_ip8() // 2138 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr32_paid_ip8() // 2139 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpc_paid_ip8() // 213a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpci_paid_ip8() // 213b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38f mmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34a mmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_imm32_paid_ip8() // 213c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fc rmml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 23e rmml2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ds_dad_ip8() // 2140 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2de rmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_as_dad_ip8() // 2148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2de rmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ais_dad_ip8() // 2150 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_aips_dad_ip8() // 2158 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_pais_dad_ip8() // 2160 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_das_dad_ip8() // 2168 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dais_dad_ip8() // 2170 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr16_dad_ip8() // 2178 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr32_dad_ip8() // 2179 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpc_dad_ip8() // 217a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpci_dad_ip8() // 217b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38e mmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_imm32_dad_ip8() // 217c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2de rmdl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ds_daid_ip8() // 2180 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1ef rmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 105 rmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxl3; + else + goto rmxl2; +rmxl2: + // 12c rmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmxl3: + // 1ec rmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmdl2: + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_as_daid_ip8() // 2188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1ef rmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 105 rmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxl3; + else + goto rmxl2; +rmxl2: + // 12c rmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmxl3: + // 1ec rmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmdl2: + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ais_daid_ip8() // 2190 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_aips_daid_ip8() // 2198 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_pais_daid_ip8() // 21a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_das_daid_ip8() // 21a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dais_daid_ip8() // 21b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr16_daid_ip8() // 21b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr32_daid_ip8() // 21b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpc_daid_ip8() // 21ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpci_daid_ip8() // 21bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29c mmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 10d mmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxl3; + else + goto mmxl2; +mmxl2: + // 02c mmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mmxl3: + // 0ec mmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto mawl2; +mawl2: + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_imm32_daid_ip8() // 21bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1ef rmxl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 105 rmxl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxl3; + else + goto rmxl2; +rmxl2: + // 12c rmxl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmxl3: + // 1ec rmxl3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdl2; +rmdl2: + // 2be rmdl2 + m_aob = m_au; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 2df rmdl3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 258 rmrl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ds_adr16_ip8() // 21c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2dd rawl1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_as_adr16_ip8() // 21c8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2dd rawl1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ais_adr16_ip8() // 21d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_aips_adr16_ip8() // 21d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_pais_adr16_ip8() // 21e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_das_adr16_ip8() // 21e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dais_adr16_ip8() // 21f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr16_adr16_ip8() // 21f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr32_adr16_ip8() // 21f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpc_adr16_ip8() // 21fa ffff +{ + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpci_adr16_ip8() // 21fb ffff +{ + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38c mawl1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 32f mawl2 + m_aob = m_au; + m_dbout = m_alue; + set_16l(m_at, m_aluo); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_imm32_adr16_ip8() // 21fc ffff +{ + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2dd rawl1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ds_adr32_ip8() // 23c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1ee rall1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bf rall2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_as_adr32_ip8() // 23c8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1ee rall1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bf rall2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_da[ry]); + m_alub = high16(m_da[ry]); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_ais_adr32_ip8() // 23d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_aips_adr32_ip8() // 23d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_pais_adr32_ip8() // 23e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_das_adr32_ip8() // 23e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dais_adr32_ip8() // 23f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr16_adr32_ip8() // 23f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_adr32_adr32_ip8() // 23f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpc_adr32_ip8() // 23fa ffff +{ + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_dpci_adr32_ip8() // 23fb ffff +{ + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 30f mall1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 329 mall2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_dbout = m_aluo; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 32a mall3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_l_imm32_adr32_ip8() // 23fc ffff +{ + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1ee rall1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bf rall2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2ba rall3 + m_aob = m_au; + m_dbout = high16(m_dt); + m_alub = high16(m_dt); + m_au = m_au + 2; + // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ds_dd_ip8() // 3000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_as_dd_ip8() // 3008 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ais_dd_ip8() // 3010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_aips_dd_ip8() // 3018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_pais_dd_ip8() // 3020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_das_dd_ip8() // 3028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dais_dd_ip8() // 3030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr16_dd_ip8() // 3038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr32_dd_ip8() // 3039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpc_dd_ip8() // 303a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpci_dd_ip8() // 303b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29b mrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_imm16_dd_ip8() // 303c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 121 rrgw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_dt; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_ds_ad_ip8() // 3040 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 279 rrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + m_au = m_au + 2; + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_as_ad_ip8() // 3048 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 279 rrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + m_au = m_au + 2; + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=17:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + m_da[rx] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_ais_ad_ip8() // 3050 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_aips_ad_ip8() // 3058 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_pais_ad_ip8() // 3060 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_das_ad_ip8() // 3068 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_dais_ad_ip8() // 3070 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_adr16_ad_ip8() // 3078 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_adr32_ad_ip8() // 3079 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_dpc_ad_ip8() // 307a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_dpci_ad_ip8() // 307b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 158 mrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movea_w_imm16_ad_ip8() // 307c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 279 rrgm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + m_au = m_au + 2; + // 278 rrgl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + // alu r=2 c=1 m=..... i=......f ALU.and_ a=23:m_dt d=-1 + alu_and(high16(m_dt), 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ds_aid_ip8() // 3080 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_as_aid_ip8() // 3088 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ais_aid_ip8() // 3090 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_aips_aid_ip8() // 3098 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_pais_aid_ip8() // 30a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_das_aid_ip8() // 30a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dais_aid_ip8() // 30b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr16_aid_ip8() // 30b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr32_aid_ip8() // 30b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpc_aid_ip8() // 30ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpci_aid_ip8() // 30bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3ab mmrw1 + m_aob = m_da[rx]; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_imm16_aid_ip8() // 30bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fa rmrw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dt; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ds_aipd_ip8() // 30c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_as_aipd_ip8() // 30c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ais_aipd_ip8() // 30d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_aips_aipd_ip8() // 30d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_pais_aipd_ip8() // 30e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_das_aipd_ip8() // 30e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dais_aipd_ip8() // 30f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr16_aipd_ip8() // 30f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr32_aipd_ip8() // 30f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpc_aipd_ip8() // 30fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpci_aipd_ip8() // 30fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3af mmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dbin; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_imm16_aipd_ip8() // 30fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2fe rmiw1 + m_aob = m_da[rx]; + m_ir = m_irc; + m_dbout = m_dt; + m_pc = m_au; + m_au = m_da[rx] + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ds_paid_ip8() // 3100 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_as_paid_ip8() // 3108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ais_paid_ip8() // 3110 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_aips_paid_ip8() // 3118 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_pais_paid_ip8() // 3120 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_das_paid_ip8() // 3128 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dais_paid_ip8() // 3130 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr16_paid_ip8() // 3138 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr32_paid_ip8() // 3139 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpc_paid_ip8() // 313a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpci_paid_ip8() // 313b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38b mmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_imm16_paid_ip8() // 313c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f8 rmmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_da[rx] - 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34b mmmw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_da[rx] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ds_dad_ip8() // 3140 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_as_dad_ip8() // 3148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ais_dad_ip8() // 3150 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_aips_dad_ip8() // 3158 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_pais_dad_ip8() // 3160 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_das_dad_ip8() // 3168 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dais_dad_ip8() // 3170 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr16_dad_ip8() // 3178 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr32_dad_ip8() // 3179 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpc_dad_ip8() // 317a f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpci_dad_ip8() // 317b f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 38a mmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo) + m_da[rx]; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_imm16_dad_ip8() // 317c f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2da rmdw1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_dbin) + m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ds_daid_ip8() // 3180 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_as_daid_ip8() // 3188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_da[ry]; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ais_daid_ip8() // 3190 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_aips_daid_ip8() // 3198 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_pais_daid_ip8() // 31a0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_das_daid_ip8() // 31a8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dais_daid_ip8() // 31b0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr16_daid_ip8() // 31b8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr32_daid_ip8() // 31b9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpc_daid_ip8() // 31ba f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpci_daid_ip8() // 31bb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 298 mmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 + alu_ext(m_aluo); + m_icount -= 2; + // 101 mmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto mmxw3; + else + goto mmxw2; +mmxw2: + // 028 mmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +mmxw3: + // 0e8 mmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto maww2; +maww2: + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_imm16_daid_ip8() // 31bc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1eb rmxw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 109 rmxw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_pc = m_au; + m_au = m_da[rx] + ext32(m_aluo); + if(m_t) + goto rmxw3; + else + goto rmxw2; +rmxw2: + // 128 rmxw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmxw3: + // 1e8 rmxw3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto rmdw2; +rmdw2: + // 2db rmdw2 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_dt; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ds_adr16_ip8() // 31c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_as_adr16_ip8() // 31c8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ais_adr16_ip8() // 31d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_aips_adr16_ip8() // 31d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_pais_adr16_ip8() // 31e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_das_adr16_ip8() // 31e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dais_adr16_ip8() // 31f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr16_adr16_ip8() // 31f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr32_adr16_ip8() // 31f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpc_adr16_ip8() // 31fa ffff +{ + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpci_adr16_ip8() // 31fb ffff +{ + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 388 maww1 + m_aob = m_au; + m_pc = m_au; + m_au = ext32(m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_imm16_adr16_ip8() // 31fc ffff +{ + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2d9 raww1 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = ext32(m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ds_adr32_ip8() // 33c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_as_adr32_ip8() // 33c8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_da[ry]); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_ais_adr32_ip8() // 33d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_aips_adr32_ip8() // 33d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_pais_adr32_ip8() // 33e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_das_adr32_ip8() // 33e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dais_adr32_ip8() // 33f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr16_adr32_ip8() // 33f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_adr32_adr32_ip8() // 33f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpc_adr32_ip8() // 33fa ffff +{ + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_dpci_adr32_ip8() // 33fb ffff +{ + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32b malw1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_aluo); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 32e malw2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_ir = m_irc; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_w_imm16_adr32_ip8() // 33fc ffff +{ + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1ea ralw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bb ralw2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dt); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 389 maww2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_b_ds_ip8() // 4000 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dyl:m_da[ry] d=0 + alu_subx8(m_da[ry], 0x0000); + sr_xnzvc_u(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_b_ais_ip8() // 4010 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_b_aips_ip8() // 4018 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_b_pais_ip8() // 4020 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_b_das_ip8() // 4028 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_b_dais_ip8() // 4030 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=10 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_b_adr16_ip8() // 4038 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_b_adr32_ip8() // 4039 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx8(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_w_ds_ip8() // 4040 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dyl:m_da[ry] d=0 + alu_subx(m_da[ry], 0x0000); + sr_xnzvc_u(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_w_ais_ip8() // 4050 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_w_aips_ip8() // 4058 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_w_pais_ip8() // 4060 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_w_das_ip8() // 4068 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_w_dais_ip8() // 4070 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=10 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_w_adr16_ip8() // 4078 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_w_adr32_ip8() // 4079 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_l_ds_ip8() // 4080 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 137 nnrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dyl:m_da[ry] d=0 + alu_subx(m_da[ry], 0x0000); + sr_xnzvc_u(); + // 15e nnrl2 + set_16l(m_da[ry], m_aluo); + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=18:m_da[ry] d=0 + alu_subc(high16(m_da[ry]), 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_l_ais_ip8() // 4090 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_l_aips_ip8() // 4098 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_l_pais_ip8() // 40a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_l_das_ip8() // 40a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_l_dais_ip8() // 40b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=10 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_l_adr16_ip8() // 40b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::negx_l_adr32_ip8() // 40b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dbin:m_dbin d=0 + alu_subx(m_dbin, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_sr_ds_ip8() // 40c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3a5 strw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 340 strw2 + set_16l(m_da[ry], m_ftu); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_sr_ais_ip8() // 40d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_sr_aips_ip8() // 40d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_sr_pais_ip8() // 40e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_sr_das_ip8() // 40e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_sr_dais_ip8() // 40f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=10 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_sr_adr16_ip8() // 40f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_sr_adr32_ip8() // 40f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3a1 stmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_ftu = m_sr; + // 324 sftm2 + m_au = m_at; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::chk_w_ds_dd_ip8() // 4180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 152 chkr1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_sub(m_da[rx], m_da[ry]); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_ais_dd_ip8() // 4190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_aips_dd_ip8() // 4198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_pais_dd_ip8() // 41a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_das_dd_ip8() // 41a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_dais_dd_ip8() // 41b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_adr16_dd_ip8() // 41b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_adr32_dd_ip8() // 41b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_dpc_dd_ip8() // 41ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_dpci_dd_ip8() // 41bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 151 chkm1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::chk_w_imm16_dd_ip8() // 41bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 152 chkr1 + m_alub = m_da[rx]; + m_au = m_au - 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dtl:m_dt + alu_sub(m_da[rx], m_dt); + sr_nzvc(); + m_icount -= 2; + // 153 chkr2 + m_t = !(m_isr & (SR_V|SR_N)); + m_pc = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=.nzvc i=.l...i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto chkr3; + else + goto trap1; +trap1: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x06); + m_da[16] = m_au; + m_ftu = 0x0018; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; +chkr3: + // 110 chkr3 + m_t = m_isr & SR_N; + m_icount -= 2; + if(m_t) + goto trap1; + else + goto chkr4; +mmrw3: + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +chkr4: + // 150 chkr4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + goto mmrw3; + } +} + +void m68008_device::lea_ais_ad_ip8() // 41d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2f1 leaa1 + m_aob = m_au; + m_ir = m_irc; + m_movemr = m_dbin; + m_pc = m_au; + m_at = m_da[ry]; + m_ftu = m_dbin; + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lea_das_ad_ip8() // 41e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2f2 lead1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // 309 lead2 + m_da[rx] = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lea_dais_ad_ip8() // 41f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1fb leax0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3ea leax1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto leax3; + else + goto leax2; +leax2: + // 130 leax2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto leax4; +leax3: + // 1f0 leax3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto leax4; +leax4: + // 30a leax4 + m_da[rx] = m_au; + m_au = m_pc + 4; + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lea_adr16_ad_ip8() // 41f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 275 laaw1 + m_aob = m_au; + m_da[rx] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lea_adr32_ad_ip8() // 41f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e4 laal1 + m_aob = m_au; + set_16h(m_da[rx], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bd laal2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_da[rx], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lea_dpc_ad_ip8() // 41fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2f2 lead1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // 309 lead2 + m_da[rx] = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lea_dpci_ad_ip8() // 41fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1fb leax0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3ea leax1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto leax3; + else + goto leax2; +leax2: + // 130 leax2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto leax4; +leax3: + // 1f0 leax3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto leax4; +leax4: + // 30a leax4 + m_da[rx] = m_au; + m_au = m_pc + 4; + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_b_ds_ip8() // 4200 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=0 + alu_and8(m_da[ry], 0x0000); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_b_ais_ip8() // 4210 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_b_aips_ip8() // 4218 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and8(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_b_pais_ip8() // 4220 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and8(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_b_das_ip8() // 4228 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_b_dais_ip8() // 4230 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_b_adr16_ip8() // 4238 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_b_adr32_ip8() // 4239 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and8(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_w_ds_ip8() // 4240 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=0 + alu_and(m_da[ry], 0x0000); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_w_ais_ip8() // 4250 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_w_aips_ip8() // 4258 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_w_pais_ip8() // 4260 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_w_das_ip8() // 4268 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_w_dais_ip8() // 4270 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_w_adr16_ip8() // 4278 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_w_adr32_ip8() // 4279 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_l_ds_ip8() // 4280 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 137 nnrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=0 + alu_and(m_da[ry], 0x0000); + sr_nzvc(); + // 15e nnrl2 + set_16l(m_da[ry], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=18:m_da[ry] d=0 + alu_and(high16(m_da[ry]), 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_l_ais_ip8() // 4290 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_l_aips_ip8() // 4298 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_l_pais_ip8() // 42a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_l_das_ip8() // 42a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_l_dais_ip8() // 42b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_l_adr16_ip8() // 42b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::clr_l_adr32_ip8() // 42b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_and(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=0 + alu_and(m_alub, 0x0000); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_b_ds_ip8() // 4400 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dyl:m_da[ry] d=0 + alu_sub8(m_da[ry], 0x0000); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_b_ais_ip8() // 4410 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_b_aips_ip8() // 4418 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_b_pais_ip8() // 4420 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_b_das_ip8() // 4428 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_b_dais_ip8() // 4430 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_b_adr16_ip8() // 4438 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_b_adr32_ip8() // 4439 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub8(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_w_ds_ip8() // 4440 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=0 + alu_sub(m_da[ry], 0x0000); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_w_ais_ip8() // 4450 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_w_aips_ip8() // 4458 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_w_pais_ip8() // 4460 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_w_das_ip8() // 4468 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_w_dais_ip8() // 4470 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_w_adr16_ip8() // 4478 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_w_adr32_ip8() // 4479 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_l_ds_ip8() // 4480 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 137 nnrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dyl:m_da[ry] d=0 + alu_sub(m_da[ry], 0x0000); + sr_xnzvc(); + // 15e nnrl2 + set_16l(m_da[ry], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=18:m_da[ry] d=0 + alu_subc(high16(m_da[ry]), 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_l_ais_ip8() // 4490 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_l_aips_ip8() // 4498 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_l_pais_ip8() // 44a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_l_das_ip8() // 44a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_l_dais_ip8() // 44b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_l_adr16_ip8() // 44b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::neg_l_adr32_ip8() // 44b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=0 + alu_sub(m_dbin, 0x0000); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=0 + alu_subc(m_alub, 0x0000); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_ds_ccr_ip8() // 44c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 301 rstw1 + m_movemr = m_dbin; + m_ftu = m_da[ry]; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_ais_ccr_ip8() // 44d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_aips_ccr_ip8() // 44d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_pais_ccr_ip8() // 44e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_das_ccr_ip8() // 44e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_dais_ccr_ip8() // 44f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_adr16_ccr_ip8() // 44f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_adr32_ccr_ip8() // 44f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_dpc_ccr_ip8() // 44fa ffff +{ + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_dpci_ccr_ip8() // 44fb ffff +{ + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_imm8_ccr_ip8() // 44fc ffff +{ + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 301 rstw1 + m_movemr = m_dbin; + m_ftu = m_dt; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_b_ds_ip8() // 4600 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dyl:m_da[ry] d=0 + alu_not8(m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_b_ais_ip8() // 4610 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_b_aips_ip8() // 4618 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=alub d=-1 + alu_and8x(m_alub, 0xff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_b_pais_ip8() // 4620 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=alub d=-1 + alu_and8x(m_alub, 0xff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_b_das_ip8() // 4628 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_b_dais_ip8() // 4630 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_b_adr16_ip8() // 4638 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_b_adr32_ip8() // 4639 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8x(m_dbin, 0xff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=b....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not8(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_w_ds_ip8() // 4640 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dyl:m_da[ry] d=0 + alu_not(m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_w_ais_ip8() // 4650 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_w_aips_ip8() // 4658 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_w_pais_ip8() // 4660 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_w_das_ip8() // 4668 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_w_dais_ip8() // 4670 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_w_adr16_ip8() // 4678 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_w_adr32_ip8() // 4679 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b8 nnmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.....i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_l_ds_ip8() // 4680 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 137 nnrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dyl:m_da[ry] d=0 + alu_not(m_da[ry]); + sr_nzvc(); + // 15e nnrl2 + set_16l(m_da[ry], m_aluo); + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=18:m_da[ry] d=0 + alu_not(high16(m_da[ry])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_l_ais_ip8() // 4690 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_l_aips_ip8() // 4698 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_l_pais_ip8() // 46a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_l_das_ip8() // 46a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_l_dais_ip8() // 46b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=11 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_l_adr16_ip8() // 46b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::not_l_adr32_ip8() // 46b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2bc nnml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=11 c=2 m=.nzvc i=.l...i. ALU.not_ a=R.dbin:m_dbin d=0 + alu_not(m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15d nnml2 + m_aob = m_at; + m_dbout = m_aluo; + m_au = m_at - 2; + // alu r=11 c=3 m=.nzvc i=.l....f ALU.not_ a=alub d=0 + alu_not(m_alub); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_ds_sr_ip8() // 46c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 301 rstw1 + m_movemr = m_dbin; + m_ftu = m_da[ry]; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_ais_sr_ip8() // 46d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_aips_sr_ip8() // 46d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_pais_sr_ip8() // 46e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_das_sr_ip8() // 46e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_dais_sr_ip8() // 46f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_adr16_sr_ip8() // 46f8 ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_adr32_sr_ip8() // 46f9 ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_dpc_sr_ip8() // 46fa ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_dpci_sr_ip8() // 46fb ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 159 mstw1 + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_i16u_sr_ip8() // 46fc ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 301 rstw1 + m_movemr = m_dbin; + m_ftu = m_dt; + m_au = m_au - 2; + m_icount -= 2; + // 321 stiw4 + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_icount -= 2; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nbcd_b_ds_ip8() // 4800 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 13b nbcr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dyl:m_da[ry] d=0 + alu_sbcd8(m_da[ry], 0x0000); + sr_xnzvc_u(); + // 117 nbcr2 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nbcd_b_ais_ip8() // 4810 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nbcd_b_aips_ip8() // 4818 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nbcd_b_pais_ip8() // 4820 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nbcd_b_das_ip8() // 4828 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nbcd_b_dais_ip8() // 4830 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=9 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nbcd_b_adr16_ip8() // 4838 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nbcd_b_adr32_ip8() // 4839 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 15c nbcm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dbin:m_dbin d=0 + alu_sbcd8(m_dbin, 0x0000); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::swap_ds_ip8() // 4840 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 341 swap1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[ry]; + m_pc = m_au; + set_16h(m_at, m_da[ry]); + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nzvc(); + // 342 swap2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[ry] = merge_16_32(high16(m_at), m_aluo); + m_au = m_au + 2; + // alu r=9 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::pea_ais_ip8() // 4850 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 17c peaa1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[m_sp] - 4; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::pea_das_ip8() // 4868 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 17d pead1 + m_aob = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 17e pead2 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_aluo) + m_at; + // 17f pead3 + m_at = m_au; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::pea_dais_ip8() // 4870 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1ff peax0 + // alu r=9 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3ee peax1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto peax3; + else + goto peax2; +peax2: + // 134 peax2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto peax4; +peax3: + // 1f4 peax3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto peax4; +peax4: + // 218 peax4 + m_ir = m_irc; + m_at = m_au; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_pc + 4; + m_icount -= 2; + // 219 peax5 + m_aob = m_au; + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::pea_adr16_ip8() // 4878 ffff +{ + switch(m_inst_substate) { + case 0: + // 178 paaw1 + m_aob = m_au; + m_pc = m_au; + m_at = ext32(m_dbin); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 10a paaw2 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::pea_adr32_ip8() // 4879 ffff +{ + switch(m_inst_substate) { + case 0: + // 1fa paal1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15f paal2 + m_aob = m_au; + m_pc = m_au; + set_16l(m_at, m_dbin); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 10a paaw2 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 348 mawl3 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::pea_dpc_ip8() // 487a ffff +{ + switch(m_inst_substate) { + case 0: + // 17d pead1 + m_aob = m_au; + m_at = m_pc; + m_au = m_au + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 17e pead2 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_aluo) + m_at; + // 17f pead3 + m_at = m_au; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::pea_dpci_ip8() // 487b ffff +{ + switch(m_inst_substate) { + case 0: + // 1ff peax0 + // alu r=9 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3ee peax1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto peax3; + else + goto peax2; +peax2: + // 134 peax2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto peax4; +peax3: + // 1f4 peax3 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto peax4; +peax4: + // 218 peax4 + m_ir = m_irc; + m_at = m_au; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_pc + 4; + m_icount -= 2; + // 219 peax5 + m_aob = m_au; + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 106 peax6 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ext_w_ds_ip8() // 4880 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 133 nnrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=2 m=.nzvc i=.l...i. ALU.ext a=R.dyl:m_da[ry] d=0 + alu_ext(m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_list_ais_ip8() // 4890 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3a0 stmr1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + // 323 stmr2 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_listp_pais_ip8() // 48a0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3a4 push1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + // 21e push2 + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] - 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + step_movem_predec(); + if(m_t) + goto push3; + else + goto push5; +push5: + // 083 push5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_at = m_au; + m_au = m_au - 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem_predec(); + if(m_t) + goto push3; + else + goto push5; +push3: + // 043 push3 + m_aob = m_pc; + m_ir = m_irc; + m_da[ry] = m_at; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_list_das_ip8() // 48a8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1f1 stmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c9 stmd2 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 322 stmd3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_da[ry] + ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_list_dais_ip8() // 48b0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 325 stmx1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 326 stmx2 + m_pc = m_au; + set_16l(m_at, m_dbin); + m_au = m_au - 2; + // alu r=8 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02f stmx3 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto stmx5; + else + goto stmx4; +stmx4: + // 138 stmx4 + m_t = !m_movemr; + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmx5: + // 1f8 stmx5 + m_t = !m_movemr; + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_list_adr16_ip8() // 48b8 ffff +{ + switch(m_inst_substate) { + case 0: + // 1ed smaw1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c1 smaw2 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 04b smaw3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_list_adr32_ip8() // 48b9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e5 smal1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 112 smal2 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 305 smal3 + m_aob = m_au; + set_16l(m_at, m_dbin); + m_au = m_au + 2; + // 04b smaw3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +stmr5: + // 0a5 stmr5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr5; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ext_l_ds_ip8() // 48c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 232 extr1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=8 c=3 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 233 extr2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[ry] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_list_ais_ip8() // 48d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3a0 stmr1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + // 323 stmr2 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_listp_pais_ip8() // 48e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3a4 push1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + // 21e push2 + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] - 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + step_movem_predec(); + if(m_t) + goto push3; + else + goto push4; +push4: + // 0c3 push4 + m_aob = m_au; + m_dbout = m_da[m_movems]; + m_at = m_au; + m_au = m_au - 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 21f push5 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = high16(m_da[m_movems]); + m_at = m_au; + m_au = m_au - 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem_predec(); + if(m_t) + goto push3; + else + goto push4; +push3: + // 043 push3 + m_aob = m_pc; + m_ir = m_irc; + m_da[ry] = m_at; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_list_das_ip8() // 48e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1f1 stmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c9 stmd2 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 322 stmd3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_da[ry] + ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_list_dais_ip8() // 48f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 325 stmx1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 326 stmx2 + m_pc = m_au; + set_16l(m_at, m_dbin); + m_au = m_au - 2; + // alu r=8 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02f stmx3 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto stmx5; + else + goto stmx4; +stmx4: + // 138 stmx4 + m_t = !m_movemr; + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmx5: + // 1f8 stmx5 + m_t = !m_movemr; + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_list_adr16_ip8() // 48f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 1ed smaw1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c1 smaw2 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 04b smaw3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_list_adr32_ip8() // 48f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e5 smal1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 112 smal2 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 305 smal3 + m_aob = m_au; + set_16l(m_at, m_dbin); + m_au = m_au + 2; + // 04b smaw3 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +stmr4: + // 0e5 stmr4 + m_aob = m_au; + m_dbout = high16(m_da[m_movems]); + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ad stmr6 + m_aob = m_au; + m_t = !m_movemr; + m_dbout = m_da[m_movems]; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + step_movem(); + if(m_t) + goto mmrw2; + else + goto stmr4; +mmrw2: + // 025 mmrw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_b_ds_ip8() // 4a00 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 12d tsrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_b_ais_ip8() // 4a10 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_b_aips_ip8() // 4a18 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_b_pais_ip8() // 4a20 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_b_das_ip8() // 4a28 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_b_dais_ip8() // 4a30 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_b_adr16_ip8() // 4a38 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_b_adr32_ip8() // 4a39 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_w_ds_ip8() // 4a40 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 12d tsrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_w_ais_ip8() // 4a50 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_w_aips_ip8() // 4a58 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_w_pais_ip8() // 4a60 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_w_das_ip8() // 4a68 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_w_dais_ip8() // 4a70 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_w_adr16_ip8() // 4a78 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_w_adr32_ip8() // 4a79 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c3 tsmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_l_ds_ip8() // 4a80 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 125 tsrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + // 362 tsrl2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_l_ais_ip8() // 4a90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_l_aips_ip8() // 4a98 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_l_pais_ip8() // 4aa0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_l_das_ip8() // 4aa8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_l_dais_ip8() // 4ab0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=15 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_l_adr16_ip8() // 4ab8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tst_l_adr32_ip8() // 4ab9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3cb tsml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 361 tsml2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tas_ds_ip8() // 4ac0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 345 tasr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[ry]; + m_pc = m_au; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_or8(m_ftu, m_da[ry]); + // 346 tasr2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_au + 2; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tas_ais_ip8() // 4ad0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tas_aips_ip8() // 4ad8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[m_movems]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tas_pais_ip8() // 4ae0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 3: + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tas_das_ip8() // 4ae8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tas_dais_ip8() // 4af0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[m_movems]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tas_adr16_ip8() // 4af8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::tas_adr32_ip8() // 4af9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[m_movems]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.moveml:m_da[m_movems] d=R.dbin:m_dbin + alu_or8(m_da[m_movems], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0 && access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 343 tasm1 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_or8(m_ftu, m_dbin); + m_icount -= 2; + // 344 tasm2 + m_aob = m_au; + set_8xl(m_dbout, m_aluo); + m_au = m_pc; + // alu r=15 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + sr_nzvc(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + if(!m_tas_write_callback.isnull()) + m_tas_write_callback(m_aob, m_dbout); + else + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_ais_list_ip8() // 4c90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 127 ldmr1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 111 ldmr2 + m_aob = m_da[ry]; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_aips_list_ip8() // 4c98 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 123 popm1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 115 popm2 + m_aob = m_da[ry]; + m_ir = m_irc; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto popm6; + else + goto popm4; +popm4: + // 3ac popm4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto popm6; + else + goto popm4; +popm6: + // 32c popm6 + m_aob = m_pc; + m_da[ry] = m_at; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_das_list_ip8() // 4ca8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1fd ldmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f6 ldmd2 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // 276 ldmd3 + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 237 ldmd4 + m_aob = m_at; + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_dais_list_ip8() // 4cb0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1f5 ldmx0 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 027 ldmx1 + // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02b ldmx2 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto ldmx4; + else + goto ldmx3; +ldmx3: + // 021 ldmx3 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx4: + // 0e1 ldmx4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx5: + // 02e ldmx5 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=0 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 277 ldmx6 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_adr16_list_ip8() // 4cb8 ffff +{ + switch(m_inst_substate) { + case 0: + // 1f9 lmaw1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 30e lmaw2 + m_aob = m_au; + m_dt = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 111 ldmr2 + m_aob = m_dt; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_dt; + m_au = m_dt + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_adr32_list_ip8() // 4cb9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e9 lmal1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0af lmal2 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ee lmal3 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 111 ldmr2 + m_aob = m_dt; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_dt; + m_au = m_dt + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_dpc_list_ip8() // 4cba ffff +{ + switch(m_inst_substate) { + case 0: + // 1fd ldmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f6 ldmd2 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // 276 ldmd3 + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 237 ldmd4 + m_aob = m_at; + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_w_dpci_list_ip8() // 4cbb ffff +{ + switch(m_inst_substate) { + case 0: + // 1f5 ldmx0 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 027 ldmx1 + // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02b ldmx2 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto ldmx4; + else + goto ldmx3; +ldmx3: + // 021 ldmx3 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx4: + // 0e1 ldmx4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx5: + // 02e ldmx5 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=0 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 277 ldmx6 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +ldmr4: + // 3a8 ldmr4 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + m_da[m_movems] = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr4; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_ais_list_ip8() // 4cd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 127 ldmr1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 111 ldmr2 + m_aob = m_da[ry]; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_aips_list_ip8() // 4cd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 123 popm1 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 115 popm2 + m_aob = m_da[ry]; + m_ir = m_irc; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto popm6; + else + goto popm3; +popm3: + // 3ec popm3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f4 popm5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto popm6; + else + goto popm3; +popm6: + // 32c popm6 + m_aob = m_pc; + m_da[ry] = m_at; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_das_list_ip8() // 4ce8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1fd ldmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f6 ldmd2 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // 276 ldmd3 + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 237 ldmd4 + m_aob = m_at; + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_dais_list_ip8() // 4cf0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1f5 ldmx0 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 027 ldmx1 + // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02b ldmx2 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto ldmx4; + else + goto ldmx3; +ldmx3: + // 021 ldmx3 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx4: + // 0e1 ldmx4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx5: + // 02e ldmx5 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 277 ldmx6 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_adr16_list_ip8() // 4cf8 ffff +{ + switch(m_inst_substate) { + case 0: + // 1f9 lmaw1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 30e lmaw2 + m_aob = m_au; + m_dt = ext32(m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 111 ldmr2 + m_aob = m_dt; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_dt; + m_au = m_dt + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_adr32_list_ip8() // 4cf9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e9 lmal1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0af lmal2 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ee lmal3 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 111 ldmr2 + m_aob = m_dt; + m_t = !m_movemr; + m_pc = m_au; + m_at = m_dt; + m_au = m_dt + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_dpc_list_ip8() // 4cfa ffff +{ + switch(m_inst_substate) { + case 0: + // 1fd ldmd1 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 2f6 ldmd2 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // 276 ldmd3 + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 237 ldmd4 + m_aob = m_at; + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::movem_l_dpci_list_ip8() // 4cfb ffff +{ + switch(m_inst_substate) { + case 0: + // 1f5 ldmx0 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 027 ldmx1 + // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 02b ldmx2 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto ldmx4; + else + goto ldmx3; +ldmx3: + // 021 ldmx3 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx4: + // 0e1 ldmx4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + goto ldmx5; +ldmx5: + // 02e ldmx5 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 277 ldmx6 + m_t = !m_movemr; + m_pc = m_au; + m_au = m_at + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +ldmr3: + // 3e8 ldmr3 + m_aob = m_au; + set_16h(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f0 ldmr5 + m_aob = m_au; + m_t = !m_movemr; + m_at = m_au; + set_16l(m_da[m_movems], m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + if(m_t) + goto mmaw2; + else + goto ldmr3; +mmaw2: + // 328 mmaw2 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::trap_imm4_ip8() // 4e40 fff0 +{ + switch(m_inst_substate) { + case 0: + // 1d0 trap1 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 347 trap2 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook((0x80 | ((m_ird & 0xf) << 2)) >> 2); + m_da[16] = m_au; + m_ftu = 0x80 | ((m_ird & 0xf) << 2); + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::link_as_imm16_ip8() // 4e50 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 30b link1 + m_aob = m_au; + m_at = m_da[ry]; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ayl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 2b5 link2 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 30c link3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = high16(m_at); + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 30d link4 + m_aob = m_au; + m_dbout = m_aluo; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 349 mmiw2 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[m_sp] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::unlk_as_ip8() // 4e58 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 119 unlk1 + m_aob = m_da[ry]; + m_pc = m_au; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + step_movem(); + // 1fe unlk2 + m_aob = m_au; + m_ir = m_irc; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 27c unlk3 + m_aob = m_pc; + m_da[m_sp] = m_au; + m_au = m_pc + 2; + // 27d unlk4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[ry] = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_as_usp_ip8() // 4e60 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 2f5 lusp1 + m_aob = m_au; + m_ir = m_irc; + m_movemr = m_dbin; + m_pc = m_au; + m_at = m_da[ry]; + m_ftu = m_dbin; + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[15] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::move_usp_as_ip8() // 4e68 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 230 susp1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[15]; + m_at = m_da[15]; + m_au = m_da[ry]; + // 233 extr2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[ry] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::reset_ip8() // 4e70 ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 3a6 rset1 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + m_icount -= 2; + // 27b rset2 + m_ir = m_irc; + m_au = ext32(m_aluo) - 2; + m_icount -= 2; + m_reset_cb(1); + goto rset3; +rset3: + // 0e4 rset3 + m_au = m_au - 2; + m_icount -= 2; + // 114 rset4 + m_t = !(m_au & 0x3f); + m_icount -= 2; + if(m_t) + goto rset5; + else + goto rset3; +rset5: + m_reset_cb(0); + // 064 rset5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::nop_ip8() // 4e71 ffff +{ + switch(m_inst_substate) { + case 0: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::stop_i16u_ip8() // 4e72 ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 3a2 stop1 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=0 + alu_and(m_dbin, 0x0000); + m_icount -= 2; + // 327 aaa01 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_au = m_au - 2; + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + return; + } +} + +void m68008_device::rte_ip8() // 4e73 ffff +{ + switch(m_inst_substate) { + case 0: + if(!(m_sr & SR_S)) { + m_inst_state = S_PRIVILEDGE; + return; + } + // 12a rtr1 + if(!m_rte_instr_callback.isnull()) (m_rte_instr_callback)(1); + m_aob = m_da[m_sp]; + m_au = m_da[m_sp] + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 12b rtr2 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c5 rtr3 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 302 rtr4 + set_16h(m_at, m_dbin); + m_da[m_sp] = m_au; + m_sr = m_isr = m_ftu & (SR_CCR|SR_SR); + update_user_super(); + update_interrupt(); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b3 jmal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rts_ip8() // 4e75 ffff +{ + switch(m_inst_substate) { + case 0: + // 126 rts1 + m_aob = m_da[m_sp]; + m_au = m_da[m_sp] + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 116 rts2 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 303 rts3 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_da[m_sp] = m_au; + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::trapv_ip8() // 4e76 ffff +{ + switch(m_inst_substate) { + case 0: + // 06d trpv1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_isr & SR_V; + m_alub = m_dbin; + m_ftu = m_sr; + if(m_t) + goto trpv3; + else + goto trpv2; +trpv2: + // 0e2 trpv2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_pc = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +trpv3: + // 022 trpv3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_au = m_da[16] - 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x07); + m_da[16] = m_au; + m_ftu = 0x001c; + m_au = m_au + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rtr_ip8() // 4e77 ffff +{ + switch(m_inst_substate) { + case 0: + // 12a rtr1 + m_aob = m_da[m_sp]; + m_au = m_da[m_sp] + 2; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 12b rtr2 + m_aob = m_au; + m_movemr = m_dbin; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 3c5 rtr3 + m_aob = m_au; + m_at = ext32(m_dbin); + m_au = m_au + 2; + // 302 rtr4 + set_16h(m_at, m_dbin); + m_da[m_sp] = m_au; + m_sr = m_isr = (m_ftu & SR_CCR) | (m_sr & SR_SR); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b3 jmal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jsr_ais_ip8() // 4e90 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 273 jsra1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jsr_das_ip8() // 4ea8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b0 jsrd1 + m_au = ext32(m_dbin) + m_da[ry]; + m_icount -= 2; + // 274 jsrd2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 2; + // 2b1 jsrd3 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jsr_dais_ip8() // 4eb0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1f3 jsrx0 + // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 2b2 jsrx1 + m_t = m_irc & 0x0800; + m_au = ext32(m_aluo) + m_da[ry]; + m_icount -= 2; + if(m_t) + goto jsrx3; + else + goto jsrx2; +jsrx2: + // 029 jsrx2 + m_au = m_au + ext32(m_da[map_sp(m_irc >> 12)]); + m_icount -= 2; + goto jsrd2; +jsrx3: + // 0e9 jsrx3 + m_au = m_au + m_da[map_sp(m_irc >> 12)]; + m_icount -= 2; + goto jsrd2; +jsrd2: + // 274 jsrd2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 2; + // 2b1 jsrd3 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jsr_adr16_ip8() // 4eb8 ffff +{ + switch(m_inst_substate) { + case 0: + // 293 jsaw0 + m_at = ext32(m_dbin); + m_icount -= 2; + // 270 jsaw1 + m_aob = m_at; + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jsr_adr32_ip8() // 4eb9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1f2 jsal1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 256 jsal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_pc = m_au; + set_16l(m_at, m_dbin); + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jsr_dpc_ip8() // 4eba ffff +{ + switch(m_inst_substate) { + case 0: + // 2b0 jsrd1 + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + // 274 jsrd2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 2; + // 2b1 jsrd3 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jsr_dpci_ip8() // 4ebb ffff +{ + switch(m_inst_substate) { + case 0: + // 1f3 jsrx0 + // alu r=0 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 2b2 jsrx1 + m_t = m_irc & 0x0800; + m_au = ext32(m_aluo) + m_pc; + m_icount -= 2; + if(m_t) + goto jsrx3; + else + goto jsrx2; +jsrx2: + // 029 jsrx2 + m_au = m_au + ext32(m_da[map_sp(m_irc >> 12)]); + m_icount -= 2; + goto jsrd2; +jsrx3: + // 0e9 jsrx3 + m_au = m_au + m_da[map_sp(m_irc >> 12)]; + m_icount -= 2; + goto jsrd2; +jsrd2: + // 274 jsrd2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 2; + // 2b1 jsrd3 + m_pc = m_au; + m_au = m_da[m_sp] - 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 271 jsaw2 + m_aob = m_au; + m_dbout = high16(m_pc); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 272 jsaw3 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_pc; + m_au = m_at + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jmp_ais_ip8() // 4ed0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 255 jmpa1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jmp_das_ip8() // 4ee8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2b4 jmpd1 + m_au = ext32(m_dbin) + m_da[ry]; + m_icount -= 2; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jmp_dais_ip8() // 4ef0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1f7 jmpx0 + // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 2b6 jmpx1 + m_t = m_irc & 0x0800; + m_au = ext32(m_aluo) + m_da[ry]; + m_icount -= 2; + if(m_t) + goto jmpx3; + else + goto jmpx2; +jmpx2: + // 02d jmpx2 + m_au = m_au + ext32(m_da[map_sp(m_irc >> 12)]); + m_icount -= 2; + goto bbci3; +jmpx3: + // 0ed jmpx3 + m_au = m_au + m_da[map_sp(m_irc >> 12)]; + m_icount -= 2; + goto bbci3; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jmp_adr16_ip8() // 4ef8 ffff +{ + switch(m_inst_substate) { + case 0: + // 297 jmaw1 + m_at = ext32(m_dbin); + m_icount -= 2; + // 2b3 jmal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jmp_adr32_ip8() // 4ef9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1f6 jmal1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b3 jmal2 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jmp_dpc_ip8() // 4efa ffff +{ + switch(m_inst_substate) { + case 0: + // 2b4 jmpd1 + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::jmp_dpci_ip8() // 4efb ffff +{ + switch(m_inst_substate) { + case 0: + // 1f7 jmpx0 + // alu r=0 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 2b6 jmpx1 + m_t = m_irc & 0x0800; + m_au = ext32(m_aluo) + m_pc; + m_icount -= 2; + if(m_t) + goto jmpx3; + else + goto jmpx2; +jmpx2: + // 02d jmpx2 + m_au = m_au + ext32(m_da[map_sp(m_irc >> 12)]); + m_icount -= 2; + goto bbci3; +jmpx3: + // 0ed jmpx3 + m_au = m_au + m_da[map_sp(m_irc >> 12)]; + m_icount -= 2; + goto bbci3; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_b_imm3_ds_ip8() // 5000 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2d8 raqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_add8(m_ftu, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_b_imm3_ais_ip8() // 5010 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_b_imm3_aips_ip8() // 5018 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_b_imm3_pais_ip8() // 5020 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_b_imm3_das_ip8() // 5028 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_b_imm3_dais_ip8() // 5030 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_b_imm3_adr16_ip8() // 5038 f1ff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_b_imm3_adr32_ip8() // 5039 f1ff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_ds_ip8() // 5040 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2d8 raqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_add(m_ftu, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_as_ip8() // 5048 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.ftu:m_ftu d=R.ayl:m_da[ry] + alu_add(m_ftu, m_da[ry]); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=23:m_dt d=17:m_da[ry] + alu_addc(high16(m_dt), high16(m_da[ry])); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_ais_ip8() // 5050 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_aips_ip8() // 5058 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_pais_ip8() // 5060 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_das_ip8() // 5068 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_dais_ip8() // 5070 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_adr16_ip8() // 5078 f1ff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_w_imm3_adr32_ip8() // 5079 f1ff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_ds_ip8() // 5080 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_add(m_ftu, m_da[ry]); + sr_xnzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=18:m_da[ry] + alu_addc(high16(m_dt), high16(m_da[ry])); + sr_xnzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_as_ip8() // 5088 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=2 c=2 m=..... i=.l...i. ALU.add a=R.ftu:m_ftu d=R.ayl:m_da[ry] + alu_add(m_ftu, m_da[ry]); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=2 c=3 m=..... i=.l....f ALU.addc a=23:m_dt d=17:m_da[ry] + alu_addc(high16(m_dt), high16(m_da[ry])); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_ais_ip8() // 5090 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_aips_ip8() // 5098 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_pais_ip8() // 50a0 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_das_ip8() // 50a8 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_dais_ip8() // 50b0 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_adr16_ip8() // 50b8 f1ff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addq_l_imm3_adr32_ip8() // 50b9 f1ff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_add(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=R.alue:m_alue + alu_addc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::st_ds_ip8() // 50c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbt_ds_rel16_ip8() // 50c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = 1; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::st_ais_ip8() // 50d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::st_aips_ip8() // 50d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::st_pais_ip8() // 50e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::st_das_ip8() // 50e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::st_dais_ip8() // 50f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::st_adr16_ip8() // 50f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::st_adr32_ip8() // 50f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 1; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_b_imm3_ds_ip8() // 5100 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2d8 raqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_sub8(m_ftu, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_b_imm3_ais_ip8() // 5110 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_b_imm3_aips_ip8() // 5118 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_b_imm3_pais_ip8() // 5120 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_b_imm3_das_ip8() // 5128 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_b_imm3_dais_ip8() // 5130 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_b_imm3_adr16_ip8() // 5138 f1ff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_b_imm3_adr32_ip8() // 5139 f1ff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub8(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_ds_ip8() // 5140 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2d8 raqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_sub(m_ftu, m_da[ry]); + sr_xnzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_as_ip8() // 5148 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.ftu:m_ftu d=R.ayl:m_da[ry] + alu_sub(m_ftu, m_da[ry]); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=23:m_dt d=17:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_ais_ip8() // 5150 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_aips_ip8() // 5158 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_pais_ip8() // 5160 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_das_ip8() // 5168 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_dais_ip8() // 5170 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_adr16_ip8() // 5178 f1ff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_w_imm3_adr32_ip8() // 5179 f1ff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f3 maqw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_ds_ip8() // 5180 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dyl:m_da[ry] + alu_sub(m_ftu, m_da[ry]); + sr_xnzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=18:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + sr_xnzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_as_ip8() // 5188 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 2dc raql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + // alu r=5 c=2 m=..... i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.ayl:m_da[ry] + alu_sub(m_ftu, m_da[ry]); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=5 c=3 m=..... i=.l....f ALU.subc a=23:m_dt d=17:m_da[ry] + alu_subc(high16(m_dt), high16(m_da[ry])); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_ais_ip8() // 5190 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_aips_ip8() // 5198 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_pais_ip8() // 51a0 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_das_ip8() // 51a8 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_dais_ip8() // 51b0 f1f8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_adr16_ip8() // 51b8 f1ff +{ + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subq_l_imm3_adr32_ip8() // 51b9 f1ff +{ + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2f7 maql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dt = ext32(m_ftu); + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ftu:m_ftu d=R.dbin:m_dbin + alu_sub(m_ftu, m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=R.alue:m_alue + alu_subc(high16(m_dt), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sf_ds_ip8() // 51c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbra_ds_rel16_ip8() // 51c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = 0; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::sf_ais_ip8() // 51d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sf_aips_ip8() // 51d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sf_pais_ip8() // 51e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sf_das_ip8() // 51e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sf_dais_ip8() // 51f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sf_adr16_ip8() // 51f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sf_adr32_ip8() // 51f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::shi_ds_ip8() // 52c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbhi_ds_rel16_ip8() // 52c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::shi_ais_ip8() // 52d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::shi_aips_ip8() // 52d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::shi_pais_ip8() // 52e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::shi_das_ip8() // 52e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::shi_dais_ip8() // 52f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::shi_adr16_ip8() // 52f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::shi_adr32_ip8() // 52f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sls_ds_ip8() // 53c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbls_ds_rel16_ip8() // 53c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::sls_ais_ip8() // 53d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sls_aips_ip8() // 53d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sls_pais_ip8() // 53e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sls_das_ip8() // 53e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sls_dais_ip8() // 53f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sls_adr16_ip8() // 53f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sls_adr32_ip8() // 53f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scc_ds_ip8() // 54c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbcc_ds_rel16_ip8() // 54c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = !(m_sr & SR_C); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::scc_ais_ip8() // 54d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scc_aips_ip8() // 54d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scc_pais_ip8() // 54e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scc_das_ip8() // 54e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scc_dais_ip8() // 54f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scc_adr16_ip8() // 54f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scc_adr32_ip8() // 54f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_C); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scs_ds_ip8() // 55c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbcs_ds_rel16_ip8() // 55c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = m_sr & SR_C; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::scs_ais_ip8() // 55d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scs_aips_ip8() // 55d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scs_pais_ip8() // 55e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scs_das_ip8() // 55e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scs_dais_ip8() // 55f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scs_adr16_ip8() // 55f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::scs_adr32_ip8() // 55f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_C; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sne_ds_ip8() // 56c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbne_ds_rel16_ip8() // 56c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = !(m_sr & SR_Z); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::sne_ais_ip8() // 56d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sne_aips_ip8() // 56d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sne_pais_ip8() // 56e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sne_das_ip8() // 56e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sne_dais_ip8() // 56f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sne_adr16_ip8() // 56f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sne_adr32_ip8() // 56f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_Z); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::seq_ds_ip8() // 57c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbeq_ds_rel16_ip8() // 57c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = m_sr & SR_Z; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::seq_ais_ip8() // 57d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::seq_aips_ip8() // 57d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::seq_pais_ip8() // 57e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::seq_das_ip8() // 57e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::seq_dais_ip8() // 57f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::seq_adr16_ip8() // 57f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::seq_adr32_ip8() // 57f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_Z; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svc_ds_ip8() // 58c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbvc_ds_rel16_ip8() // 58c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = !(m_sr & SR_V); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::svc_ais_ip8() // 58d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svc_aips_ip8() // 58d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svc_pais_ip8() // 58e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svc_das_ip8() // 58e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svc_dais_ip8() // 58f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svc_adr16_ip8() // 58f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svc_adr32_ip8() // 58f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svs_ds_ip8() // 59c0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbvs_ds_rel16_ip8() // 59c8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = m_sr & SR_V; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::svs_ais_ip8() // 59d0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svs_aips_ip8() // 59d8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svs_pais_ip8() // 59e0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svs_das_ip8() // 59e8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svs_dais_ip8() // 59f0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svs_adr16_ip8() // 59f8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::svs_adr32_ip8() // 59f9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_V; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::spl_ds_ip8() // 5ac0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbpl_ds_rel16_ip8() // 5ac8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = !(m_sr & SR_N); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::spl_ais_ip8() // 5ad0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::spl_aips_ip8() // 5ad8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::spl_pais_ip8() // 5ae0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::spl_das_ip8() // 5ae8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::spl_dais_ip8() // 5af0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::spl_adr16_ip8() // 5af8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::spl_adr32_ip8() // 5af9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = !(m_sr & SR_N); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::smi_ds_ip8() // 5bc0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbmi_ds_rel16_ip8() // 5bc8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = m_sr & SR_N; + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::smi_ais_ip8() // 5bd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::smi_aips_ip8() // 5bd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::smi_pais_ip8() // 5be0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::smi_das_ip8() // 5be8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::smi_dais_ip8() // 5bf0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::smi_adr16_ip8() // 5bf8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::smi_adr32_ip8() // 5bf9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = m_sr & SR_N; + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sge_ds_ip8() // 5cc0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbge_ds_rel16_ip8() // 5cc8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::sge_ais_ip8() // 5cd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sge_aips_ip8() // 5cd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sge_pais_ip8() // 5ce0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sge_das_ip8() // 5ce8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sge_dais_ip8() // 5cf0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sge_adr16_ip8() // 5cf8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sge_adr32_ip8() // 5cf9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::slt_ds_ip8() // 5dc0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dblt_ds_rel16_ip8() // 5dc8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::slt_ais_ip8() // 5dd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::slt_aips_ip8() // 5dd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::slt_pais_ip8() // 5de0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::slt_das_ip8() // 5de8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::slt_dais_ip8() // 5df0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::slt_adr16_ip8() // 5df8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::slt_adr32_ip8() // 5df9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sgt_ds_ip8() // 5ec0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dbgt_ds_rel16_ip8() // 5ec8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::sgt_ais_ip8() // 5ed0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sgt_aips_ip8() // 5ed8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sgt_pais_ip8() // 5ee0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sgt_das_ip8() // 5ee8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sgt_dais_ip8() // 5ef0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sgt_adr16_ip8() // 5ef8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sgt_adr32_ip8() // 5ef9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sle_ds_ip8() // 5fc0 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 384 sccr1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccr2; + else + goto roaw2; +roaw2: + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +sccr2: + // 0cb sccr2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::dble_ds_rel16_ip8() // 5fc8 fff8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 06c dbcc1 + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = ext32(m_dbin) + m_pc; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_icount -= 2; + if(m_t) + goto dbcc6; + else + goto dbcc2; +dbcc2: + // 046 dbcc2 + m_aob = m_au; + m_alub = m_da[ry]; + m_at = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + // 175 dbcc3 + m_t = m_isr & SR_Z; + m_pc = m_au; + m_au = m_at + 2; + // alu r=15 c=3 m=..... i=....... ALU.add a=alub d=-1 + alu_add(m_alub, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + if(m_t) + goto dbcc5; + else + goto dbcc4; +dbcc6: + // 0c6 dbcc6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc4: + // 0c7 dbcc4 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dbcc5: + // 007 dbcc5 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto dbcc4; + } +} + +void m68008_device::sle_ais_ip8() // 5fd0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sle_aips_ip8() // 5fd8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_dt; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sle_pais_ip8() // 5fe0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_dt; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sle_das_ip8() // 5fe8 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sle_dais_ip8() // 5ff0 fff8 +{ + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=15 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_dt; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sle_adr16_ip8() // 5ff8 ffff +{ + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sle_adr32_ip8() // 5ff9 ffff +{ + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_dt; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=R.dbin:m_dbin + alu_or8(m_dt, m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 380 sccb1 + m_aob = m_au; + m_ir = m_irc; + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_pc = m_au; + // alu r=15 c=1 m=..... i=b...... ALU.and_ a=none d=0 + alu_and8(0x0000, 0x0000); + if(m_t) + goto sccb2; + else + goto sccb3; +sccb3: + // 04f sccb3 + m_pc = m_au; + m_au = m_at; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto morw2; +sccb2: + // 0cf sccb2 + m_au = m_at; + // alu r=15 c=2 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=-1 + alu_or8(m_aluo, 0xff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto morw2; +morw2: + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=15 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bra_rel16_ip8() // 6000 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = 1; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bra_rel8_ip8() // 6000 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = 1; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bsr_rel16_ip8() // 6100 ffff +{ + switch(m_inst_substate) { + case 0: + // 0a9 bsrw1 + m_at = m_au; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[m_sp] - 4; + m_icount -= 2; + // 10e bsrw2 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0aa bsrw3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bsr_rel8_ip8() // 6100 ff00 +{ + switch(m_inst_substate) { + case 0: + // 089 bsri1 + m_at = m_pc; + m_au = m_da[m_sp] - 4; + // alu r=0 c=1 m=..... i=....... ALU.and_ a=R.pcl:m_pc d=-1 + alu_and(m_pc, 0xffff); + m_icount -= 2; + // 102 bsri2 + m_aob = m_au; + m_dbout = high16(m_at); + m_da[m_sp] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 1: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0a8 bsri3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = ext32(m_ftu) + m_pc; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 5: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bhi_rel16_ip8() // 6200 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bhi_rel8_ip8() // 6200 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = (m_sr & (SR_C|SR_Z)) == 0; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bls_rel16_ip8() // 6300 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bls_rel8_ip8() // 6300 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = (m_sr & (SR_C|SR_Z)) != 0; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bcc_rel16_ip8() // 6400 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = !(m_sr & SR_C); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bcc_rel8_ip8() // 6400 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = !(m_sr & SR_C); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bcs_rel16_ip8() // 6500 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = m_sr & SR_C; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bcs_rel8_ip8() // 6500 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = m_sr & SR_C; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bne_rel16_ip8() // 6600 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = !(m_sr & SR_Z); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bne_rel8_ip8() // 6600 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = !(m_sr & SR_Z); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::beq_rel16_ip8() // 6700 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = m_sr & SR_Z; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::beq_rel8_ip8() // 6700 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = m_sr & SR_Z; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bvc_rel16_ip8() // 6800 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = !(m_sr & SR_V); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bvc_rel8_ip8() // 6800 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = !(m_sr & SR_V); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bvs_rel16_ip8() // 6900 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = m_sr & SR_V; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bvs_rel8_ip8() // 6900 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = m_sr & SR_V; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bpl_rel16_ip8() // 6a00 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = !(m_sr & SR_N); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bpl_rel8_ip8() // 6a00 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = !(m_sr & SR_N); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bmi_rel16_ip8() // 6b00 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = m_sr & SR_N; + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bmi_rel8_ip8() // 6b00 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = m_sr & SR_N; + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bge_rel16_ip8() // 6c00 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bge_rel8_ip8() // 6c00 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = ((m_sr & (SR_N|SR_V)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V)) == 0); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::blt_rel16_ip8() // 6d00 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::blt_rel8_ip8() // 6d00 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bgt_rel16_ip8() // 6e00 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::bgt_rel8_ip8() // 6e00 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = ((m_sr & (SR_N|SR_V|SR_Z)) == (SR_N|SR_V)) || ((m_sr & (SR_N|SR_V|SR_Z)) == 0); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ble_rel16_ip8() // 6f00 ffff +{ + switch(m_inst_substate) { + case 0: + // 068 bbcw1 + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = ext32(m_dbin) + m_pc; + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbcw3; +bbcw3: + // 085 bbcw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + // 1e1 malw3 + m_aob = m_au; + m_movemr = m_dbin; + m_pc = m_au; + m_ftu = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ble_rel8_ip8() // 6f00 ff00 +{ + switch(m_inst_substate) { + case 0: + // 308 bbci1 + m_t = (m_sr & SR_Z) || ((m_sr & (SR_N|SR_V)) == SR_N) || ((m_sr & (SR_N|SR_V)) == SR_V); + m_au = m_pc + ext32(m_ftu); + m_icount -= 2; + if(m_t) + goto bbci3; + else + goto bbci2; +bbci2: + // 045 bbci2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + if(m_sr & SR_T) + m_next_state = S_TRACE; + goto b; +bbci3: + // 0c5 bbci3 + m_aob = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + goto b; +b: + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::moveq_imm8o_dd_ip8() // 7000 f100 +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 23b rlql1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_da[rx] = ext32(m_ftu); + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + sr_nzvc(); + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_ds_dd_ip8() // 8000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_or8(m_da[ry], m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_ais_dd_ip8() // 8010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_aips_dd_ip8() // 8018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_pais_dd_ip8() // 8020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_das_dd_ip8() // 8028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dais_dd_ip8() // 8030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_adr16_dd_ip8() // 8038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_adr32_dd_ip8() // 8039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dpc_dd_ip8() // 803a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dpci_dd_ip8() // 803b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_imm8_dd_ip8() // 803c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_or8(m_dt, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_ds_dd_ip8() // 8040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_or(m_da[ry], m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_ais_dd_ip8() // 8050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_aips_dd_ip8() // 8058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_pais_dd_ip8() // 8060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_das_dd_ip8() // 8068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dais_dd_ip8() // 8070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_adr16_dd_ip8() // 8078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_adr32_dd_ip8() // 8079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dpc_dd_ip8() // 807a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dpci_dd_ip8() // 807b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_imm16_dd_ip8() // 807c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_or(m_dt, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_ds_dd_ip8() // 8080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_or(m_da[ry], m_da[rx]); + sr_nzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=18:m_da[ry] d=16:m_da[rx] + alu_or(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_ais_dd_ip8() // 8090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_aips_dd_ip8() // 8098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_pais_dd_ip8() // 80a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_das_dd_ip8() // 80a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dais_dd_ip8() // 80b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_adr16_dd_ip8() // 80b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_adr32_dd_ip8() // 80b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dpc_dd_ip8() // 80ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dpci_dd_ip8() // 80bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_or(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=alub d=16:m_da[rx] + alu_or(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_imm32_dd_ip8() // 80bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_or(m_dt, m_da[rx]); + sr_nzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=23:m_dt d=16:m_da[rx] + alu_or(high16(m_dt), high16(m_da[rx])); + sr_nzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_ds_dd_ip8() // 80c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 0a6 dvur1 + m_alub = m_da[ry]; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_da[ry]); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_ais_dd_ip8() // 80d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_aips_dd_ip8() // 80d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_pais_dd_ip8() // 80e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_das_dd_ip8() // 80e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_dais_dd_ip8() // 80f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=1 c=5 m=..... i=.l.d... ALU.over a=R.dbin:m_dbin d=0 + alu_over(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 45: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + [[fallthrough]]; case 46: + [[fallthrough]]; case 47: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + [[fallthrough]]; case 48: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_adr16_dd_ip8() // 80f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_adr32_dd_ip8() // 80f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 45: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + [[fallthrough]]; case 46: + [[fallthrough]]; case 47: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + [[fallthrough]]; case 48: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_dpc_dd_ip8() // 80fa f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_dpci_dd_ip8() // 80fb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=1 c=5 m=..... i=.l.d... ALU.over a=R.dbin:m_dbin d=0 + alu_over(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 45: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + [[fallthrough]]; case 46: + [[fallthrough]]; case 47: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + [[fallthrough]]; case 48: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0a4 dvum1 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divu_w_imm16_dd_ip8() // 80fc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0a6 dvur1 + m_alub = m_dt; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dt); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 213 dvum2 + m_t = m_isr & SR_Z; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=16:m_da[rx] + alu_sub(m_alub, high16(m_da[rx])); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvur2; + else + goto dvum3; +dvum3: + // 023 dvum3 + m_t = m_isr & SR_C; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum5; + else + goto dvum4; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum5: + // 291 dvum5 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum8: + // 252 dvum8 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvumc; + else + goto dvumb; +dvum7: + // 2d2 dvum7 + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvum9; + else + goto dvum6; +dvumb: + // 3e9 dvumb + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvume; + else + goto dvum6; +dvumc: + // 369 dvumc + m_t = m_isr & SR_C; + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + if(m_t) + goto dvumf; + else + goto dvumd; +dvum6: + // 2d0 dvum6 + m_t = m_isr & SR_N; + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + if(m_t) + goto dvum7; + else + goto dvum8; +dvum9: + // 250 dvum9 + set_16h(m_da[rx], m_aluo); + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aluo:m_aluo d=0 + alu_and(m_aluo, 0x0000); + m_icount -= 2; + goto dvumd; +dvume: + // 290 dvume + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvum5; +dvumd: + // 0c0 dvumd + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + m_au = m_pc + 2; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + goto dvum0; +dvumf: + // 080 dvumf + m_aob = m_pc; + m_ir = m_irc; + m_alub = m_aluo; + set_16h(m_da[rx], m_at); + m_au = m_pc + 2; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + goto dvum0; +dvum0: + // 212 dvum0 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_alue); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.alue:m_alue + alu_sub(m_alub, m_alue); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sbcd_ds_dd_ip8() // 8100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1cd rbrb1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sbcd8(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 11b rbrb2 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 238 rbrb3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sbcd_pais_paid_ip8() // 8108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 107 asbb1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 135 asbb2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 136 asbb3 + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 04e asbb4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + m_dbin = m_edb; + // 040 asbb5 + m_aob = m_pc; + // alu r=9 c=2 m=xnzvc i=b....i. ALU.sbcd a=alub d=R.dbin:m_dbin + alu_sbcd8(m_alub, m_dbin); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=9 c=3 m=xnzvc i=b.....f ALU.sbcd a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dd_ais_ip8() // 8110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dd_aips_ip8() // 8118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dd_pais_ip8() // 8120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dd_das_ip8() // 8128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dd_dais_ip8() // 8130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dd_adr16_ip8() // 8138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_b_dd_adr32_ip8() // 8139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=b....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dd_ais_ip8() // 8150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dd_aips_ip8() // 8158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dd_pais_ip8() // 8160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dd_das_ip8() // 8168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dd_dais_ip8() // 8170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dd_adr16_ip8() // 8178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_w_dd_adr32_ip8() // 8179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=14 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.....i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dd_ais_ip8() // 8190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dd_aips_ip8() // 8198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dd_pais_ip8() // 81a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dd_das_ip8() // 81a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dd_dais_ip8() // 81b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dd_adr16_ip8() // 81b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::or_l_dd_adr32_ip8() // 81b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=14 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=14 c=2 m=.nzvc i=.l...i. ALU.or_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_or(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=14 c=3 m=.nzvc i=.l....f ALU.or_ a=16:m_da[rx] d=R.alue:m_alue + alu_or(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::divs_w_ds_dd_ip8() // 81c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 0ae dvs02 + m_alub = m_da[ry]; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_da[ry]); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_ais_dd_ip8() // 81d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_aips_dd_ip8() // 81d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_pais_dd_ip8() // 81e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_das_dd_ip8() // 81e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_dais_dd_ip8() // 81f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=1 c=5 m=..... i=.l.d... ALU.over a=R.dbin:m_dbin d=0 + alu_over(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 45: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + [[fallthrough]]; case 46: + [[fallthrough]]; case 47: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + [[fallthrough]]; case 48: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_adr16_dd_ip8() // 81f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_adr32_dd_ip8() // 81f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 29: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 45: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + [[fallthrough]]; case 46: + [[fallthrough]]; case 47: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + [[fallthrough]]; case 48: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_dpc_dd_ip8() // 81fa f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_dpci_dd_ip8() // 81fb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=1 c=5 m=..... i=.l.d... ALU.over a=R.dbin:m_dbin d=0 + alu_over(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 45: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 45; + } else + m_inst_substate = 46; + return; + } + [[fallthrough]]; case 46: + [[fallthrough]]; case 47: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 47; + } else + m_inst_substate = 48; + return; + } + [[fallthrough]]; case 48: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ac dvs01 + m_alub = m_dbin; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dbin); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 41: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 41; + } else + m_inst_substate = 42; + return; + } + [[fallthrough]]; case 42: + [[fallthrough]]; case 43: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 43; + } else + m_inst_substate = 44; + return; + } + [[fallthrough]]; case 44: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::divs_w_imm16_dd_ip8() // 81fc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 0ae dvs02 + m_alub = m_dt; + m_alue = m_da[rx]; + m_pc = m_au; + set_16h(m_at, m_dt); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.dtl:m_dt d=-1 + alu_and(m_dt, 0xffff); + sr_nzvc(); + m_icount -= 2; + // 0c9 dvs03 + m_t = (m_isr & SR_Z) ? 2 : (m_isr & SR_N) ? 1 : 0; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + if(m_t == 0) + goto dvs04; + else if(m_t == 1) + goto dvs05; + else + goto dvur2; +dvs04: + // 0a3 dvs04 + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvs05: + // 063 dvs05 + m_alub = m_aluo; + set_16l(m_at, high16(m_da[rx])); + m_au = merge_16_32(0, m_ftu) + 1; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs06; +dvur2: + // 0e3 dvur2 + m_ftu = m_sr; + m_au = m_pc - 2; + m_icount -= 2; + // 217 dvur3 + m_sr = (m_sr & ~SR_T) | SR_S; + update_user_super(); + update_interrupt(); + m_pc = m_au; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.aul:m_au d=-1 + alu_and(m_au, 0xffff); + m_au = m_da[16] - 2; + m_icount -= 2; + // 3c2 trap3 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.ftu:m_ftu d=-1 + alu_and(m_ftu, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 360 trap4 + m_aob = m_au; + m_dbout = m_aluo; + debugger_exception_hook(0x05); + m_da[16] = m_au; + m_ftu = 0x0014; + m_au = m_au + 2; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=R.pch:m_pc d=-1 + alu_and(high16(m_pc), 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 0ef trap5 + m_aob = m_au; + m_dbout = m_aluo; + m_at = ext32(m_ftu); + m_au = m_au - 4; + // alu r=1 c=1 m=..... i=.l.d... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 367 trap6 + m_aob = m_at; + m_pc = m_at; + m_au = m_at + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 11a trap7 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 29: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 29; + } else + m_inst_substate = 30; + return; + } + [[fallthrough]]; case 30: + [[fallthrough]]; case 31: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 31; + } else + m_inst_substate = 32; + return; + } + [[fallthrough]]; case 32: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 2b7 trap8 + m_aob = merge_16_32(high16(m_at), m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin) + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 33: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 33; + } else + m_inst_substate = 34; + return; + } + [[fallthrough]]; case 34: + [[fallthrough]]; case 35: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 35; + } else + m_inst_substate = 36; + return; + } + [[fallthrough]]; case 36: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + // 11c trap9 + m_icount -= 2; + // 363 b + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // 34c mmrw3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 37: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 37; + } else + m_inst_substate = 38; + return; + } + [[fallthrough]]; case 38: + [[fallthrough]]; case 39: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 39; + } else + m_inst_substate = 40; + return; + } + [[fallthrough]]; case 40: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs06: + // 176 dvs06 + m_t = m_isr & SR_N; + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.dxl:m_da[rx] d=0 + alu_sub(m_da[rx], 0x0000); + m_icount -= 2; + if(m_t) + goto dvs10; + else + goto dvs07; +dvs07: + // 042 dvs07 + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.atl:m_at + alu_sub(m_alub, m_at); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs10: + // 0c2 dvs10 + m_alue = m_aluo; + // alu r=1 c=3 m=..... i=.l.d... ALU.subc a=16:m_da[rx] d=0 + alu_subc(high16(m_da[rx]), 0x0000); + m_icount -= 2; + // 177 dvs11 + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + goto dvs08; +dvs08: + // 216 dvs08 + m_t = m_isr & SR_C; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs09; + else + goto dvumz; +dvumz: + // 2d5 dvumz + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs09: + // 295 dvs09 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs0c; +dvuma: + // 0e6 dvuma + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=1 c=5 m=.nzvc i=.l.d.i. ALU.over a=none d=none + alu_over(0x0000); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvs0c: + // 2d6 dvs0c + m_t = !(m_au & 0x3f); + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs0e; + else + goto dvs0d; +dvs0d: + // 3ed dvs0d + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs0f; + else + goto dvs0a; +dvs0e: + // 32d dvs0e + m_t = m_isr & SR_C; + m_icount -= 2; + if(m_t) + goto dvs12; + else + goto dvs13; +dvs0a: + // 2d4 dvs0a + m_au = m_au - 1; + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs0c; +dvs0f: + // 294 dvs0f + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.atl:m_at d=-1 + alu_and(m_at, 0xffff); + sr_nzvc(); + m_icount -= 2; + goto dvs09; +dvs13: + // 254 dvs13 + set_16l(m_at, m_aluo); + // alu r=1 c=6 m=..... i=.l.d... ALU.sla1 a=R.aluo:m_aluo d=-1 + alu_sla1(m_aluo); + m_icount -= 2; + goto dvs14; +dvs12: + // 214 dvs12 + m_au = m_au - 1; + // alu r=1 c=4 m=..... i=.l.d... ALU.sla0 a=R.aluo:m_aluo d=-1 + alu_sla0(m_aluo); + m_icount -= 2; + goto dvs14; +dvs14: + // 210 dvs14 + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.ath:m_at d=-1 + alu_and(high16(m_at), 0xffff); + sr_nzvc(); + m_icount -= 2; + // 211 dvs15 + m_t = m_isr & SR_N; + m_alub = m_alue; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=16:m_da[rx] d=-1 + alu_and(high16(m_da[rx]), 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1d; + else + goto dvs16; +dvs16: + // 041 dvs16 + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1a; + else + goto dvs17; +dvs1d: + // 0c1 dvs1d + m_t = m_isr & SR_N; + set_16h(m_at, m_at); + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto dvs1e; + else + goto dvs1f; +dvs17: + // 04d dvs17 + m_aob = m_pc; + m_ir = m_irc; + m_t = m_isr & SR_N; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto dvuma; + else + goto leaa2; +dvs1a: + // 0cd dvs1a + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 0ce dvs1b + m_t = (m_isr & (SR_Z|SR_N)) != 0; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvs1c; + else + goto dvum4; +dvs1f: + // 08a dvs1f + m_ir = m_irc; + // alu r=1 c=2 m=.nzvc i=.l.d.i. ALU.sub a=alub d=0 + alu_sub(m_alub, 0x0000); + sr_nzvc(); + m_icount -= 2; + // 049 dvs20 + m_aob = m_pc; + m_t = (m_isr & (SR_Z|SR_N)) != 0; + set_16l(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc(); + if(m_t) + goto leaa2; + else + goto dvuma; +dvs1e: + // 0ca dvs1e + m_t = m_isr & SR_N; + m_alub = m_aluo; + set_16l(m_at, m_aluo); + // alu r=1 c=2 m=..... i=.l.d... ALU.sub a=R.ath:m_at d=0 + alu_sub(high16(m_at), 0x0000); + m_icount -= 2; + if(m_t) + goto dvum4; + else + goto dvs1c; +leaa2: + // 066 leaa2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_at; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +dvum4: + // 2d1 dvum4 + m_aob = m_pc; + m_ir = m_irc; + m_au = m_pc + 2; + goto dvuma; +dvs1c: + // 251 dvs1c + m_aob = m_pc; + m_ir = m_irc; + set_16h(m_at, m_aluo); + m_au = m_pc + 2; + // alu r=1 c=1 m=.nzvc i=.l.d.i. ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nzvc(); + goto leaa2; + } +} + +void m68008_device::sub_b_ds_dd_ip8() // 9000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub8(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_ais_dd_ip8() // 9010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_aips_dd_ip8() // 9018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_pais_dd_ip8() // 9020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_das_dd_ip8() // 9028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dais_dd_ip8() // 9030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_adr16_dd_ip8() // 9038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_adr32_dd_ip8() // 9039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dpc_dd_ip8() // 903a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dpci_dd_ip8() // 903b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_imm8_dd_ip8() // 903c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub8(m_dt, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_ds_dd_ip8() // 9040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_as_dd_ip8() // 9048 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_ais_dd_ip8() // 9050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_aips_dd_ip8() // 9058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_pais_dd_ip8() // 9060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_das_dd_ip8() // 9068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dais_dd_ip8() // 9070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_adr16_dd_ip8() // 9078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_adr32_dd_ip8() // 9079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dpc_dd_ip8() // 907a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dpci_dd_ip8() // 907b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_imm16_dd_ip8() // 907c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_ds_dd_ip8() // 9080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=18:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_as_dd_ip8() // 9088 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=17:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_ais_dd_ip8() // 9090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_aips_dd_ip8() // 9098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_pais_dd_ip8() // 90a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_das_dd_ip8() // 90a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dais_dd_ip8() // 90b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_adr16_dd_ip8() // 90b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_adr32_dd_ip8() // 90b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dpc_dd_ip8() // 90ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dpci_dd_ip8() // 90bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_imm32_dd_ip8() // 90bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=23:m_dt d=16:m_da[rx] + alu_subc(high16(m_dt), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_ds_ad_ip8() // 90c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_as_ad_ip8() // 90c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_ais_ad_ip8() // 90d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_aips_ad_ip8() // 90d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_pais_ad_ip8() // 90e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_das_ad_ip8() // 90e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_dais_ad_ip8() // 90f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_adr16_ad_ip8() // 90f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_adr32_ad_ip8() // 90f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_dpc_ad_ip8() // 90fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_dpci_ad_ip8() // 90fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_w_imm16_ad_ip8() // 90fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subx_b_ds_dd_ip8() // 9100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_subx8(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subx_b_pais_paid_ip8() // 9108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 10f asxw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 131 asxw2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 132 asxw3 + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 04a asxw4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + m_dbin = m_edb; + // 065 asxw5 + m_aob = m_pc; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=b....i. ALU.subx a=alub d=R.dbin:m_dbin + alu_subx8(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dd_ais_ip8() // 9110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dd_aips_ip8() // 9118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dd_pais_ip8() // 9120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dd_das_ip8() // 9128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dd_dais_ip8() // 9130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dd_adr16_ip8() // 9138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_b_dd_adr32_ip8() // 9139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=b....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subx_w_ds_dd_ip8() // 9140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_subx(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subx_w_pais_paid_ip8() // 9148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 10f asxw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 131 asxw2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 132 asxw3 + m_au = m_da[rx] - 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 04a asxw4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 065 asxw5 + m_aob = m_pc; + m_au = m_at; + // alu r=10 c=2 m=xnzvc i=.....i. ALU.subx a=alub d=R.dbin:m_dbin + alu_subx(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dd_ais_ip8() // 9150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dd_aips_ip8() // 9158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dd_pais_ip8() // 9160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dd_das_ip8() // 9168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dd_dais_ip8() // 9170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dd_adr16_ip8() // 9178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_w_dd_adr32_ip8() // 9179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.....i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subx_l_ds_dd_ip8() // 9180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_subx(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=18:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::subx_l_pais_paid_ip8() // 9188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 10b asxl1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 048 asxl2 + m_aob = m_au; + m_alub = m_dbin; + m_au = m_au - 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 139 asxl3 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 13a asxl4 + m_au = m_da[rx] - 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 04c asxl5 + m_aob = m_au; + m_alub = m_dbin; + m_au = m_au - 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 047 asxl6 + m_aob = m_au; + m_at = m_au; + m_da[rx] = m_au; + m_au = m_au + 2; + // alu r=10 c=2 m=xnzvc i=.l...i. ALU.subx a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_subx(m_aluo, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 061 asxl7 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = ext32(m_dbin); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 062 asxl8 + m_aob = m_pc; + m_au = m_at; + // alu r=10 c=3 m=xnzvc i=.l....f ALU.subc a=alub d=R.dbin:m_dbin + alu_subc(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dd_ais_ip8() // 9190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dd_aips_ip8() // 9198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dd_pais_ip8() // 91a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dd_das_ip8() // 91a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dd_dais_ip8() // 91b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dd_adr16_ip8() // 91b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::sub_l_dd_adr32_ip8() // 91b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=5 c=2 m=xnzvc i=.l...i. ALU.sub a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_sub(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=5 c=3 m=xnzvc i=.l....f ALU.subc a=16:m_da[rx] d=R.alue:m_alue + alu_subc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_ds_ad_ip8() // 91c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=18:m_da[ry] d=15:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_as_ad_ip8() // 91c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=17:m_da[ry] d=15:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_ais_ad_ip8() // 91d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_aips_ad_ip8() // 91d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_pais_ad_ip8() // 91e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_das_ad_ip8() // 91e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_dais_ad_ip8() // 91f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_adr16_ad_ip8() // 91f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_adr32_ad_ip8() // 91f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_dpc_ad_ip8() // 91fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_dpci_ad_ip8() // 91fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=5 c=3 m=..... i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::suba_l_imm32_ad_ip8() // 91fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=5 c=2 m=..... i=.....i. ALU.sub a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=5 c=3 m=..... i=......f ALU.subc a=23:m_dt d=15:m_da[rx] + alu_subc(high16(m_dt), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_ds_dd_ip8() // b000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub8(m_da[ry], m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_ais_dd_ip8() // b010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_aips_dd_ip8() // b018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_pais_dd_ip8() // b020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_das_dd_ip8() // b028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_dais_dd_ip8() // b030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_adr16_dd_ip8() // b038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_adr32_dd_ip8() // b039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_dpc_dd_ip8() // b03a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_dpci_dd_ip8() // b03b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub8(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_b_imm8_dd_ip8() // b03c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub8(m_dt, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_ds_dd_ip8() // b040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_as_dd_ip8() // b048 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_ais_dd_ip8() // b050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_aips_dd_ip8() // b058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_pais_dd_ip8() // b060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_das_dd_ip8() // b068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_dais_dd_ip8() // b070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_adr16_dd_ip8() // b078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_adr32_dd_ip8() // b079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_dpc_dd_ip8() // b07a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_dpci_dd_ip8() // b07b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d3 cpmw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_w_imm16_dd_ip8() // b07c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d1 cprw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_nzvc(); + // 23a rcaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_ds_dd_ip8() // b080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=18:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_as_dd_ip8() // b088 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=17:m_da[ry] d=16:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_ais_dd_ip8() // b090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_aips_dd_ip8() // b098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_pais_dd_ip8() // b0a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_das_dd_ip8() // b0a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_dais_dd_ip8() // b0b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_adr16_dd_ip8() // b0b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_adr32_dd_ip8() // b0b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_dpc_dd_ip8() // b0ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_dpci_dd_ip8() // b0bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=16:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmp_l_imm32_dd_ip8() // b0bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=23:m_dt d=16:m_da[rx] + alu_subc(high16(m_dt), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_ds_ad_ip8() // b0c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1d9 cprm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_as_ad_ip8() // b0c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1d9 cprm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_ais_ad_ip8() // b0d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_aips_ad_ip8() // b0d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_pais_ad_ip8() // b0e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_das_ad_ip8() // b0e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_dais_ad_ip8() // b0f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_adr16_ad_ip8() // b0f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_adr32_ad_ip8() // b0f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_dpc_ad_ip8() // b0fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_dpci_ad_ip8() // b0fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cf cpmm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_w_imm16_ad_ip8() // b0fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d9 cprm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_nzvc(); + // 174 cprm2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=R.ath:m_at d=15:m_da[rx] + alu_subc(high16(m_at), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_b_dd_ds_ip8() // b100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor8(m_da[rx], m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpm_b_aips_aipd_ip8() // b108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 06b cmmw1 + m_aob = m_da[ry]; + m_pc = m_au; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 086 cmmw2 + m_at = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 122 cmmw3 + m_aob = m_da[rx]; + m_ir = m_irc; + m_au = m_da[rx] + (rx < 15 ? 1 : 2); + // alu r=6 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + m_dbin = m_edb; + // 170 cmmw4 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=6 c=2 m=.nzvc i=b....i. ALU.sub a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_sub8(m_aluo, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_b_dd_ais_ip8() // b110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_b_dd_aips_ip8() // b118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_b_dd_pais_ip8() // b120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_b_dd_das_ip8() // b128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_b_dd_dais_ip8() // b130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_b_dd_adr16_ip8() // b138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_b_dd_adr32_ip8() // b139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=b....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_w_dd_ds_ip8() // b140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 100 roaw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor(m_da[rx], m_da[ry]); + sr_nzvc(); + // 08b roaw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpm_w_aips_aipd_ip8() // b148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 06b cmmw1 + m_aob = m_da[ry]; + m_pc = m_au; + m_au = m_da[ry] + 2; + // 086 cmmw2 + m_at = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 122 cmmw3 + m_aob = m_da[rx]; + m_ir = m_irc; + m_au = m_da[rx] + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 170 cmmw4 + m_aob = m_pc; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_sub(m_aluo, m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_w_dd_ais_ip8() // b150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_w_dd_aips_ip8() // b158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_w_dd_pais_ip8() // b160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_w_dd_das_ip8() // b168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_w_dd_dais_ip8() // b170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=13 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_w_dd_adr16_ip8() // b178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_w_dd_adr32_ip8() // b179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.....i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_l_dd_ds_ip8() // b180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 10c roal1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dyl:m_da[ry] + alu_eor(m_da[rx], m_da[ry]); + sr_nzvc(); + // 259 roal2 + set_16l(m_da[ry], m_aluo); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25a roal3 + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=18:m_da[ry] + alu_eor(high16(m_da[rx]), high16(m_da[ry])); + sr_nzvc_u(); + m_icount -= 2; + // 25b roal4 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpm_l_aips_aipd_ip8() // b188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 06f cmml1 + m_aob = m_da[ry]; + m_pc = m_au; + m_au = m_da[ry] + 2; + // 08e cmml2 + m_at = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 154 cmml3 + m_aob = m_at; + m_alub = m_dbin; + m_da[ry] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 12e cmml4 + m_aob = m_da[rx]; + m_ir = m_irc; + m_au = m_da[rx] + 2; + // alu r=6 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 155 cmml5 + m_aob = m_au; + m_alue = m_dbin; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 156 cmml6 + m_aob = m_pc; + m_da[rx] = m_au; + m_au = m_pc + 2; + // alu r=6 c=2 m=.nzvc i=.l...i. ALU.sub a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_sub(m_aluo, m_dbin); + sr_nzvc(); + // 157 cmml7 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + // alu r=6 c=3 m=.nzvc i=.l....f ALU.subc a=alub d=R.alue:m_alue + alu_subc(m_alub, m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_l_dd_ais_ip8() // b190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_l_dd_aips_ip8() // b198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_l_dd_pais_ip8() // b1a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_l_dd_das_ip8() // b1a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_l_dd_dais_ip8() // b1b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=13 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_l_dd_adr16_ip8() // b1b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::eor_l_dd_adr32_ip8() // b1b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=13 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=13 c=2 m=.nzvc i=.l...i. ALU.eor a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_eor(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=13 c=3 m=.nzvc i=.l....f ALU.eor a=16:m_da[rx] d=R.alue:m_alue + alu_eor(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_ds_ad_ip8() // b1c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=18:m_da[ry] d=15:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_as_ad_ip8() // b1c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_sub(m_da[ry], m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=17:m_da[ry] d=15:m_da[rx] + alu_subc(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_ais_ad_ip8() // b1d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_aips_ad_ip8() // b1d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_pais_ad_ip8() // b1e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_das_ad_ip8() // b1e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_dais_ad_ip8() // b1f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_adr16_ad_ip8() // b1f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_adr32_ad_ip8() // b1f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_dpc_ad_ip8() // b1fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_dpci_ad_ip8() // b1fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=6 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1d7 cpml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_sub(m_dbin, m_da[rx]); + sr_nzvc(); + // 172 cpml2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=alub d=15:m_da[rx] + alu_subc(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::cmpa_l_imm32_ad_ip8() // b1fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1d5 cprl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=6 c=2 m=.nzvc i=.....i. ALU.sub a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_sub(m_dt, m_da[rx]); + sr_nzvc(); + // 173 cprl2 + // alu r=6 c=3 m=.nzvc i=......f ALU.subc a=23:m_dt d=15:m_da[rx] + alu_subc(high16(m_dt), high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_ds_dd_ip8() // c000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_and8(m_da[ry], m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_ais_dd_ip8() // c010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_aips_dd_ip8() // c018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_pais_dd_ip8() // c020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_das_dd_ip8() // c028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dais_dd_ip8() // c030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_adr16_dd_ip8() // c038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_adr32_dd_ip8() // c039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dpc_dd_ip8() // c03a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dpci_dd_ip8() // c03b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and8(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_imm8_dd_ip8() // c03c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_and8(m_dt, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_ds_dd_ip8() // c040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_and(m_da[ry], m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_ais_dd_ip8() // c050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_aips_dd_ip8() // c058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_pais_dd_ip8() // c060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_das_dd_ip8() // c068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dais_dd_ip8() // c070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_adr16_dd_ip8() // c078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_adr32_dd_ip8() // c079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dpc_dd_ip8() // c07a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dpci_dd_ip8() // c07b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_imm16_dd_ip8() // c07c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_and(m_dt, m_da[rx]); + sr_nzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_ds_dd_ip8() // c080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_and(m_da[ry], m_da[rx]); + sr_nzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=18:m_da[ry] d=16:m_da[rx] + alu_and(high16(m_da[ry]), high16(m_da[rx])); + sr_nzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_ais_dd_ip8() // c090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_aips_dd_ip8() // c098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_pais_dd_ip8() // c0a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_das_dd_ip8() // c0a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dais_dd_ip8() // c0b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_adr16_dd_ip8() // c0b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_adr32_dd_ip8() // c0b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dpc_dd_ip8() // c0ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dpci_dd_ip8() // c0bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_and(m_dbin, m_da[rx]); + sr_nzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=alub d=16:m_da[rx] + alu_and(m_alub, high16(m_da[rx])); + sr_nzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_imm32_dd_ip8() // c0bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_and(m_dt, m_da[rx]); + sr_nzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=23:m_dt d=16:m_da[rx] + alu_and(high16(m_dt), high16(m_da[rx])); + sr_nzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_ds_dd_ip8() // c0c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 15b mulr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_da[ry]; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_ais_dd_ip8() // c0d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_aips_dd_ip8() // c0d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_pais_dd_ip8() // c0e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_das_dd_ip8() // c0e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_dais_dd_ip8() // c0f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=7 c=5 m=..... i=.lm.... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_adr16_dd_ip8() // c0f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_adr32_dd_ip8() // c0f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_dpc_dd_ip8() // c0fa f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_dpci_dd_ip8() // c0fb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=7 c=5 m=..... i=.lm.... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::mulu_w_imm16_dd_ip8() // c0fc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15b mulr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dt; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm3; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : m_alue & 2 ? 1 : 2; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32mu(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else + goto mulm4; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::abcd_ds_dd_ip8() // c100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1cd rbrb1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=3 c=2 m=xnzvc i=b....i. ALU.abcd a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_abcd8(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 11b rbrb2 + m_au = m_at; + // alu r=3 c=3 m=xnzvc i=b.....f ALU.add a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 238 rbrb3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::abcd_pais_paid_ip8() // c108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 107 asbb1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 135 asbb2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=3 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 136 asbb3 + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 04e asbb4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + m_dbin = m_edb; + // 040 asbb5 + m_aob = m_pc; + // alu r=3 c=2 m=xnzvc i=b....i. ALU.abcd a=alub d=R.dbin:m_dbin + alu_abcd8(m_alub, m_dbin); + sr_xnzvc_u(); + // 113 asbb6 + m_au = m_at; + // alu r=3 c=3 m=xnzvc i=b.....f ALU.add a=R.aluo:m_aluo d=? + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dd_ais_ip8() // c110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dd_aips_ip8() // c118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dd_pais_ip8() // c120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dd_das_ip8() // c128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dd_dais_ip8() // c130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dd_adr16_ip8() // c138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_b_dd_adr32_ip8() // c139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=b....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and8(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::exg_dd_ds_ip8() // c140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 3e3 exge1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // 231 exge2 + m_da[rx] = m_au; + m_da[ry] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::exg_ad_as_ip8() // c148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e3 exge1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // 231 exge2 + m_da[rx] = m_au; + m_da[ry] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dd_ais_ip8() // c150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dd_aips_ip8() // c158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dd_pais_ip8() // c160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dd_das_ip8() // c168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dd_dais_ip8() // c170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dd_adr16_ip8() // c178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_w_dd_adr32_ip8() // c179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.....i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::exg_dd_as_ip8() // c188 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 3e3 exge1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = m_da[rx]; + m_au = m_da[ry]; + // 231 exge2 + m_da[rx] = m_au; + m_da[ry] = m_at; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 08d rcal3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dd_ais_ip8() // c190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dd_aips_ip8() // c198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dd_pais_ip8() // c1a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dd_das_ip8() // c1a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dd_dais_ip8() // c1b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dd_adr16_ip8() // c1b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::and_l_dd_adr32_ip8() // c1b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=4 c=2 m=.nzvc i=.l...i. ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=4 c=3 m=.nzvc i=.l....f ALU.and_ a=16:m_da[rx] d=R.alue:m_alue + alu_and(high16(m_da[rx]), m_alue); + sr_nzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::muls_w_ds_dd_ip8() // c1c0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 15b mulr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_da[ry]; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_ais_dd_ip8() // c1d0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_aips_dd_ip8() // c1d8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_pais_dd_ip8() // c1e0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_das_dd_ip8() // c1e8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_dais_dd_ip8() // c1f0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=7 c=5 m=..... i=.lm.... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_adr16_dd_ip8() // c1f8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_adr32_dd_ip8() // c1f9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_dpc_dd_ip8() // c1fa f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_dpci_dd_ip8() // c1fb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=7 c=5 m=..... i=.lm.... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=7 c=1 m=..... i=.lm.... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 15a mulm1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dbin; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::muls_w_imm16_dd_ip8() // c1fc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 15b mulr1 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_da[rx]; + m_alue = m_dt; + m_at = m_au; + m_au = ext32(m_ftu); + // alu r=7 c=1 m=.nzvc i=.lm..i. ALU.and_ a=R.dxl:m_da[rx] d=0 + alu_and(m_da[rx], 0x0000); + sr_nzvc(); + // 3c4 mulm2 + m_t = m_alue & 1; + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto mulm5; + else + goto mulm4; +mulm4: + // 0e0 mulm4 + m_t = !(m_au & 0x3f) ? 0 : (m_alue & 3) == 1 ? 1 : (m_alue & 3) == 2 ? 2 : 3; + set_16l(m_pc, m_at); + m_au = m_au - 1; + // alu r=7 c=4 m=.nzvc i=.lm...f ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32ms(m_aluo); + sr_nzvc_u(); + m_icount -= 2; + if(m_t == 0) + goto mulm6; + else if(m_t == 1) + goto mulm3; + else if(m_t == 2) + goto mulm5; + else + goto mulm4; +mulm5: + // 0a0 mulm5 + // alu r=7 c=2 m=.nzvc i=.lm...f ALU.sub a=alub d=R.aluo:m_aluo + alu_sub(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; +mulm6: + // 020 mulm6 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_pc, high16(m_at)); + m_da[rx] = merge_16_32(m_aluo, m_alue); + m_au = m_at + 2; + // alu r=7 c=1 m=.nzvc i=.lm...f ALU.and_ a=R.aluo:m_aluo d=-1 + alu_and(m_aluo, 0xffff); + sr_nzvc_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; +mulm3: + // 060 mulm3 + // alu r=7 c=3 m=.nzvc i=.lm...f ALU.add a=alub d=R.aluo:m_aluo + alu_add(m_alub, m_aluo); + sr_nzvc_u(); + m_icount -= 2; + goto mulm4; + } +} + +void m68008_device::add_b_ds_dd_ip8() // d000 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_add8(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_ais_dd_ip8() // d010 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_aips_dd_ip8() // d018 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_pais_dd_ip8() // d020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_das_dd_ip8() // d028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dais_dd_ip8() // d030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_adr16_dd_ip8() // d038 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_adr32_dd_ip8() // d039 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dpc_dd_ip8() // d03a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dpci_dd_ip8() // d03b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add8(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_imm8_dd_ip8() // d03c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_add8(m_dt, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_ds_dd_ip8() // d040 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_as_dd_ip8() // d048 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_ais_dd_ip8() // d050 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_aips_dd_ip8() // d058 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_pais_dd_ip8() // d060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_das_dd_ip8() // d068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dais_dd_ip8() // d070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_adr16_dd_ip8() // d078 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_adr32_dd_ip8() // d079 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dpc_dd_ip8() // d07a f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dpci_dd_ip8() // d07b f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c3 romw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_imm16_dd_ip8() // d07c f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_add(m_dt, m_da[rx]); + sr_xnzvc(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_ds_dd_ip8() // d080 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=18:m_da[ry] d=16:m_da[rx] + alu_addc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_as_dd_ip8() // d088 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.ayl:m_da[ry] d=R.dxl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=17:m_da[ry] d=16:m_da[rx] + alu_addc(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_ais_dd_ip8() // d090 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_aips_dd_ip8() // d098 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_pais_dd_ip8() // d0a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_das_dd_ip8() // d0a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dais_dd_ip8() // d0b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_adr16_dd_ip8() // d0b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_adr32_dd_ip8() // d0b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dpc_dd_ip8() // d0ba f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dpci_dd_ip8() // d0bb f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dbin:m_dbin d=R.dxl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + sr_xnzvc(); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=alub d=16:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_imm32_dd_ip8() // d0bc f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dtl:m_dt d=R.dxl:m_da[rx] + alu_add(m_dt, m_da[rx]); + sr_xnzvc(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=23:m_dt d=16:m_da[rx] + alu_addc(high16(m_dt), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_ds_ad_ip8() // d0c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_as_ad_ip8() // d0c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_ais_ad_ip8() // d0d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_aips_ad_ip8() // d0d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = 0; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_pais_ad_ip8() // d0e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_das_ad_ip8() // d0e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_dais_ad_ip8() // d0f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_adr16_ad_ip8() // d0f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_adr32_ad_ip8() // d0f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_dpc_ad_ip8() // d0fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_dpci_ad_ip8() // d0fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = 0; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1c7 romm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_w_imm16_ad_ip8() // d0fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c9 rorm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_add(m_dt, m_da[rx]); + // 3c8 rorm2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25f rorm3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=R.ath:m_at d=15:m_da[rx] + alu_addc(high16(m_at), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addx_b_ds_dd_ip8() // d100 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=12 c=2 m=xnzvc i=b....i. ALU.addx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_addx8(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=b...... ALU.addx a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addx_b_pais_paid_ip8() // d108 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 10f asxw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + // alu r=12 c=0 m=..... i=b...... ALU.addx a=none d=R.dbin:m_dbin + m_icount -= 2; + // 131 asxw2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=12 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 132 asxw3 + m_au = m_da[rx] - (rx < 15 ? 1 : 2); + // alu r=12 c=0 m=..... i=b...... ALU.addx a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 04a asxw4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + // alu r=12 c=0 m=..... i=b...... ALU.addx a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + m_dbin = m_edb; + // 065 asxw5 + m_aob = m_pc; + m_au = m_at; + // alu r=12 c=2 m=xnzvc i=b....i. ALU.addx a=alub d=R.dbin:m_dbin + alu_addx8(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=b...... ALU.addx a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dd_ais_ip8() // d110 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dd_aips_ip8() // d118 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + (ry < 15 ? 1 : 2); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dd_pais_ip8() // d120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - (ry < 15 ? 1 : 2); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 + alu_and8(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 3: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + [[fallthrough]]; case 5: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 7: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dd_das_ip8() // d128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dd_dais_ip8() // d130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dd_adr16_ip8() // d138 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 7: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + [[fallthrough]]; case 9: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_b_dd_adr32_ip8() // d139 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and8(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=b....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add8(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 11: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + [[fallthrough]]; case 13: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8xl(m_dbout, m_aluo); + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addx_w_ds_dd_ip8() // d140 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c1 rorw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=12 c=2 m=xnzvc i=.....i. ALU.addx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_addx(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 27a rrgw2 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=....... ALU.addx a=R.aluo:m_aluo d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addx_w_pais_paid_ip8() // d148 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 10f asxw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + // alu r=12 c=0 m=..... i=....... ALU.addx a=none d=R.dbin:m_dbin + m_icount -= 2; + // 131 asxw2 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=12 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 132 asxw3 + m_au = m_da[rx] - 2; + // alu r=12 c=0 m=..... i=....... ALU.addx a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 04a asxw4 + m_aob = m_au; + m_ir = m_irc; + m_alub = m_dbin; + m_at = m_au; + m_da[rx] = m_au; + // alu r=12 c=0 m=..... i=....... ALU.addx a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 065 asxw5 + m_aob = m_pc; + m_au = m_at; + // alu r=12 c=2 m=xnzvc i=.....i. ALU.addx a=alub d=R.dbin:m_dbin + alu_addx(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=....... ALU.addx a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dd_ais_ip8() // d150 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dd_aips_ip8() // d158 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dd_pais_ip8() // d160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dd_das_ip8() // d168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dd_dais_ip8() // d170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dd_adr16_ip8() // d178 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_w_dd_adr32_ip8() // d179 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 299 morw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.....i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addx_l_ds_dd_ip8() // d180 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=12 c=2 m=xnzvc i=.l...i. ALU.addx a=R.dyl:m_da[ry] d=R.dxl:m_da[rx] + alu_addx(m_da[ry], m_da[rx]); + sr_xnzvc_u(); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=R.aluo:m_aluo + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=12 c=3 m=xnzvc i=.l....f ALU.addx a=18:m_da[ry] d=16:m_da[rx] + alu_addx(high16(m_da[ry]), high16(m_da[rx])); + sr_xnzvc_u(); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::addx_l_pais_paid_ip8() // d188 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 10b asxl1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = 0; + m_au = m_da[ry] - 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=R.dbin:m_dbin + m_icount -= 2; + // 048 asxl2 + m_aob = m_au; + m_alub = m_dbin; + m_au = m_au - 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=R.dbin:m_dbin d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 139 asxl3 + m_aob = m_au; + m_da[ry] = m_au; + // alu r=12 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 13a asxl4 + m_au = m_da[rx] - 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 04c asxl5 + m_aob = m_au; + m_alub = m_dbin; + m_au = m_au - 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=R.dbin:m_dbin d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 047 asxl6 + m_aob = m_au; + m_at = m_au; + m_da[rx] = m_au; + m_au = m_au + 2; + // alu r=12 c=2 m=xnzvc i=.l...i. ALU.addx a=R.aluo:m_aluo d=R.dbin:m_dbin + alu_addx(m_aluo, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 061 asxl7 + m_aob = m_au; + m_ir = m_irc; + m_dbout = m_aluo; + m_au = ext32(m_dbin); + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=R.dbin:m_dbin + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 062 asxl8 + m_aob = m_pc; + m_au = m_at; + // alu r=12 c=3 m=xnzvc i=.l....f ALU.addx a=alub d=R.dbin:m_dbin + alu_addx(m_alub, m_dbin); + sr_xnzvc_u(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 21: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=12 c=0 m=..... i=.l..... ALU.addx a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dd_ais_ip8() // d190 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dd_aips_ip8() // d198 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dd_pais_ip8() // d1a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dd_das_ip8() // d1a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dd_dais_ip8() // d1b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 25: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dd_adr16_ip8() // d1b8 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::add_l_dd_adr32_ip8() // d1b9 f1ff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 29d morl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_at; + // alu r=2 c=2 m=xnzvc i=.l...i. ALU.add a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_add(m_da[rx], m_dbin); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 34d morl2 + m_aob = m_au; + m_dbout = m_aluo; + m_au = m_au - 2; + // alu r=2 c=3 m=xnzvc i=.l....f ALU.addc a=16:m_da[rx] d=R.alue:m_alue + alu_addc(high16(m_da[rx]), m_alue); + sr_xnzvc_u(); + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 21: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 21; + } else + m_inst_substate = 22; + return; + } + [[fallthrough]]; case 22: + [[fallthrough]]; case 23: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 23; + } else + m_inst_substate = 24; + return; + } + [[fallthrough]]; case 24: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 25: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 25; + } else + m_inst_substate = 26; + return; + } + [[fallthrough]]; case 26: + [[fallthrough]]; case 27: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 27; + } else + m_inst_substate = 28; + return; + } + [[fallthrough]]; case 28: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_ds_ad_ip8() // d1c0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dyl:m_da[ry] d=R.axl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=18:m_da[ry] d=15:m_da[rx] + alu_addc(high16(m_da[ry]), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_as_ad_ip8() // d1c8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_da[ry]); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.ayl:m_da[ry] d=R.axl:m_da[rx] + alu_add(m_da[ry], m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=17:m_da[ry] d=15:m_da[rx] + alu_addc(high16(m_da[ry]), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_ais_ad_ip8() // d1d0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00b adrl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_aips_ad_ip8() // d1d8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00f pinl1 + m_aob = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 21a pinl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_au + 2; + // 21b pinl3 + m_da[ry] = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_pais_ad_ip8() // d1e0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 179 pdcl1 + m_au = m_da[ry] - 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_icount -= 2; + // 17a pdcl2 + m_aob = m_au; + m_da[ry] = m_au; + m_au = m_au + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_das_ad_ip8() // d1e8 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_dais_ad_ip8() // d1f0 f1f8 +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_adr16_ad_ip8() // d1f8 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 00e abww1 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_adr32_ad_ip8() // d1f9 f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e6 ablw1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 00d ablw2 + m_aob = m_au; + m_pc = m_au; + m_dcr = 0; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 008 ablw3 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 005 adrl2 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_dpc_ad_ip8() // d1fa f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c6 adsl1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_pc; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_dpci_ad_ip8() // d1fb f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e7 aixw0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e6 aixw1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_pc + ext32(m_aluo); + if(m_t) + goto aixw4; + else + goto aixw2; +aixw2: + // 124 aixw2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +aixw4: + // 1e4 aixw4 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsl2; +adsl2: + // 00c adsl2 + m_aob = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 026 adsl3 + m_aob = m_au; + m_alub = m_dbin; + m_alue = m_dbin; + m_at = m_au; + m_au = m_pc + 4; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 1cb roml1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dbin); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dbin:m_dbin d=R.axl:m_da[rx] + alu_add(m_dbin, m_da[rx]); + // 25c roml2 + set_16l(m_da[rx], m_aluo); + // alu r=2 c=3 m=..... i=......f ALU.addc a=alub d=15:m_da[rx] + alu_addc(m_alub, high16(m_da[rx])); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::adda_l_imm32_ad_ip8() // d1fc f1ff +{ + int rx = map_sp(((m_irdi >> 9) & 7) | 8); + switch(m_inst_substate) { + case 0: + // 0a7 e#l1 + m_aob = m_au; + set_16h(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 0ea e#w1 + m_aob = m_au; + m_pc = m_au; + set_16h(m_at, m_dbin); + set_16l(m_dt, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 1c5 rorl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_at = ext32(m_dt); + // alu r=2 c=2 m=..... i=.....i. ALU.add a=R.dtl:m_dt d=R.axl:m_da[rx] + alu_add(m_dt, m_da[rx]); + // 3c0 rorl2 + set_16l(m_da[rx], m_aluo); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 25e rorl3 + // alu r=2 c=3 m=..... i=......f ALU.addc a=23:m_dt d=15:m_da[rx] + alu_addc(high16(m_dt), high16(m_da[rx])); + m_icount -= 2; + // 25d roml3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16h(m_da[rx], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_b_imm3_ds_ip8() // e000 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=b....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_b_imm3_ds_ip8() // e008 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=b....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_b_imm3_ds_ip8() // e010 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=8 c=1 m=..... i=b...r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_and8x(high16(m_da[ry]), 0xff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=b...ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8x(m_da[ry], 0xff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=b....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_b_imm3_ds_ip8() // e018 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=b....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror8(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_b_dd_ds_ip8() // e020 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=2 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=b....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_b_dd_ds_ip8() // e028 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=5 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=b....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_b_dd_ds_ip8() // e030 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=8 c=1 m=..... i=b...r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_and8x(high16(m_da[ry]), 0xff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=b...ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8x(m_da[ry], 0xff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=b....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_b_dd_ds_ip8() // e038 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=10 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=b....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror8(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_w_imm3_ds_ip8() // e040 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_w_imm3_ds_ip8() // e048 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=5 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_w_imm3_ds_ip8() // e050 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_w_imm3_ds_ip8() // e058 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=10 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_w_dd_ds_ip8() // e060 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=2 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_w_dd_ds_ip8() // e068 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=5 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_w_dd_ds_ip8() // e070 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_w_dd_ds_ip8() // e078 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=10 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_l_imm3_ds_ip8() // e080 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=.l...i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_l_imm3_ds_ip8() // e088 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=.l...i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=5 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_l_imm3_ds_ip8() // e090 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=8 c=1 m=..... i=.l..r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=.l..ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=.l...i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=8 c=1 m=.nz.. i=.l..r.f ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_l_imm3_ds_ip8() // e098 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=.l...i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror32(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=10 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_l_dd_ds_ip8() // e0a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=2 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=2 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=2 c=4 m=xnzvc i=.l...i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=2 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_l_dd_ds_ip8() // e0a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=5 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=5 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=5 c=4 m=xnzvc i=.l...i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=5 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_l_dd_ds_ip8() // e0b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=8 c=1 m=..... i=.l..r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=8 c=1 m=.nzvc i=.l..ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=8 c=4 m=xnzvc i=.l...i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=8 c=1 m=.nz.. i=.l..r.f ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_l_dd_ds_ip8() // e0b8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=10 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=10 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=10 c=4 m=.nzvc i=.l...i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror32(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=10 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_ais_ip8() // e0d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_aips_ip8() // e0d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_pais_ip8() // e0e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_das_ip8() // e0e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_dais_ip8() // e0f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_adr16_ip8() // e0f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asr_adr32_ip8() // e0f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=2 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=2 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=2 c=4 m=xnzvc i=.....i. ALU.asr a=R.aluo:m_aluo d=-1 + alu_asr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_b_imm3_ds_ip8() // e100 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=3 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=b....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_b_imm3_ds_ip8() // e108 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=b....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_b_imm3_ds_ip8() // e110 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_and8x(high16(m_da[ry]), 0xff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=b...ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8x(m_da[ry], 0xff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=b....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_b_imm3_ds_ip8() // e118 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=b....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol8(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_b_dd_ds_ip8() // e120 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=3 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=b....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_b_dd_ds_ip8() // e128 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=4 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=b....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_b_dd_ds_ip8() // e130 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=11 c=1 m=..... i=b...r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_and8x(high16(m_da[ry]), 0xff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=b...ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8x(m_da[ry], 0xff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=b....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl8(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_b_dd_ds_ip8() // e138 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=9 c=1 m=..... i=b...... ALU.and_ a=18:m_da[ry] d=-1 + alu_and8(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=b....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and8(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=b....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol8(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_8(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_w_imm3_ds_ip8() // e140 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=3 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_w_imm3_ds_ip8() // e148 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=4 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_w_imm3_ds_ip8() // e150 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_w_imm3_ds_ip8() // e158 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 381 srrw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=9 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_w_dd_ds_ip8() // e160 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=3 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_w_dd_ds_ip8() // e168 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=4 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_w_dd_ds_ip8() // e170 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_w_dd_ds_ip8() // e178 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 382 sriw1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=9 c=1 m=..... i=....... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 383 srrw2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto nbcr3; + else + goto srrw3; +srrw3: + // 2d3 srrw3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto nbcr3; + else + goto srrw3; +nbcr3: + // 253 nbcr3 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + set_16l(m_da[ry], m_aluo); + m_au = m_pc + 2; + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_l_imm3_ds_ip8() // e180 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=3 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=.l...i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=3 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_l_imm3_ds_ip8() // e188 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=.l...i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=R.alue:m_alue + alu_and(m_aluo, m_alue); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=4 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_l_imm3_ds_ip8() // e190 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=.l..ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=.l...i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=11 c=1 m=.nz.. i=.l..r.f ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_l_imm3_ds_ip8() // e198 f1f8 +{ + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 385 srrl1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_ftu); + // alu r=9 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=.l...i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol32(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=9 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_l_dd_ds_ip8() // e1a0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=3 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=3 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=3 c=4 m=xnzvc i=.l...i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=3 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_l_dd_ds_ip8() // e1a8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=4 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=4 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=4 c=4 m=xnzvc i=.l...i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=R.alue:m_alue + alu_and(m_aluo, m_alue); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=4 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_l_dd_ds_ip8() // e1b0 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=11 c=1 m=..... i=.l..r.. ALU.and_ a=18:m_da[ry] d=-1 + alu_andx(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=11 c=1 m=.nzvc i=.l..ri. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_andx(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=11 c=4 m=xnzvc i=.l...i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl32(m_aluo); + sr_xnzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=11 c=1 m=.nz.. i=.l..r.f ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_l_dd_ds_ip8() // e1b8 f1f8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = m_irdi & 7; + switch(m_inst_substate) { + case 0: + // 386 sril1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = ext32(m_da[rx]); + // alu r=9 c=1 m=..... i=.l..... ALU.and_ a=18:m_da[ry] d=-1 + alu_and(high16(m_da[ry]), 0xffff); + // 387 srrl2 + m_t = !(m_au & 0x3f); + m_alue = m_aluo; + m_au = m_au - 1; + // alu r=9 c=1 m=.nzvc i=.l...i. ALU.and_ a=R.dyl:m_da[ry] d=-1 + alu_and(m_da[ry], 0xffff); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl3: + // 2d7 srrl3 + m_t = !(m_au & 0x3f); + m_au = m_au - 1; + // alu r=9 c=4 m=.nzvc i=.l...i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol32(m_aluo); + sr_nzvc(); + m_icount -= 2; + if(m_t) + goto srrl4; + else + goto srrl3; +srrl4: + // 257 srrl4 + m_alub = m_alue; + m_da[ry] = merge_16_32(m_alue, m_aluo); + m_icount -= 2; + // 306 srrl5 + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_au = m_pc + 2; + // alu r=9 c=1 m=.nz.. i=.l....f ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + sr_nz_u(); + set_ftu_const(); + m_icount -= 2; + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_ais_ip8() // e1d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_aips_ip8() // e1d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_pais_ip8() // e1e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_das_ip8() // e1e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_dais_ip8() // e1f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=3 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_adr16_ip8() // e1f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::asl_adr32_ip8() // e1f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=3 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=3 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=3 c=4 m=xnzvc i=.....i. ALU.asl a=R.aluo:m_aluo d=-1 + alu_asl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_ais_ip8() // e2d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_aips_ip8() // e2d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_pais_ip8() // e2e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_das_ip8() // e2e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_dais_ip8() // e2f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_adr16_ip8() // e2f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsr_adr32_ip8() // e2f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=5 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=5 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=5 c=4 m=xnzvc i=.....i. ALU.lsr a=R.aluo:m_aluo d=-1 + alu_lsr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_ais_ip8() // e3d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_aips_ip8() // e3d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_pais_ip8() // e3e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_das_ip8() // e3e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_dais_ip8() // e3f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=none + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_adr16_ip8() // e3f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::lsl_adr32_ip8() // e3f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dxl:m_da[rx] d=R.dbin:m_dbin + alu_and(m_da[rx], m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=4 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=4 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=4 c=4 m=xnzvc i=.....i. ALU.lsl a=R.aluo:m_aluo d=-1 + alu_lsl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_ais_ip8() // e4d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_aips_ip8() // e4d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_pais_ip8() // e4e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_das_ip8() // e4e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_dais_ip8() // e4f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=8 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_adr16_ip8() // e4f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxr_adr32_ip8() // e4f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=8 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=8 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=8 c=4 m=xnzvc i=.....i. ALU.roxr a=R.aluo:m_aluo d=-1 + alu_roxr(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_ais_ip8() // e5d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_aips_ip8() // e5d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_pais_ip8() // e5e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=alub d=-1 + alu_andx(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_das_ip8() // e5e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_dais_ip8() // e5f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=11 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_adr16_ip8() // e5f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::roxl_adr32_ip8() // e5f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=11 c=1 m=..... i=....r.. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=11 c=1 m=.nzvc i=....ri. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_andx(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=11 c=4 m=xnzvc i=.....i. ALU.roxl a=R.aluo:m_aluo d=-1 + alu_roxl(m_aluo); + sr_xnzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_ais_ip8() // e6d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_aips_ip8() // e6d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_pais_ip8() // e6e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_das_ip8() // e6e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_dais_ip8() // e6f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=10 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_adr16_ip8() // e6f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::ror_adr32_ip8() // e6f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=10 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=10 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=10 c=4 m=.nzvc i=.....i. ALU.ror a=R.aluo:m_aluo d=-1 + alu_ror(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_ais_ip8() // e7d0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 006 adrw1 + m_aob = m_da[ry]; + m_at = m_da[ry]; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_aips_ip8() // e7d8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 21c pinw1 + m_aob = m_da[ry]; + m_alub = m_dbin; + m_dcr = m_da[rx]; + m_at = m_da[ry]; + m_au = m_da[ry] + 2; + // 21d pinw2 + m_da[ry] = m_au; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_pais_ip8() // e7e0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 103 pdcw1 + m_alub = m_dbin; + m_pc = m_au; + m_dcr = m_da[rx]; + m_au = m_da[ry] - 2; + m_icount -= 2; + // 17b pdcw2 + m_aob = m_au; + m_at = m_au; + m_da[ry] = m_au; + m_au = m_pc; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=alub d=-1 + alu_and(m_alub, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 9: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_das_ip8() // e7e8 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1c2 adsw1 + m_aob = m_au; + m_au = ext32(m_dbin) + m_da[ry]; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_dais_ip8() // e7f0 fff8 +{ + int rx = (m_irdi >> 9) & 7; + int ry = map_sp((m_irdi & 7) | 8); + switch(m_inst_substate) { + case 0: + // 1e3 aixl0 + // alu r=9 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 + alu_ext(m_dbin); + m_icount -= 2; + // 3e2 aixl1 + m_aob = m_au; + m_t = m_irc & 0x0800; + m_au = m_da[ry] + ext32(m_aluo); + if(m_t) + goto aixl5; + else + goto aixl2; +aixl2: + // 120 aixl2 + m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +aixl5: + // 1e0 aixl5 + m_au = m_da[map_sp(m_irc >> 12)] + m_au; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 17: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + step_movem(); + goto adsw2; +adsw2: + // 02a adsw2 + m_aob = m_au; + m_at = m_au; + m_au = m_pc + 4; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + // 024 adrw2 + m_dcr = m_da[rx]; + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_adr16_ip8() // e7f8 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 00a abwl1 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + m_at = ext32(m_dbin); + m_au = ext32(m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 13: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +void m68008_device::rol_adr32_ip8() // e7f9 ffff +{ + int rx = (m_irdi >> 9) & 7; + switch(m_inst_substate) { + case 0: + // 1e2 abll1 + m_aob = m_au; + set_16h(m_at, m_dbin); + m_au = m_au + 2; + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 1: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + return; + } + [[fallthrough]]; case 2: + [[fallthrough]]; case 3: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 3; + } else + m_inst_substate = 4; + return; + } + [[fallthrough]]; case 4: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 009 abll2 + m_aob = m_au; + m_pc = m_au; + m_dcr = m_da[rx]; + set_16l(m_at, m_dbin); + m_au = merge_16_32(high16(m_at), m_dbin); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 5: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } else + m_inst_substate = 6; + return; + } + [[fallthrough]]; case 6: + [[fallthrough]]; case 7: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 7; + } else + m_inst_substate = 8; + return; + } + [[fallthrough]]; case 8: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 004 abll3 + m_aob = m_at; + m_au = m_pc + 2; + // alu r=9 c=1 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + m_base_ssw = SSW_DATA | SSW_R; + [[fallthrough]]; case 9: + m_edb = m_mmu8->read_data(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 9; + } else + m_inst_substate = 10; + return; + } + [[fallthrough]]; case 10: + [[fallthrough]]; case 11: + m_edb |= m_mmu8->read_data(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 11; + } else + m_inst_substate = 12; + return; + } + [[fallthrough]]; case 12: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_dbin = m_edb; + // 3c7 sftm1 + m_aob = m_au; + m_ir = m_irc; + m_pc = m_au; + m_au = m_au + 2; + // alu r=9 c=1 m=.nzvc i=.....i. ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); + sr_nzvc(); + // 304 stmw2 + m_au = m_at; + // alu r=9 c=4 m=.nzvc i=.....i. ALU.rol a=R.aluo:m_aluo d=-1 + alu_rol(m_aluo); + sr_nzvc(); + m_base_ssw = SSW_PROGRAM | SSW_R; + [[fallthrough]]; case 13: + m_edb = m_mmu8->read_program(m_aob & ~1) << 8; + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 13; + } else + m_inst_substate = 14; + return; + } + [[fallthrough]]; case 14: + [[fallthrough]]; case 15: + m_edb |= m_mmu8->read_program(m_aob | 1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 15; + } else + m_inst_substate = 16; + return; + } + [[fallthrough]]; case 16: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + m_irc = m_edb; + m_dbin = m_edb; + // 38d morw2 + m_aob = m_au; + m_ird = m_ir; + if(m_next_state != S_TRACE) m_next_state = m_int_next_state; + m_dbout = m_aluo; + m_au = m_pc + 2; + m_base_ssw = SSW_DATA; + [[fallthrough]]; case 17: + m_mmu8->write_data(m_aob & ~1, m_dbout >> 8); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 17; + } else + m_inst_substate = 18; + return; + } + [[fallthrough]]; case 18: + [[fallthrough]]; case 19: + m_mmu8->write_data(m_aob | 1, m_dbout); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 19; + } else + m_inst_substate = 20; + return; + } + [[fallthrough]]; case 20: + if(m_aob & 1) { + m_icount -= 4; + m_inst_state = S_ADDRESS_ERROR; + m_inst_substate = 0; + return; + } + set_ftu_const(); + m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; + m_inst_substate = 0; + if(m_sr & SR_T) + m_next_state = S_TRACE; + return; + } +} + +const m68008_device::handler8 m68008_device::s_handlers_ip8[] = { + &m68008_device::state_reset_ip8, + &m68008_device::state_bus_error_ip8, + &m68008_device::state_address_error_ip8, + &m68008_device::state_double_fault_ip8, + &m68008_device::state_interrupt_ip8, + &m68008_device::state_trace_ip8, + &m68008_device::state_illegal_ip8, + &m68008_device::state_priviledge_ip8, + &m68008_device::state_linea_ip8, + &m68008_device::state_linef_ip8, + &m68008_device::ori_b_imm8_ds_ip8, + &m68008_device::ori_b_imm8_ais_ip8, + &m68008_device::ori_b_imm8_aips_ip8, + &m68008_device::ori_b_imm8_pais_ip8, + &m68008_device::ori_b_imm8_das_ip8, + &m68008_device::ori_b_imm8_dais_ip8, + &m68008_device::ori_b_imm8_adr16_ip8, + &m68008_device::ori_b_imm8_adr32_ip8, + &m68008_device::ori_imm8_ccr_ip8, + &m68008_device::ori_w_imm16_ds_ip8, + &m68008_device::ori_w_imm16_ais_ip8, + &m68008_device::ori_w_imm16_aips_ip8, + &m68008_device::ori_w_imm16_pais_ip8, + &m68008_device::ori_w_imm16_das_ip8, + &m68008_device::ori_w_imm16_dais_ip8, + &m68008_device::ori_w_imm16_adr16_ip8, + &m68008_device::ori_w_imm16_adr32_ip8, + &m68008_device::ori_i16u_sr_ip8, + &m68008_device::ori_l_imm32_ds_ip8, + &m68008_device::ori_l_imm32_ais_ip8, + &m68008_device::ori_l_imm32_aips_ip8, + &m68008_device::ori_l_imm32_pais_ip8, + &m68008_device::ori_l_imm32_das_ip8, + &m68008_device::ori_l_imm32_dais_ip8, + &m68008_device::ori_l_imm32_adr16_ip8, + &m68008_device::ori_l_imm32_adr32_ip8, + &m68008_device::btst_dd_ds_ip8, + &m68008_device::movep_w_das_dd_ip8, + &m68008_device::btst_dd_ais_ip8, + &m68008_device::btst_dd_aips_ip8, + &m68008_device::btst_dd_pais_ip8, + &m68008_device::btst_dd_das_ip8, + &m68008_device::btst_dd_dais_ip8, + &m68008_device::btst_dd_adr16_ip8, + &m68008_device::btst_dd_adr32_ip8, + &m68008_device::btst_dd_dpc_ip8, + &m68008_device::btst_dd_dpci_ip8, + &m68008_device::btst_dd_imm_ip8, + &m68008_device::bchg_dd_ds_ip8, + &m68008_device::movep_l_das_dd_ip8, + &m68008_device::bchg_dd_ais_ip8, + &m68008_device::bchg_dd_aips_ip8, + &m68008_device::bchg_dd_pais_ip8, + &m68008_device::bchg_dd_das_ip8, + &m68008_device::bchg_dd_dais_ip8, + &m68008_device::bchg_dd_adr16_ip8, + &m68008_device::bchg_dd_adr32_ip8, + &m68008_device::bclr_dd_ds_ip8, + &m68008_device::movep_w_dd_das_ip8, + &m68008_device::bclr_dd_ais_ip8, + &m68008_device::bclr_dd_aips_ip8, + &m68008_device::bclr_dd_pais_ip8, + &m68008_device::bclr_dd_das_ip8, + &m68008_device::bclr_dd_dais_ip8, + &m68008_device::bclr_dd_adr16_ip8, + &m68008_device::bclr_dd_adr32_ip8, + &m68008_device::bset_dd_ds_ip8, + &m68008_device::movep_l_dd_das_ip8, + &m68008_device::bset_dd_ais_ip8, + &m68008_device::bset_dd_aips_ip8, + &m68008_device::bset_dd_pais_ip8, + &m68008_device::bset_dd_das_ip8, + &m68008_device::bset_dd_dais_ip8, + &m68008_device::bset_dd_adr16_ip8, + &m68008_device::bset_dd_adr32_ip8, + &m68008_device::andi_b_imm8_ds_ip8, + &m68008_device::andi_b_imm8_ais_ip8, + &m68008_device::andi_b_imm8_aips_ip8, + &m68008_device::andi_b_imm8_pais_ip8, + &m68008_device::andi_b_imm8_das_ip8, + &m68008_device::andi_b_imm8_dais_ip8, + &m68008_device::andi_b_imm8_adr16_ip8, + &m68008_device::andi_b_imm8_adr32_ip8, + &m68008_device::andi_imm8_ccr_ip8, + &m68008_device::andi_w_imm16_ds_ip8, + &m68008_device::andi_w_imm16_ais_ip8, + &m68008_device::andi_w_imm16_aips_ip8, + &m68008_device::andi_w_imm16_pais_ip8, + &m68008_device::andi_w_imm16_das_ip8, + &m68008_device::andi_w_imm16_dais_ip8, + &m68008_device::andi_w_imm16_adr16_ip8, + &m68008_device::andi_w_imm16_adr32_ip8, + &m68008_device::andi_i16u_sr_ip8, + &m68008_device::andi_l_imm32_ds_ip8, + &m68008_device::andi_l_imm32_ais_ip8, + &m68008_device::andi_l_imm32_aips_ip8, + &m68008_device::andi_l_imm32_pais_ip8, + &m68008_device::andi_l_imm32_das_ip8, + &m68008_device::andi_l_imm32_dais_ip8, + &m68008_device::andi_l_imm32_adr16_ip8, + &m68008_device::andi_l_imm32_adr32_ip8, + &m68008_device::subi_b_imm8_ds_ip8, + &m68008_device::subi_b_imm8_ais_ip8, + &m68008_device::subi_b_imm8_aips_ip8, + &m68008_device::subi_b_imm8_pais_ip8, + &m68008_device::subi_b_imm8_das_ip8, + &m68008_device::subi_b_imm8_dais_ip8, + &m68008_device::subi_b_imm8_adr16_ip8, + &m68008_device::subi_b_imm8_adr32_ip8, + &m68008_device::subi_w_imm16_ds_ip8, + &m68008_device::subi_w_imm16_ais_ip8, + &m68008_device::subi_w_imm16_aips_ip8, + &m68008_device::subi_w_imm16_pais_ip8, + &m68008_device::subi_w_imm16_das_ip8, + &m68008_device::subi_w_imm16_dais_ip8, + &m68008_device::subi_w_imm16_adr16_ip8, + &m68008_device::subi_w_imm16_adr32_ip8, + &m68008_device::subi_l_imm32_ds_ip8, + &m68008_device::subi_l_imm32_ais_ip8, + &m68008_device::subi_l_imm32_aips_ip8, + &m68008_device::subi_l_imm32_pais_ip8, + &m68008_device::subi_l_imm32_das_ip8, + &m68008_device::subi_l_imm32_dais_ip8, + &m68008_device::subi_l_imm32_adr16_ip8, + &m68008_device::subi_l_imm32_adr32_ip8, + &m68008_device::addi_b_imm8_ds_ip8, + &m68008_device::addi_b_imm8_ais_ip8, + &m68008_device::addi_b_imm8_aips_ip8, + &m68008_device::addi_b_imm8_pais_ip8, + &m68008_device::addi_b_imm8_das_ip8, + &m68008_device::addi_b_imm8_dais_ip8, + &m68008_device::addi_b_imm8_adr16_ip8, + &m68008_device::addi_b_imm8_adr32_ip8, + &m68008_device::addi_w_imm16_ds_ip8, + &m68008_device::addi_w_imm16_ais_ip8, + &m68008_device::addi_w_imm16_aips_ip8, + &m68008_device::addi_w_imm16_pais_ip8, + &m68008_device::addi_w_imm16_das_ip8, + &m68008_device::addi_w_imm16_dais_ip8, + &m68008_device::addi_w_imm16_adr16_ip8, + &m68008_device::addi_w_imm16_adr32_ip8, + &m68008_device::addi_l_imm32_ds_ip8, + &m68008_device::addi_l_imm32_ais_ip8, + &m68008_device::addi_l_imm32_aips_ip8, + &m68008_device::addi_l_imm32_pais_ip8, + &m68008_device::addi_l_imm32_das_ip8, + &m68008_device::addi_l_imm32_dais_ip8, + &m68008_device::addi_l_imm32_adr16_ip8, + &m68008_device::addi_l_imm32_adr32_ip8, + &m68008_device::btst_imm8_ds_ip8, + &m68008_device::btst_imm8_ais_ip8, + &m68008_device::btst_imm8_aips_ip8, + &m68008_device::btst_imm8_pais_ip8, + &m68008_device::btst_imm8_das_ip8, + &m68008_device::btst_imm8_dais_ip8, + &m68008_device::btst_imm8_adr16_ip8, + &m68008_device::btst_imm8_adr32_ip8, + &m68008_device::btst_imm8_dpc_ip8, + &m68008_device::btst_imm8_dpci_ip8, + &m68008_device::bchg_imm8_ds_ip8, + &m68008_device::bchg_imm8_ais_ip8, + &m68008_device::bchg_imm8_aips_ip8, + &m68008_device::bchg_imm8_pais_ip8, + &m68008_device::bchg_imm8_das_ip8, + &m68008_device::bchg_imm8_dais_ip8, + &m68008_device::bchg_imm8_adr16_ip8, + &m68008_device::bchg_imm8_adr32_ip8, + &m68008_device::bclr_imm8_ds_ip8, + &m68008_device::bclr_imm8_ais_ip8, + &m68008_device::bclr_imm8_aips_ip8, + &m68008_device::bclr_imm8_pais_ip8, + &m68008_device::bclr_imm8_das_ip8, + &m68008_device::bclr_imm8_dais_ip8, + &m68008_device::bclr_imm8_adr16_ip8, + &m68008_device::bclr_imm8_adr32_ip8, + &m68008_device::bset_imm8_ds_ip8, + &m68008_device::bset_imm8_ais_ip8, + &m68008_device::bset_imm8_aips_ip8, + &m68008_device::bset_imm8_pais_ip8, + &m68008_device::bset_imm8_das_ip8, + &m68008_device::bset_imm8_dais_ip8, + &m68008_device::bset_imm8_adr16_ip8, + &m68008_device::bset_imm8_adr32_ip8, + &m68008_device::eori_b_imm8_ds_ip8, + &m68008_device::eori_b_imm8_ais_ip8, + &m68008_device::eori_b_imm8_aips_ip8, + &m68008_device::eori_b_imm8_pais_ip8, + &m68008_device::eori_b_imm8_das_ip8, + &m68008_device::eori_b_imm8_dais_ip8, + &m68008_device::eori_b_imm8_adr16_ip8, + &m68008_device::eori_b_imm8_adr32_ip8, + &m68008_device::eori_imm8_ccr_ip8, + &m68008_device::eori_w_imm16_ds_ip8, + &m68008_device::eori_w_imm16_ais_ip8, + &m68008_device::eori_w_imm16_aips_ip8, + &m68008_device::eori_w_imm16_pais_ip8, + &m68008_device::eori_w_imm16_das_ip8, + &m68008_device::eori_w_imm16_dais_ip8, + &m68008_device::eori_w_imm16_adr16_ip8, + &m68008_device::eori_w_imm16_adr32_ip8, + &m68008_device::eori_i16u_sr_ip8, + &m68008_device::eori_l_imm32_ds_ip8, + &m68008_device::eori_l_imm32_ais_ip8, + &m68008_device::eori_l_imm32_aips_ip8, + &m68008_device::eori_l_imm32_pais_ip8, + &m68008_device::eori_l_imm32_das_ip8, + &m68008_device::eori_l_imm32_dais_ip8, + &m68008_device::eori_l_imm32_adr16_ip8, + &m68008_device::eori_l_imm32_adr32_ip8, + &m68008_device::cmpi_b_imm8_ds_ip8, + &m68008_device::cmpi_b_imm8_ais_ip8, + &m68008_device::cmpi_b_imm8_aips_ip8, + &m68008_device::cmpi_b_imm8_pais_ip8, + &m68008_device::cmpi_b_imm8_das_ip8, + &m68008_device::cmpi_b_imm8_dais_ip8, + &m68008_device::cmpi_b_imm8_adr16_ip8, + &m68008_device::cmpi_b_imm8_adr32_ip8, + &m68008_device::cmpi_w_imm16_ds_ip8, + &m68008_device::cmpi_w_imm16_ais_ip8, + &m68008_device::cmpi_w_imm16_aips_ip8, + &m68008_device::cmpi_w_imm16_pais_ip8, + &m68008_device::cmpi_w_imm16_das_ip8, + &m68008_device::cmpi_w_imm16_dais_ip8, + &m68008_device::cmpi_w_imm16_adr16_ip8, + &m68008_device::cmpi_w_imm16_adr32_ip8, + &m68008_device::cmpi_l_imm32_ds_ip8, + &m68008_device::cmpi_l_imm32_ais_ip8, + &m68008_device::cmpi_l_imm32_aips_ip8, + &m68008_device::cmpi_l_imm32_pais_ip8, + &m68008_device::cmpi_l_imm32_das_ip8, + &m68008_device::cmpi_l_imm32_dais_ip8, + &m68008_device::cmpi_l_imm32_adr16_ip8, + &m68008_device::cmpi_l_imm32_adr32_ip8, + &m68008_device::move_b_ds_dd_ip8, + &m68008_device::move_b_ais_dd_ip8, + &m68008_device::move_b_aips_dd_ip8, + &m68008_device::move_b_pais_dd_ip8, + &m68008_device::move_b_das_dd_ip8, + &m68008_device::move_b_dais_dd_ip8, + &m68008_device::move_b_adr16_dd_ip8, + &m68008_device::move_b_adr32_dd_ip8, + &m68008_device::move_b_dpc_dd_ip8, + &m68008_device::move_b_dpci_dd_ip8, + &m68008_device::move_b_imm8_dd_ip8, + &m68008_device::move_b_ds_aid_ip8, + &m68008_device::move_b_ais_aid_ip8, + &m68008_device::move_b_aips_aid_ip8, + &m68008_device::move_b_pais_aid_ip8, + &m68008_device::move_b_das_aid_ip8, + &m68008_device::move_b_dais_aid_ip8, + &m68008_device::move_b_adr16_aid_ip8, + &m68008_device::move_b_adr32_aid_ip8, + &m68008_device::move_b_dpc_aid_ip8, + &m68008_device::move_b_dpci_aid_ip8, + &m68008_device::move_b_imm8_aid_ip8, + &m68008_device::move_b_ds_aipd_ip8, + &m68008_device::move_b_ais_aipd_ip8, + &m68008_device::move_b_aips_aipd_ip8, + &m68008_device::move_b_pais_aipd_ip8, + &m68008_device::move_b_das_aipd_ip8, + &m68008_device::move_b_dais_aipd_ip8, + &m68008_device::move_b_adr16_aipd_ip8, + &m68008_device::move_b_adr32_aipd_ip8, + &m68008_device::move_b_dpc_aipd_ip8, + &m68008_device::move_b_dpci_aipd_ip8, + &m68008_device::move_b_imm8_aipd_ip8, + &m68008_device::move_b_ds_paid_ip8, + &m68008_device::move_b_ais_paid_ip8, + &m68008_device::move_b_aips_paid_ip8, + &m68008_device::move_b_pais_paid_ip8, + &m68008_device::move_b_das_paid_ip8, + &m68008_device::move_b_dais_paid_ip8, + &m68008_device::move_b_adr16_paid_ip8, + &m68008_device::move_b_adr32_paid_ip8, + &m68008_device::move_b_dpc_paid_ip8, + &m68008_device::move_b_dpci_paid_ip8, + &m68008_device::move_b_imm8_paid_ip8, + &m68008_device::move_b_ds_dad_ip8, + &m68008_device::move_b_ais_dad_ip8, + &m68008_device::move_b_aips_dad_ip8, + &m68008_device::move_b_pais_dad_ip8, + &m68008_device::move_b_das_dad_ip8, + &m68008_device::move_b_dais_dad_ip8, + &m68008_device::move_b_adr16_dad_ip8, + &m68008_device::move_b_adr32_dad_ip8, + &m68008_device::move_b_dpc_dad_ip8, + &m68008_device::move_b_dpci_dad_ip8, + &m68008_device::move_b_imm8_dad_ip8, + &m68008_device::move_b_ds_daid_ip8, + &m68008_device::move_b_ais_daid_ip8, + &m68008_device::move_b_aips_daid_ip8, + &m68008_device::move_b_pais_daid_ip8, + &m68008_device::move_b_das_daid_ip8, + &m68008_device::move_b_dais_daid_ip8, + &m68008_device::move_b_adr16_daid_ip8, + &m68008_device::move_b_adr32_daid_ip8, + &m68008_device::move_b_dpc_daid_ip8, + &m68008_device::move_b_dpci_daid_ip8, + &m68008_device::move_b_imm8_daid_ip8, + &m68008_device::move_b_ds_adr16_ip8, + &m68008_device::move_b_ais_adr16_ip8, + &m68008_device::move_b_aips_adr16_ip8, + &m68008_device::move_b_pais_adr16_ip8, + &m68008_device::move_b_das_adr16_ip8, + &m68008_device::move_b_dais_adr16_ip8, + &m68008_device::move_b_adr16_adr16_ip8, + &m68008_device::move_b_adr32_adr16_ip8, + &m68008_device::move_b_dpc_adr16_ip8, + &m68008_device::move_b_dpci_adr16_ip8, + &m68008_device::move_b_imm8_adr16_ip8, + &m68008_device::move_b_ds_adr32_ip8, + &m68008_device::move_b_ais_adr32_ip8, + &m68008_device::move_b_aips_adr32_ip8, + &m68008_device::move_b_pais_adr32_ip8, + &m68008_device::move_b_das_adr32_ip8, + &m68008_device::move_b_dais_adr32_ip8, + &m68008_device::move_b_adr16_adr32_ip8, + &m68008_device::move_b_adr32_adr32_ip8, + &m68008_device::move_b_dpc_adr32_ip8, + &m68008_device::move_b_dpci_adr32_ip8, + &m68008_device::move_b_imm8_adr32_ip8, + &m68008_device::move_l_ds_dd_ip8, + &m68008_device::move_l_as_dd_ip8, + &m68008_device::move_l_ais_dd_ip8, + &m68008_device::move_l_aips_dd_ip8, + &m68008_device::move_l_pais_dd_ip8, + &m68008_device::move_l_das_dd_ip8, + &m68008_device::move_l_dais_dd_ip8, + &m68008_device::move_l_adr16_dd_ip8, + &m68008_device::move_l_adr32_dd_ip8, + &m68008_device::move_l_dpc_dd_ip8, + &m68008_device::move_l_dpci_dd_ip8, + &m68008_device::move_l_imm32_dd_ip8, + &m68008_device::movea_l_ds_ad_ip8, + &m68008_device::movea_l_as_ad_ip8, + &m68008_device::movea_l_ais_ad_ip8, + &m68008_device::movea_l_aips_ad_ip8, + &m68008_device::movea_l_pais_ad_ip8, + &m68008_device::movea_l_das_ad_ip8, + &m68008_device::movea_l_dais_ad_ip8, + &m68008_device::movea_l_adr16_ad_ip8, + &m68008_device::movea_l_adr32_ad_ip8, + &m68008_device::movea_l_dpc_ad_ip8, + &m68008_device::movea_l_dpci_ad_ip8, + &m68008_device::movea_l_imm32_ad_ip8, + &m68008_device::move_l_ds_aid_ip8, + &m68008_device::move_l_as_aid_ip8, + &m68008_device::move_l_ais_aid_ip8, + &m68008_device::move_l_aips_aid_ip8, + &m68008_device::move_l_pais_aid_ip8, + &m68008_device::move_l_das_aid_ip8, + &m68008_device::move_l_dais_aid_ip8, + &m68008_device::move_l_adr16_aid_ip8, + &m68008_device::move_l_adr32_aid_ip8, + &m68008_device::move_l_dpc_aid_ip8, + &m68008_device::move_l_dpci_aid_ip8, + &m68008_device::move_l_imm32_aid_ip8, + &m68008_device::move_l_ds_aipd_ip8, + &m68008_device::move_l_as_aipd_ip8, + &m68008_device::move_l_ais_aipd_ip8, + &m68008_device::move_l_aips_aipd_ip8, + &m68008_device::move_l_pais_aipd_ip8, + &m68008_device::move_l_das_aipd_ip8, + &m68008_device::move_l_dais_aipd_ip8, + &m68008_device::move_l_adr16_aipd_ip8, + &m68008_device::move_l_adr32_aipd_ip8, + &m68008_device::move_l_dpc_aipd_ip8, + &m68008_device::move_l_dpci_aipd_ip8, + &m68008_device::move_l_imm32_aipd_ip8, + &m68008_device::move_l_ds_paid_ip8, + &m68008_device::move_l_as_paid_ip8, + &m68008_device::move_l_ais_paid_ip8, + &m68008_device::move_l_aips_paid_ip8, + &m68008_device::move_l_pais_paid_ip8, + &m68008_device::move_l_das_paid_ip8, + &m68008_device::move_l_dais_paid_ip8, + &m68008_device::move_l_adr16_paid_ip8, + &m68008_device::move_l_adr32_paid_ip8, + &m68008_device::move_l_dpc_paid_ip8, + &m68008_device::move_l_dpci_paid_ip8, + &m68008_device::move_l_imm32_paid_ip8, + &m68008_device::move_l_ds_dad_ip8, + &m68008_device::move_l_as_dad_ip8, + &m68008_device::move_l_ais_dad_ip8, + &m68008_device::move_l_aips_dad_ip8, + &m68008_device::move_l_pais_dad_ip8, + &m68008_device::move_l_das_dad_ip8, + &m68008_device::move_l_dais_dad_ip8, + &m68008_device::move_l_adr16_dad_ip8, + &m68008_device::move_l_adr32_dad_ip8, + &m68008_device::move_l_dpc_dad_ip8, + &m68008_device::move_l_dpci_dad_ip8, + &m68008_device::move_l_imm32_dad_ip8, + &m68008_device::move_l_ds_daid_ip8, + &m68008_device::move_l_as_daid_ip8, + &m68008_device::move_l_ais_daid_ip8, + &m68008_device::move_l_aips_daid_ip8, + &m68008_device::move_l_pais_daid_ip8, + &m68008_device::move_l_das_daid_ip8, + &m68008_device::move_l_dais_daid_ip8, + &m68008_device::move_l_adr16_daid_ip8, + &m68008_device::move_l_adr32_daid_ip8, + &m68008_device::move_l_dpc_daid_ip8, + &m68008_device::move_l_dpci_daid_ip8, + &m68008_device::move_l_imm32_daid_ip8, + &m68008_device::move_l_ds_adr16_ip8, + &m68008_device::move_l_as_adr16_ip8, + &m68008_device::move_l_ais_adr16_ip8, + &m68008_device::move_l_aips_adr16_ip8, + &m68008_device::move_l_pais_adr16_ip8, + &m68008_device::move_l_das_adr16_ip8, + &m68008_device::move_l_dais_adr16_ip8, + &m68008_device::move_l_adr16_adr16_ip8, + &m68008_device::move_l_adr32_adr16_ip8, + &m68008_device::move_l_dpc_adr16_ip8, + &m68008_device::move_l_dpci_adr16_ip8, + &m68008_device::move_l_imm32_adr16_ip8, + &m68008_device::move_l_ds_adr32_ip8, + &m68008_device::move_l_as_adr32_ip8, + &m68008_device::move_l_ais_adr32_ip8, + &m68008_device::move_l_aips_adr32_ip8, + &m68008_device::move_l_pais_adr32_ip8, + &m68008_device::move_l_das_adr32_ip8, + &m68008_device::move_l_dais_adr32_ip8, + &m68008_device::move_l_adr16_adr32_ip8, + &m68008_device::move_l_adr32_adr32_ip8, + &m68008_device::move_l_dpc_adr32_ip8, + &m68008_device::move_l_dpci_adr32_ip8, + &m68008_device::move_l_imm32_adr32_ip8, + &m68008_device::move_w_ds_dd_ip8, + &m68008_device::move_w_as_dd_ip8, + &m68008_device::move_w_ais_dd_ip8, + &m68008_device::move_w_aips_dd_ip8, + &m68008_device::move_w_pais_dd_ip8, + &m68008_device::move_w_das_dd_ip8, + &m68008_device::move_w_dais_dd_ip8, + &m68008_device::move_w_adr16_dd_ip8, + &m68008_device::move_w_adr32_dd_ip8, + &m68008_device::move_w_dpc_dd_ip8, + &m68008_device::move_w_dpci_dd_ip8, + &m68008_device::move_w_imm16_dd_ip8, + &m68008_device::movea_w_ds_ad_ip8, + &m68008_device::movea_w_as_ad_ip8, + &m68008_device::movea_w_ais_ad_ip8, + &m68008_device::movea_w_aips_ad_ip8, + &m68008_device::movea_w_pais_ad_ip8, + &m68008_device::movea_w_das_ad_ip8, + &m68008_device::movea_w_dais_ad_ip8, + &m68008_device::movea_w_adr16_ad_ip8, + &m68008_device::movea_w_adr32_ad_ip8, + &m68008_device::movea_w_dpc_ad_ip8, + &m68008_device::movea_w_dpci_ad_ip8, + &m68008_device::movea_w_imm16_ad_ip8, + &m68008_device::move_w_ds_aid_ip8, + &m68008_device::move_w_as_aid_ip8, + &m68008_device::move_w_ais_aid_ip8, + &m68008_device::move_w_aips_aid_ip8, + &m68008_device::move_w_pais_aid_ip8, + &m68008_device::move_w_das_aid_ip8, + &m68008_device::move_w_dais_aid_ip8, + &m68008_device::move_w_adr16_aid_ip8, + &m68008_device::move_w_adr32_aid_ip8, + &m68008_device::move_w_dpc_aid_ip8, + &m68008_device::move_w_dpci_aid_ip8, + &m68008_device::move_w_imm16_aid_ip8, + &m68008_device::move_w_ds_aipd_ip8, + &m68008_device::move_w_as_aipd_ip8, + &m68008_device::move_w_ais_aipd_ip8, + &m68008_device::move_w_aips_aipd_ip8, + &m68008_device::move_w_pais_aipd_ip8, + &m68008_device::move_w_das_aipd_ip8, + &m68008_device::move_w_dais_aipd_ip8, + &m68008_device::move_w_adr16_aipd_ip8, + &m68008_device::move_w_adr32_aipd_ip8, + &m68008_device::move_w_dpc_aipd_ip8, + &m68008_device::move_w_dpci_aipd_ip8, + &m68008_device::move_w_imm16_aipd_ip8, + &m68008_device::move_w_ds_paid_ip8, + &m68008_device::move_w_as_paid_ip8, + &m68008_device::move_w_ais_paid_ip8, + &m68008_device::move_w_aips_paid_ip8, + &m68008_device::move_w_pais_paid_ip8, + &m68008_device::move_w_das_paid_ip8, + &m68008_device::move_w_dais_paid_ip8, + &m68008_device::move_w_adr16_paid_ip8, + &m68008_device::move_w_adr32_paid_ip8, + &m68008_device::move_w_dpc_paid_ip8, + &m68008_device::move_w_dpci_paid_ip8, + &m68008_device::move_w_imm16_paid_ip8, + &m68008_device::move_w_ds_dad_ip8, + &m68008_device::move_w_as_dad_ip8, + &m68008_device::move_w_ais_dad_ip8, + &m68008_device::move_w_aips_dad_ip8, + &m68008_device::move_w_pais_dad_ip8, + &m68008_device::move_w_das_dad_ip8, + &m68008_device::move_w_dais_dad_ip8, + &m68008_device::move_w_adr16_dad_ip8, + &m68008_device::move_w_adr32_dad_ip8, + &m68008_device::move_w_dpc_dad_ip8, + &m68008_device::move_w_dpci_dad_ip8, + &m68008_device::move_w_imm16_dad_ip8, + &m68008_device::move_w_ds_daid_ip8, + &m68008_device::move_w_as_daid_ip8, + &m68008_device::move_w_ais_daid_ip8, + &m68008_device::move_w_aips_daid_ip8, + &m68008_device::move_w_pais_daid_ip8, + &m68008_device::move_w_das_daid_ip8, + &m68008_device::move_w_dais_daid_ip8, + &m68008_device::move_w_adr16_daid_ip8, + &m68008_device::move_w_adr32_daid_ip8, + &m68008_device::move_w_dpc_daid_ip8, + &m68008_device::move_w_dpci_daid_ip8, + &m68008_device::move_w_imm16_daid_ip8, + &m68008_device::move_w_ds_adr16_ip8, + &m68008_device::move_w_as_adr16_ip8, + &m68008_device::move_w_ais_adr16_ip8, + &m68008_device::move_w_aips_adr16_ip8, + &m68008_device::move_w_pais_adr16_ip8, + &m68008_device::move_w_das_adr16_ip8, + &m68008_device::move_w_dais_adr16_ip8, + &m68008_device::move_w_adr16_adr16_ip8, + &m68008_device::move_w_adr32_adr16_ip8, + &m68008_device::move_w_dpc_adr16_ip8, + &m68008_device::move_w_dpci_adr16_ip8, + &m68008_device::move_w_imm16_adr16_ip8, + &m68008_device::move_w_ds_adr32_ip8, + &m68008_device::move_w_as_adr32_ip8, + &m68008_device::move_w_ais_adr32_ip8, + &m68008_device::move_w_aips_adr32_ip8, + &m68008_device::move_w_pais_adr32_ip8, + &m68008_device::move_w_das_adr32_ip8, + &m68008_device::move_w_dais_adr32_ip8, + &m68008_device::move_w_adr16_adr32_ip8, + &m68008_device::move_w_adr32_adr32_ip8, + &m68008_device::move_w_dpc_adr32_ip8, + &m68008_device::move_w_dpci_adr32_ip8, + &m68008_device::move_w_imm16_adr32_ip8, + &m68008_device::negx_b_ds_ip8, + &m68008_device::negx_b_ais_ip8, + &m68008_device::negx_b_aips_ip8, + &m68008_device::negx_b_pais_ip8, + &m68008_device::negx_b_das_ip8, + &m68008_device::negx_b_dais_ip8, + &m68008_device::negx_b_adr16_ip8, + &m68008_device::negx_b_adr32_ip8, + &m68008_device::negx_w_ds_ip8, + &m68008_device::negx_w_ais_ip8, + &m68008_device::negx_w_aips_ip8, + &m68008_device::negx_w_pais_ip8, + &m68008_device::negx_w_das_ip8, + &m68008_device::negx_w_dais_ip8, + &m68008_device::negx_w_adr16_ip8, + &m68008_device::negx_w_adr32_ip8, + &m68008_device::negx_l_ds_ip8, + &m68008_device::negx_l_ais_ip8, + &m68008_device::negx_l_aips_ip8, + &m68008_device::negx_l_pais_ip8, + &m68008_device::negx_l_das_ip8, + &m68008_device::negx_l_dais_ip8, + &m68008_device::negx_l_adr16_ip8, + &m68008_device::negx_l_adr32_ip8, + &m68008_device::move_sr_ds_ip8, + &m68008_device::move_sr_ais_ip8, + &m68008_device::move_sr_aips_ip8, + &m68008_device::move_sr_pais_ip8, + &m68008_device::move_sr_das_ip8, + &m68008_device::move_sr_dais_ip8, + &m68008_device::move_sr_adr16_ip8, + &m68008_device::move_sr_adr32_ip8, + &m68008_device::chk_w_ds_dd_ip8, + &m68008_device::chk_w_ais_dd_ip8, + &m68008_device::chk_w_aips_dd_ip8, + &m68008_device::chk_w_pais_dd_ip8, + &m68008_device::chk_w_das_dd_ip8, + &m68008_device::chk_w_dais_dd_ip8, + &m68008_device::chk_w_adr16_dd_ip8, + &m68008_device::chk_w_adr32_dd_ip8, + &m68008_device::chk_w_dpc_dd_ip8, + &m68008_device::chk_w_dpci_dd_ip8, + &m68008_device::chk_w_imm16_dd_ip8, + &m68008_device::lea_ais_ad_ip8, + &m68008_device::lea_das_ad_ip8, + &m68008_device::lea_dais_ad_ip8, + &m68008_device::lea_adr16_ad_ip8, + &m68008_device::lea_adr32_ad_ip8, + &m68008_device::lea_dpc_ad_ip8, + &m68008_device::lea_dpci_ad_ip8, + &m68008_device::clr_b_ds_ip8, + &m68008_device::clr_b_ais_ip8, + &m68008_device::clr_b_aips_ip8, + &m68008_device::clr_b_pais_ip8, + &m68008_device::clr_b_das_ip8, + &m68008_device::clr_b_dais_ip8, + &m68008_device::clr_b_adr16_ip8, + &m68008_device::clr_b_adr32_ip8, + &m68008_device::clr_w_ds_ip8, + &m68008_device::clr_w_ais_ip8, + &m68008_device::clr_w_aips_ip8, + &m68008_device::clr_w_pais_ip8, + &m68008_device::clr_w_das_ip8, + &m68008_device::clr_w_dais_ip8, + &m68008_device::clr_w_adr16_ip8, + &m68008_device::clr_w_adr32_ip8, + &m68008_device::clr_l_ds_ip8, + &m68008_device::clr_l_ais_ip8, + &m68008_device::clr_l_aips_ip8, + &m68008_device::clr_l_pais_ip8, + &m68008_device::clr_l_das_ip8, + &m68008_device::clr_l_dais_ip8, + &m68008_device::clr_l_adr16_ip8, + &m68008_device::clr_l_adr32_ip8, + &m68008_device::neg_b_ds_ip8, + &m68008_device::neg_b_ais_ip8, + &m68008_device::neg_b_aips_ip8, + &m68008_device::neg_b_pais_ip8, + &m68008_device::neg_b_das_ip8, + &m68008_device::neg_b_dais_ip8, + &m68008_device::neg_b_adr16_ip8, + &m68008_device::neg_b_adr32_ip8, + &m68008_device::neg_w_ds_ip8, + &m68008_device::neg_w_ais_ip8, + &m68008_device::neg_w_aips_ip8, + &m68008_device::neg_w_pais_ip8, + &m68008_device::neg_w_das_ip8, + &m68008_device::neg_w_dais_ip8, + &m68008_device::neg_w_adr16_ip8, + &m68008_device::neg_w_adr32_ip8, + &m68008_device::neg_l_ds_ip8, + &m68008_device::neg_l_ais_ip8, + &m68008_device::neg_l_aips_ip8, + &m68008_device::neg_l_pais_ip8, + &m68008_device::neg_l_das_ip8, + &m68008_device::neg_l_dais_ip8, + &m68008_device::neg_l_adr16_ip8, + &m68008_device::neg_l_adr32_ip8, + &m68008_device::move_ds_ccr_ip8, + &m68008_device::move_ais_ccr_ip8, + &m68008_device::move_aips_ccr_ip8, + &m68008_device::move_pais_ccr_ip8, + &m68008_device::move_das_ccr_ip8, + &m68008_device::move_dais_ccr_ip8, + &m68008_device::move_adr16_ccr_ip8, + &m68008_device::move_adr32_ccr_ip8, + &m68008_device::move_dpc_ccr_ip8, + &m68008_device::move_dpci_ccr_ip8, + &m68008_device::move_imm8_ccr_ip8, + &m68008_device::not_b_ds_ip8, + &m68008_device::not_b_ais_ip8, + &m68008_device::not_b_aips_ip8, + &m68008_device::not_b_pais_ip8, + &m68008_device::not_b_das_ip8, + &m68008_device::not_b_dais_ip8, + &m68008_device::not_b_adr16_ip8, + &m68008_device::not_b_adr32_ip8, + &m68008_device::not_w_ds_ip8, + &m68008_device::not_w_ais_ip8, + &m68008_device::not_w_aips_ip8, + &m68008_device::not_w_pais_ip8, + &m68008_device::not_w_das_ip8, + &m68008_device::not_w_dais_ip8, + &m68008_device::not_w_adr16_ip8, + &m68008_device::not_w_adr32_ip8, + &m68008_device::not_l_ds_ip8, + &m68008_device::not_l_ais_ip8, + &m68008_device::not_l_aips_ip8, + &m68008_device::not_l_pais_ip8, + &m68008_device::not_l_das_ip8, + &m68008_device::not_l_dais_ip8, + &m68008_device::not_l_adr16_ip8, + &m68008_device::not_l_adr32_ip8, + &m68008_device::move_ds_sr_ip8, + &m68008_device::move_ais_sr_ip8, + &m68008_device::move_aips_sr_ip8, + &m68008_device::move_pais_sr_ip8, + &m68008_device::move_das_sr_ip8, + &m68008_device::move_dais_sr_ip8, + &m68008_device::move_adr16_sr_ip8, + &m68008_device::move_adr32_sr_ip8, + &m68008_device::move_dpc_sr_ip8, + &m68008_device::move_dpci_sr_ip8, + &m68008_device::move_i16u_sr_ip8, + &m68008_device::nbcd_b_ds_ip8, + &m68008_device::nbcd_b_ais_ip8, + &m68008_device::nbcd_b_aips_ip8, + &m68008_device::nbcd_b_pais_ip8, + &m68008_device::nbcd_b_das_ip8, + &m68008_device::nbcd_b_dais_ip8, + &m68008_device::nbcd_b_adr16_ip8, + &m68008_device::nbcd_b_adr32_ip8, + &m68008_device::swap_ds_ip8, + &m68008_device::pea_ais_ip8, + &m68008_device::pea_das_ip8, + &m68008_device::pea_dais_ip8, + &m68008_device::pea_adr16_ip8, + &m68008_device::pea_adr32_ip8, + &m68008_device::pea_dpc_ip8, + &m68008_device::pea_dpci_ip8, + &m68008_device::ext_w_ds_ip8, + &m68008_device::movem_w_list_ais_ip8, + &m68008_device::movem_w_listp_pais_ip8, + &m68008_device::movem_w_list_das_ip8, + &m68008_device::movem_w_list_dais_ip8, + &m68008_device::movem_w_list_adr16_ip8, + &m68008_device::movem_w_list_adr32_ip8, + &m68008_device::ext_l_ds_ip8, + &m68008_device::movem_l_list_ais_ip8, + &m68008_device::movem_l_listp_pais_ip8, + &m68008_device::movem_l_list_das_ip8, + &m68008_device::movem_l_list_dais_ip8, + &m68008_device::movem_l_list_adr16_ip8, + &m68008_device::movem_l_list_adr32_ip8, + &m68008_device::tst_b_ds_ip8, + &m68008_device::tst_b_ais_ip8, + &m68008_device::tst_b_aips_ip8, + &m68008_device::tst_b_pais_ip8, + &m68008_device::tst_b_das_ip8, + &m68008_device::tst_b_dais_ip8, + &m68008_device::tst_b_adr16_ip8, + &m68008_device::tst_b_adr32_ip8, + &m68008_device::tst_w_ds_ip8, + &m68008_device::tst_w_ais_ip8, + &m68008_device::tst_w_aips_ip8, + &m68008_device::tst_w_pais_ip8, + &m68008_device::tst_w_das_ip8, + &m68008_device::tst_w_dais_ip8, + &m68008_device::tst_w_adr16_ip8, + &m68008_device::tst_w_adr32_ip8, + &m68008_device::tst_l_ds_ip8, + &m68008_device::tst_l_ais_ip8, + &m68008_device::tst_l_aips_ip8, + &m68008_device::tst_l_pais_ip8, + &m68008_device::tst_l_das_ip8, + &m68008_device::tst_l_dais_ip8, + &m68008_device::tst_l_adr16_ip8, + &m68008_device::tst_l_adr32_ip8, + &m68008_device::tas_ds_ip8, + &m68008_device::tas_ais_ip8, + &m68008_device::tas_aips_ip8, + &m68008_device::tas_pais_ip8, + &m68008_device::tas_das_ip8, + &m68008_device::tas_dais_ip8, + &m68008_device::tas_adr16_ip8, + &m68008_device::tas_adr32_ip8, + &m68008_device::movem_w_ais_list_ip8, + &m68008_device::movem_w_aips_list_ip8, + &m68008_device::movem_w_das_list_ip8, + &m68008_device::movem_w_dais_list_ip8, + &m68008_device::movem_w_adr16_list_ip8, + &m68008_device::movem_w_adr32_list_ip8, + &m68008_device::movem_w_dpc_list_ip8, + &m68008_device::movem_w_dpci_list_ip8, + &m68008_device::movem_l_ais_list_ip8, + &m68008_device::movem_l_aips_list_ip8, + &m68008_device::movem_l_das_list_ip8, + &m68008_device::movem_l_dais_list_ip8, + &m68008_device::movem_l_adr16_list_ip8, + &m68008_device::movem_l_adr32_list_ip8, + &m68008_device::movem_l_dpc_list_ip8, + &m68008_device::movem_l_dpci_list_ip8, + &m68008_device::trap_imm4_ip8, + &m68008_device::link_as_imm16_ip8, + &m68008_device::unlk_as_ip8, + &m68008_device::move_as_usp_ip8, + &m68008_device::move_usp_as_ip8, + &m68008_device::reset_ip8, + &m68008_device::nop_ip8, + &m68008_device::stop_i16u_ip8, + &m68008_device::rte_ip8, + &m68008_device::rts_ip8, + &m68008_device::trapv_ip8, + &m68008_device::rtr_ip8, + &m68008_device::jsr_ais_ip8, + &m68008_device::jsr_das_ip8, + &m68008_device::jsr_dais_ip8, + &m68008_device::jsr_adr16_ip8, + &m68008_device::jsr_adr32_ip8, + &m68008_device::jsr_dpc_ip8, + &m68008_device::jsr_dpci_ip8, + &m68008_device::jmp_ais_ip8, + &m68008_device::jmp_das_ip8, + &m68008_device::jmp_dais_ip8, + &m68008_device::jmp_adr16_ip8, + &m68008_device::jmp_adr32_ip8, + &m68008_device::jmp_dpc_ip8, + &m68008_device::jmp_dpci_ip8, + &m68008_device::addq_b_imm3_ds_ip8, + &m68008_device::addq_b_imm3_ais_ip8, + &m68008_device::addq_b_imm3_aips_ip8, + &m68008_device::addq_b_imm3_pais_ip8, + &m68008_device::addq_b_imm3_das_ip8, + &m68008_device::addq_b_imm3_dais_ip8, + &m68008_device::addq_b_imm3_adr16_ip8, + &m68008_device::addq_b_imm3_adr32_ip8, + &m68008_device::addq_w_imm3_ds_ip8, + &m68008_device::addq_w_imm3_as_ip8, + &m68008_device::addq_w_imm3_ais_ip8, + &m68008_device::addq_w_imm3_aips_ip8, + &m68008_device::addq_w_imm3_pais_ip8, + &m68008_device::addq_w_imm3_das_ip8, + &m68008_device::addq_w_imm3_dais_ip8, + &m68008_device::addq_w_imm3_adr16_ip8, + &m68008_device::addq_w_imm3_adr32_ip8, + &m68008_device::addq_l_imm3_ds_ip8, + &m68008_device::addq_l_imm3_as_ip8, + &m68008_device::addq_l_imm3_ais_ip8, + &m68008_device::addq_l_imm3_aips_ip8, + &m68008_device::addq_l_imm3_pais_ip8, + &m68008_device::addq_l_imm3_das_ip8, + &m68008_device::addq_l_imm3_dais_ip8, + &m68008_device::addq_l_imm3_adr16_ip8, + &m68008_device::addq_l_imm3_adr32_ip8, + &m68008_device::st_ds_ip8, + &m68008_device::dbt_ds_rel16_ip8, + &m68008_device::st_ais_ip8, + &m68008_device::st_aips_ip8, + &m68008_device::st_pais_ip8, + &m68008_device::st_das_ip8, + &m68008_device::st_dais_ip8, + &m68008_device::st_adr16_ip8, + &m68008_device::st_adr32_ip8, + &m68008_device::subq_b_imm3_ds_ip8, + &m68008_device::subq_b_imm3_ais_ip8, + &m68008_device::subq_b_imm3_aips_ip8, + &m68008_device::subq_b_imm3_pais_ip8, + &m68008_device::subq_b_imm3_das_ip8, + &m68008_device::subq_b_imm3_dais_ip8, + &m68008_device::subq_b_imm3_adr16_ip8, + &m68008_device::subq_b_imm3_adr32_ip8, + &m68008_device::subq_w_imm3_ds_ip8, + &m68008_device::subq_w_imm3_as_ip8, + &m68008_device::subq_w_imm3_ais_ip8, + &m68008_device::subq_w_imm3_aips_ip8, + &m68008_device::subq_w_imm3_pais_ip8, + &m68008_device::subq_w_imm3_das_ip8, + &m68008_device::subq_w_imm3_dais_ip8, + &m68008_device::subq_w_imm3_adr16_ip8, + &m68008_device::subq_w_imm3_adr32_ip8, + &m68008_device::subq_l_imm3_ds_ip8, + &m68008_device::subq_l_imm3_as_ip8, + &m68008_device::subq_l_imm3_ais_ip8, + &m68008_device::subq_l_imm3_aips_ip8, + &m68008_device::subq_l_imm3_pais_ip8, + &m68008_device::subq_l_imm3_das_ip8, + &m68008_device::subq_l_imm3_dais_ip8, + &m68008_device::subq_l_imm3_adr16_ip8, + &m68008_device::subq_l_imm3_adr32_ip8, + &m68008_device::sf_ds_ip8, + &m68008_device::dbra_ds_rel16_ip8, + &m68008_device::sf_ais_ip8, + &m68008_device::sf_aips_ip8, + &m68008_device::sf_pais_ip8, + &m68008_device::sf_das_ip8, + &m68008_device::sf_dais_ip8, + &m68008_device::sf_adr16_ip8, + &m68008_device::sf_adr32_ip8, + &m68008_device::shi_ds_ip8, + &m68008_device::dbhi_ds_rel16_ip8, + &m68008_device::shi_ais_ip8, + &m68008_device::shi_aips_ip8, + &m68008_device::shi_pais_ip8, + &m68008_device::shi_das_ip8, + &m68008_device::shi_dais_ip8, + &m68008_device::shi_adr16_ip8, + &m68008_device::shi_adr32_ip8, + &m68008_device::sls_ds_ip8, + &m68008_device::dbls_ds_rel16_ip8, + &m68008_device::sls_ais_ip8, + &m68008_device::sls_aips_ip8, + &m68008_device::sls_pais_ip8, + &m68008_device::sls_das_ip8, + &m68008_device::sls_dais_ip8, + &m68008_device::sls_adr16_ip8, + &m68008_device::sls_adr32_ip8, + &m68008_device::scc_ds_ip8, + &m68008_device::dbcc_ds_rel16_ip8, + &m68008_device::scc_ais_ip8, + &m68008_device::scc_aips_ip8, + &m68008_device::scc_pais_ip8, + &m68008_device::scc_das_ip8, + &m68008_device::scc_dais_ip8, + &m68008_device::scc_adr16_ip8, + &m68008_device::scc_adr32_ip8, + &m68008_device::scs_ds_ip8, + &m68008_device::dbcs_ds_rel16_ip8, + &m68008_device::scs_ais_ip8, + &m68008_device::scs_aips_ip8, + &m68008_device::scs_pais_ip8, + &m68008_device::scs_das_ip8, + &m68008_device::scs_dais_ip8, + &m68008_device::scs_adr16_ip8, + &m68008_device::scs_adr32_ip8, + &m68008_device::sne_ds_ip8, + &m68008_device::dbne_ds_rel16_ip8, + &m68008_device::sne_ais_ip8, + &m68008_device::sne_aips_ip8, + &m68008_device::sne_pais_ip8, + &m68008_device::sne_das_ip8, + &m68008_device::sne_dais_ip8, + &m68008_device::sne_adr16_ip8, + &m68008_device::sne_adr32_ip8, + &m68008_device::seq_ds_ip8, + &m68008_device::dbeq_ds_rel16_ip8, + &m68008_device::seq_ais_ip8, + &m68008_device::seq_aips_ip8, + &m68008_device::seq_pais_ip8, + &m68008_device::seq_das_ip8, + &m68008_device::seq_dais_ip8, + &m68008_device::seq_adr16_ip8, + &m68008_device::seq_adr32_ip8, + &m68008_device::svc_ds_ip8, + &m68008_device::dbvc_ds_rel16_ip8, + &m68008_device::svc_ais_ip8, + &m68008_device::svc_aips_ip8, + &m68008_device::svc_pais_ip8, + &m68008_device::svc_das_ip8, + &m68008_device::svc_dais_ip8, + &m68008_device::svc_adr16_ip8, + &m68008_device::svc_adr32_ip8, + &m68008_device::svs_ds_ip8, + &m68008_device::dbvs_ds_rel16_ip8, + &m68008_device::svs_ais_ip8, + &m68008_device::svs_aips_ip8, + &m68008_device::svs_pais_ip8, + &m68008_device::svs_das_ip8, + &m68008_device::svs_dais_ip8, + &m68008_device::svs_adr16_ip8, + &m68008_device::svs_adr32_ip8, + &m68008_device::spl_ds_ip8, + &m68008_device::dbpl_ds_rel16_ip8, + &m68008_device::spl_ais_ip8, + &m68008_device::spl_aips_ip8, + &m68008_device::spl_pais_ip8, + &m68008_device::spl_das_ip8, + &m68008_device::spl_dais_ip8, + &m68008_device::spl_adr16_ip8, + &m68008_device::spl_adr32_ip8, + &m68008_device::smi_ds_ip8, + &m68008_device::dbmi_ds_rel16_ip8, + &m68008_device::smi_ais_ip8, + &m68008_device::smi_aips_ip8, + &m68008_device::smi_pais_ip8, + &m68008_device::smi_das_ip8, + &m68008_device::smi_dais_ip8, + &m68008_device::smi_adr16_ip8, + &m68008_device::smi_adr32_ip8, + &m68008_device::sge_ds_ip8, + &m68008_device::dbge_ds_rel16_ip8, + &m68008_device::sge_ais_ip8, + &m68008_device::sge_aips_ip8, + &m68008_device::sge_pais_ip8, + &m68008_device::sge_das_ip8, + &m68008_device::sge_dais_ip8, + &m68008_device::sge_adr16_ip8, + &m68008_device::sge_adr32_ip8, + &m68008_device::slt_ds_ip8, + &m68008_device::dblt_ds_rel16_ip8, + &m68008_device::slt_ais_ip8, + &m68008_device::slt_aips_ip8, + &m68008_device::slt_pais_ip8, + &m68008_device::slt_das_ip8, + &m68008_device::slt_dais_ip8, + &m68008_device::slt_adr16_ip8, + &m68008_device::slt_adr32_ip8, + &m68008_device::sgt_ds_ip8, + &m68008_device::dbgt_ds_rel16_ip8, + &m68008_device::sgt_ais_ip8, + &m68008_device::sgt_aips_ip8, + &m68008_device::sgt_pais_ip8, + &m68008_device::sgt_das_ip8, + &m68008_device::sgt_dais_ip8, + &m68008_device::sgt_adr16_ip8, + &m68008_device::sgt_adr32_ip8, + &m68008_device::sle_ds_ip8, + &m68008_device::dble_ds_rel16_ip8, + &m68008_device::sle_ais_ip8, + &m68008_device::sle_aips_ip8, + &m68008_device::sle_pais_ip8, + &m68008_device::sle_das_ip8, + &m68008_device::sle_dais_ip8, + &m68008_device::sle_adr16_ip8, + &m68008_device::sle_adr32_ip8, + &m68008_device::bra_rel16_ip8, + &m68008_device::bra_rel8_ip8, + &m68008_device::bsr_rel16_ip8, + &m68008_device::bsr_rel8_ip8, + &m68008_device::bhi_rel16_ip8, + &m68008_device::bhi_rel8_ip8, + &m68008_device::bls_rel16_ip8, + &m68008_device::bls_rel8_ip8, + &m68008_device::bcc_rel16_ip8, + &m68008_device::bcc_rel8_ip8, + &m68008_device::bcs_rel16_ip8, + &m68008_device::bcs_rel8_ip8, + &m68008_device::bne_rel16_ip8, + &m68008_device::bne_rel8_ip8, + &m68008_device::beq_rel16_ip8, + &m68008_device::beq_rel8_ip8, + &m68008_device::bvc_rel16_ip8, + &m68008_device::bvc_rel8_ip8, + &m68008_device::bvs_rel16_ip8, + &m68008_device::bvs_rel8_ip8, + &m68008_device::bpl_rel16_ip8, + &m68008_device::bpl_rel8_ip8, + &m68008_device::bmi_rel16_ip8, + &m68008_device::bmi_rel8_ip8, + &m68008_device::bge_rel16_ip8, + &m68008_device::bge_rel8_ip8, + &m68008_device::blt_rel16_ip8, + &m68008_device::blt_rel8_ip8, + &m68008_device::bgt_rel16_ip8, + &m68008_device::bgt_rel8_ip8, + &m68008_device::ble_rel16_ip8, + &m68008_device::ble_rel8_ip8, + &m68008_device::moveq_imm8o_dd_ip8, + &m68008_device::or_b_ds_dd_ip8, + &m68008_device::or_b_ais_dd_ip8, + &m68008_device::or_b_aips_dd_ip8, + &m68008_device::or_b_pais_dd_ip8, + &m68008_device::or_b_das_dd_ip8, + &m68008_device::or_b_dais_dd_ip8, + &m68008_device::or_b_adr16_dd_ip8, + &m68008_device::or_b_adr32_dd_ip8, + &m68008_device::or_b_dpc_dd_ip8, + &m68008_device::or_b_dpci_dd_ip8, + &m68008_device::or_b_imm8_dd_ip8, + &m68008_device::or_w_ds_dd_ip8, + &m68008_device::or_w_ais_dd_ip8, + &m68008_device::or_w_aips_dd_ip8, + &m68008_device::or_w_pais_dd_ip8, + &m68008_device::or_w_das_dd_ip8, + &m68008_device::or_w_dais_dd_ip8, + &m68008_device::or_w_adr16_dd_ip8, + &m68008_device::or_w_adr32_dd_ip8, + &m68008_device::or_w_dpc_dd_ip8, + &m68008_device::or_w_dpci_dd_ip8, + &m68008_device::or_w_imm16_dd_ip8, + &m68008_device::or_l_ds_dd_ip8, + &m68008_device::or_l_ais_dd_ip8, + &m68008_device::or_l_aips_dd_ip8, + &m68008_device::or_l_pais_dd_ip8, + &m68008_device::or_l_das_dd_ip8, + &m68008_device::or_l_dais_dd_ip8, + &m68008_device::or_l_adr16_dd_ip8, + &m68008_device::or_l_adr32_dd_ip8, + &m68008_device::or_l_dpc_dd_ip8, + &m68008_device::or_l_dpci_dd_ip8, + &m68008_device::or_l_imm32_dd_ip8, + &m68008_device::divu_w_ds_dd_ip8, + &m68008_device::divu_w_ais_dd_ip8, + &m68008_device::divu_w_aips_dd_ip8, + &m68008_device::divu_w_pais_dd_ip8, + &m68008_device::divu_w_das_dd_ip8, + &m68008_device::divu_w_dais_dd_ip8, + &m68008_device::divu_w_adr16_dd_ip8, + &m68008_device::divu_w_adr32_dd_ip8, + &m68008_device::divu_w_dpc_dd_ip8, + &m68008_device::divu_w_dpci_dd_ip8, + &m68008_device::divu_w_imm16_dd_ip8, + &m68008_device::sbcd_ds_dd_ip8, + &m68008_device::sbcd_pais_paid_ip8, + &m68008_device::or_b_dd_ais_ip8, + &m68008_device::or_b_dd_aips_ip8, + &m68008_device::or_b_dd_pais_ip8, + &m68008_device::or_b_dd_das_ip8, + &m68008_device::or_b_dd_dais_ip8, + &m68008_device::or_b_dd_adr16_ip8, + &m68008_device::or_b_dd_adr32_ip8, + &m68008_device::or_w_dd_ais_ip8, + &m68008_device::or_w_dd_aips_ip8, + &m68008_device::or_w_dd_pais_ip8, + &m68008_device::or_w_dd_das_ip8, + &m68008_device::or_w_dd_dais_ip8, + &m68008_device::or_w_dd_adr16_ip8, + &m68008_device::or_w_dd_adr32_ip8, + &m68008_device::or_l_dd_ais_ip8, + &m68008_device::or_l_dd_aips_ip8, + &m68008_device::or_l_dd_pais_ip8, + &m68008_device::or_l_dd_das_ip8, + &m68008_device::or_l_dd_dais_ip8, + &m68008_device::or_l_dd_adr16_ip8, + &m68008_device::or_l_dd_adr32_ip8, + &m68008_device::divs_w_ds_dd_ip8, + &m68008_device::divs_w_ais_dd_ip8, + &m68008_device::divs_w_aips_dd_ip8, + &m68008_device::divs_w_pais_dd_ip8, + &m68008_device::divs_w_das_dd_ip8, + &m68008_device::divs_w_dais_dd_ip8, + &m68008_device::divs_w_adr16_dd_ip8, + &m68008_device::divs_w_adr32_dd_ip8, + &m68008_device::divs_w_dpc_dd_ip8, + &m68008_device::divs_w_dpci_dd_ip8, + &m68008_device::divs_w_imm16_dd_ip8, + &m68008_device::sub_b_ds_dd_ip8, + &m68008_device::sub_b_ais_dd_ip8, + &m68008_device::sub_b_aips_dd_ip8, + &m68008_device::sub_b_pais_dd_ip8, + &m68008_device::sub_b_das_dd_ip8, + &m68008_device::sub_b_dais_dd_ip8, + &m68008_device::sub_b_adr16_dd_ip8, + &m68008_device::sub_b_adr32_dd_ip8, + &m68008_device::sub_b_dpc_dd_ip8, + &m68008_device::sub_b_dpci_dd_ip8, + &m68008_device::sub_b_imm8_dd_ip8, + &m68008_device::sub_w_ds_dd_ip8, + &m68008_device::sub_w_as_dd_ip8, + &m68008_device::sub_w_ais_dd_ip8, + &m68008_device::sub_w_aips_dd_ip8, + &m68008_device::sub_w_pais_dd_ip8, + &m68008_device::sub_w_das_dd_ip8, + &m68008_device::sub_w_dais_dd_ip8, + &m68008_device::sub_w_adr16_dd_ip8, + &m68008_device::sub_w_adr32_dd_ip8, + &m68008_device::sub_w_dpc_dd_ip8, + &m68008_device::sub_w_dpci_dd_ip8, + &m68008_device::sub_w_imm16_dd_ip8, + &m68008_device::sub_l_ds_dd_ip8, + &m68008_device::sub_l_as_dd_ip8, + &m68008_device::sub_l_ais_dd_ip8, + &m68008_device::sub_l_aips_dd_ip8, + &m68008_device::sub_l_pais_dd_ip8, + &m68008_device::sub_l_das_dd_ip8, + &m68008_device::sub_l_dais_dd_ip8, + &m68008_device::sub_l_adr16_dd_ip8, + &m68008_device::sub_l_adr32_dd_ip8, + &m68008_device::sub_l_dpc_dd_ip8, + &m68008_device::sub_l_dpci_dd_ip8, + &m68008_device::sub_l_imm32_dd_ip8, + &m68008_device::suba_w_ds_ad_ip8, + &m68008_device::suba_w_as_ad_ip8, + &m68008_device::suba_w_ais_ad_ip8, + &m68008_device::suba_w_aips_ad_ip8, + &m68008_device::suba_w_pais_ad_ip8, + &m68008_device::suba_w_das_ad_ip8, + &m68008_device::suba_w_dais_ad_ip8, + &m68008_device::suba_w_adr16_ad_ip8, + &m68008_device::suba_w_adr32_ad_ip8, + &m68008_device::suba_w_dpc_ad_ip8, + &m68008_device::suba_w_dpci_ad_ip8, + &m68008_device::suba_w_imm16_ad_ip8, + &m68008_device::subx_b_ds_dd_ip8, + &m68008_device::subx_b_pais_paid_ip8, + &m68008_device::sub_b_dd_ais_ip8, + &m68008_device::sub_b_dd_aips_ip8, + &m68008_device::sub_b_dd_pais_ip8, + &m68008_device::sub_b_dd_das_ip8, + &m68008_device::sub_b_dd_dais_ip8, + &m68008_device::sub_b_dd_adr16_ip8, + &m68008_device::sub_b_dd_adr32_ip8, + &m68008_device::subx_w_ds_dd_ip8, + &m68008_device::subx_w_pais_paid_ip8, + &m68008_device::sub_w_dd_ais_ip8, + &m68008_device::sub_w_dd_aips_ip8, + &m68008_device::sub_w_dd_pais_ip8, + &m68008_device::sub_w_dd_das_ip8, + &m68008_device::sub_w_dd_dais_ip8, + &m68008_device::sub_w_dd_adr16_ip8, + &m68008_device::sub_w_dd_adr32_ip8, + &m68008_device::subx_l_ds_dd_ip8, + &m68008_device::subx_l_pais_paid_ip8, + &m68008_device::sub_l_dd_ais_ip8, + &m68008_device::sub_l_dd_aips_ip8, + &m68008_device::sub_l_dd_pais_ip8, + &m68008_device::sub_l_dd_das_ip8, + &m68008_device::sub_l_dd_dais_ip8, + &m68008_device::sub_l_dd_adr16_ip8, + &m68008_device::sub_l_dd_adr32_ip8, + &m68008_device::suba_l_ds_ad_ip8, + &m68008_device::suba_l_as_ad_ip8, + &m68008_device::suba_l_ais_ad_ip8, + &m68008_device::suba_l_aips_ad_ip8, + &m68008_device::suba_l_pais_ad_ip8, + &m68008_device::suba_l_das_ad_ip8, + &m68008_device::suba_l_dais_ad_ip8, + &m68008_device::suba_l_adr16_ad_ip8, + &m68008_device::suba_l_adr32_ad_ip8, + &m68008_device::suba_l_dpc_ad_ip8, + &m68008_device::suba_l_dpci_ad_ip8, + &m68008_device::suba_l_imm32_ad_ip8, + &m68008_device::cmp_b_ds_dd_ip8, + &m68008_device::cmp_b_ais_dd_ip8, + &m68008_device::cmp_b_aips_dd_ip8, + &m68008_device::cmp_b_pais_dd_ip8, + &m68008_device::cmp_b_das_dd_ip8, + &m68008_device::cmp_b_dais_dd_ip8, + &m68008_device::cmp_b_adr16_dd_ip8, + &m68008_device::cmp_b_adr32_dd_ip8, + &m68008_device::cmp_b_dpc_dd_ip8, + &m68008_device::cmp_b_dpci_dd_ip8, + &m68008_device::cmp_b_imm8_dd_ip8, + &m68008_device::cmp_w_ds_dd_ip8, + &m68008_device::cmp_w_as_dd_ip8, + &m68008_device::cmp_w_ais_dd_ip8, + &m68008_device::cmp_w_aips_dd_ip8, + &m68008_device::cmp_w_pais_dd_ip8, + &m68008_device::cmp_w_das_dd_ip8, + &m68008_device::cmp_w_dais_dd_ip8, + &m68008_device::cmp_w_adr16_dd_ip8, + &m68008_device::cmp_w_adr32_dd_ip8, + &m68008_device::cmp_w_dpc_dd_ip8, + &m68008_device::cmp_w_dpci_dd_ip8, + &m68008_device::cmp_w_imm16_dd_ip8, + &m68008_device::cmp_l_ds_dd_ip8, + &m68008_device::cmp_l_as_dd_ip8, + &m68008_device::cmp_l_ais_dd_ip8, + &m68008_device::cmp_l_aips_dd_ip8, + &m68008_device::cmp_l_pais_dd_ip8, + &m68008_device::cmp_l_das_dd_ip8, + &m68008_device::cmp_l_dais_dd_ip8, + &m68008_device::cmp_l_adr16_dd_ip8, + &m68008_device::cmp_l_adr32_dd_ip8, + &m68008_device::cmp_l_dpc_dd_ip8, + &m68008_device::cmp_l_dpci_dd_ip8, + &m68008_device::cmp_l_imm32_dd_ip8, + &m68008_device::cmpa_w_ds_ad_ip8, + &m68008_device::cmpa_w_as_ad_ip8, + &m68008_device::cmpa_w_ais_ad_ip8, + &m68008_device::cmpa_w_aips_ad_ip8, + &m68008_device::cmpa_w_pais_ad_ip8, + &m68008_device::cmpa_w_das_ad_ip8, + &m68008_device::cmpa_w_dais_ad_ip8, + &m68008_device::cmpa_w_adr16_ad_ip8, + &m68008_device::cmpa_w_adr32_ad_ip8, + &m68008_device::cmpa_w_dpc_ad_ip8, + &m68008_device::cmpa_w_dpci_ad_ip8, + &m68008_device::cmpa_w_imm16_ad_ip8, + &m68008_device::eor_b_dd_ds_ip8, + &m68008_device::cmpm_b_aips_aipd_ip8, + &m68008_device::eor_b_dd_ais_ip8, + &m68008_device::eor_b_dd_aips_ip8, + &m68008_device::eor_b_dd_pais_ip8, + &m68008_device::eor_b_dd_das_ip8, + &m68008_device::eor_b_dd_dais_ip8, + &m68008_device::eor_b_dd_adr16_ip8, + &m68008_device::eor_b_dd_adr32_ip8, + &m68008_device::eor_w_dd_ds_ip8, + &m68008_device::cmpm_w_aips_aipd_ip8, + &m68008_device::eor_w_dd_ais_ip8, + &m68008_device::eor_w_dd_aips_ip8, + &m68008_device::eor_w_dd_pais_ip8, + &m68008_device::eor_w_dd_das_ip8, + &m68008_device::eor_w_dd_dais_ip8, + &m68008_device::eor_w_dd_adr16_ip8, + &m68008_device::eor_w_dd_adr32_ip8, + &m68008_device::eor_l_dd_ds_ip8, + &m68008_device::cmpm_l_aips_aipd_ip8, + &m68008_device::eor_l_dd_ais_ip8, + &m68008_device::eor_l_dd_aips_ip8, + &m68008_device::eor_l_dd_pais_ip8, + &m68008_device::eor_l_dd_das_ip8, + &m68008_device::eor_l_dd_dais_ip8, + &m68008_device::eor_l_dd_adr16_ip8, + &m68008_device::eor_l_dd_adr32_ip8, + &m68008_device::cmpa_l_ds_ad_ip8, + &m68008_device::cmpa_l_as_ad_ip8, + &m68008_device::cmpa_l_ais_ad_ip8, + &m68008_device::cmpa_l_aips_ad_ip8, + &m68008_device::cmpa_l_pais_ad_ip8, + &m68008_device::cmpa_l_das_ad_ip8, + &m68008_device::cmpa_l_dais_ad_ip8, + &m68008_device::cmpa_l_adr16_ad_ip8, + &m68008_device::cmpa_l_adr32_ad_ip8, + &m68008_device::cmpa_l_dpc_ad_ip8, + &m68008_device::cmpa_l_dpci_ad_ip8, + &m68008_device::cmpa_l_imm32_ad_ip8, + &m68008_device::and_b_ds_dd_ip8, + &m68008_device::and_b_ais_dd_ip8, + &m68008_device::and_b_aips_dd_ip8, + &m68008_device::and_b_pais_dd_ip8, + &m68008_device::and_b_das_dd_ip8, + &m68008_device::and_b_dais_dd_ip8, + &m68008_device::and_b_adr16_dd_ip8, + &m68008_device::and_b_adr32_dd_ip8, + &m68008_device::and_b_dpc_dd_ip8, + &m68008_device::and_b_dpci_dd_ip8, + &m68008_device::and_b_imm8_dd_ip8, + &m68008_device::and_w_ds_dd_ip8, + &m68008_device::and_w_ais_dd_ip8, + &m68008_device::and_w_aips_dd_ip8, + &m68008_device::and_w_pais_dd_ip8, + &m68008_device::and_w_das_dd_ip8, + &m68008_device::and_w_dais_dd_ip8, + &m68008_device::and_w_adr16_dd_ip8, + &m68008_device::and_w_adr32_dd_ip8, + &m68008_device::and_w_dpc_dd_ip8, + &m68008_device::and_w_dpci_dd_ip8, + &m68008_device::and_w_imm16_dd_ip8, + &m68008_device::and_l_ds_dd_ip8, + &m68008_device::and_l_ais_dd_ip8, + &m68008_device::and_l_aips_dd_ip8, + &m68008_device::and_l_pais_dd_ip8, + &m68008_device::and_l_das_dd_ip8, + &m68008_device::and_l_dais_dd_ip8, + &m68008_device::and_l_adr16_dd_ip8, + &m68008_device::and_l_adr32_dd_ip8, + &m68008_device::and_l_dpc_dd_ip8, + &m68008_device::and_l_dpci_dd_ip8, + &m68008_device::and_l_imm32_dd_ip8, + &m68008_device::mulu_w_ds_dd_ip8, + &m68008_device::mulu_w_ais_dd_ip8, + &m68008_device::mulu_w_aips_dd_ip8, + &m68008_device::mulu_w_pais_dd_ip8, + &m68008_device::mulu_w_das_dd_ip8, + &m68008_device::mulu_w_dais_dd_ip8, + &m68008_device::mulu_w_adr16_dd_ip8, + &m68008_device::mulu_w_adr32_dd_ip8, + &m68008_device::mulu_w_dpc_dd_ip8, + &m68008_device::mulu_w_dpci_dd_ip8, + &m68008_device::mulu_w_imm16_dd_ip8, + &m68008_device::abcd_ds_dd_ip8, + &m68008_device::abcd_pais_paid_ip8, + &m68008_device::and_b_dd_ais_ip8, + &m68008_device::and_b_dd_aips_ip8, + &m68008_device::and_b_dd_pais_ip8, + &m68008_device::and_b_dd_das_ip8, + &m68008_device::and_b_dd_dais_ip8, + &m68008_device::and_b_dd_adr16_ip8, + &m68008_device::and_b_dd_adr32_ip8, + &m68008_device::exg_dd_ds_ip8, + &m68008_device::exg_ad_as_ip8, + &m68008_device::and_w_dd_ais_ip8, + &m68008_device::and_w_dd_aips_ip8, + &m68008_device::and_w_dd_pais_ip8, + &m68008_device::and_w_dd_das_ip8, + &m68008_device::and_w_dd_dais_ip8, + &m68008_device::and_w_dd_adr16_ip8, + &m68008_device::and_w_dd_adr32_ip8, + &m68008_device::exg_dd_as_ip8, + &m68008_device::and_l_dd_ais_ip8, + &m68008_device::and_l_dd_aips_ip8, + &m68008_device::and_l_dd_pais_ip8, + &m68008_device::and_l_dd_das_ip8, + &m68008_device::and_l_dd_dais_ip8, + &m68008_device::and_l_dd_adr16_ip8, + &m68008_device::and_l_dd_adr32_ip8, + &m68008_device::muls_w_ds_dd_ip8, + &m68008_device::muls_w_ais_dd_ip8, + &m68008_device::muls_w_aips_dd_ip8, + &m68008_device::muls_w_pais_dd_ip8, + &m68008_device::muls_w_das_dd_ip8, + &m68008_device::muls_w_dais_dd_ip8, + &m68008_device::muls_w_adr16_dd_ip8, + &m68008_device::muls_w_adr32_dd_ip8, + &m68008_device::muls_w_dpc_dd_ip8, + &m68008_device::muls_w_dpci_dd_ip8, + &m68008_device::muls_w_imm16_dd_ip8, + &m68008_device::add_b_ds_dd_ip8, + &m68008_device::add_b_ais_dd_ip8, + &m68008_device::add_b_aips_dd_ip8, + &m68008_device::add_b_pais_dd_ip8, + &m68008_device::add_b_das_dd_ip8, + &m68008_device::add_b_dais_dd_ip8, + &m68008_device::add_b_adr16_dd_ip8, + &m68008_device::add_b_adr32_dd_ip8, + &m68008_device::add_b_dpc_dd_ip8, + &m68008_device::add_b_dpci_dd_ip8, + &m68008_device::add_b_imm8_dd_ip8, + &m68008_device::add_w_ds_dd_ip8, + &m68008_device::add_w_as_dd_ip8, + &m68008_device::add_w_ais_dd_ip8, + &m68008_device::add_w_aips_dd_ip8, + &m68008_device::add_w_pais_dd_ip8, + &m68008_device::add_w_das_dd_ip8, + &m68008_device::add_w_dais_dd_ip8, + &m68008_device::add_w_adr16_dd_ip8, + &m68008_device::add_w_adr32_dd_ip8, + &m68008_device::add_w_dpc_dd_ip8, + &m68008_device::add_w_dpci_dd_ip8, + &m68008_device::add_w_imm16_dd_ip8, + &m68008_device::add_l_ds_dd_ip8, + &m68008_device::add_l_as_dd_ip8, + &m68008_device::add_l_ais_dd_ip8, + &m68008_device::add_l_aips_dd_ip8, + &m68008_device::add_l_pais_dd_ip8, + &m68008_device::add_l_das_dd_ip8, + &m68008_device::add_l_dais_dd_ip8, + &m68008_device::add_l_adr16_dd_ip8, + &m68008_device::add_l_adr32_dd_ip8, + &m68008_device::add_l_dpc_dd_ip8, + &m68008_device::add_l_dpci_dd_ip8, + &m68008_device::add_l_imm32_dd_ip8, + &m68008_device::adda_w_ds_ad_ip8, + &m68008_device::adda_w_as_ad_ip8, + &m68008_device::adda_w_ais_ad_ip8, + &m68008_device::adda_w_aips_ad_ip8, + &m68008_device::adda_w_pais_ad_ip8, + &m68008_device::adda_w_das_ad_ip8, + &m68008_device::adda_w_dais_ad_ip8, + &m68008_device::adda_w_adr16_ad_ip8, + &m68008_device::adda_w_adr32_ad_ip8, + &m68008_device::adda_w_dpc_ad_ip8, + &m68008_device::adda_w_dpci_ad_ip8, + &m68008_device::adda_w_imm16_ad_ip8, + &m68008_device::addx_b_ds_dd_ip8, + &m68008_device::addx_b_pais_paid_ip8, + &m68008_device::add_b_dd_ais_ip8, + &m68008_device::add_b_dd_aips_ip8, + &m68008_device::add_b_dd_pais_ip8, + &m68008_device::add_b_dd_das_ip8, + &m68008_device::add_b_dd_dais_ip8, + &m68008_device::add_b_dd_adr16_ip8, + &m68008_device::add_b_dd_adr32_ip8, + &m68008_device::addx_w_ds_dd_ip8, + &m68008_device::addx_w_pais_paid_ip8, + &m68008_device::add_w_dd_ais_ip8, + &m68008_device::add_w_dd_aips_ip8, + &m68008_device::add_w_dd_pais_ip8, + &m68008_device::add_w_dd_das_ip8, + &m68008_device::add_w_dd_dais_ip8, + &m68008_device::add_w_dd_adr16_ip8, + &m68008_device::add_w_dd_adr32_ip8, + &m68008_device::addx_l_ds_dd_ip8, + &m68008_device::addx_l_pais_paid_ip8, + &m68008_device::add_l_dd_ais_ip8, + &m68008_device::add_l_dd_aips_ip8, + &m68008_device::add_l_dd_pais_ip8, + &m68008_device::add_l_dd_das_ip8, + &m68008_device::add_l_dd_dais_ip8, + &m68008_device::add_l_dd_adr16_ip8, + &m68008_device::add_l_dd_adr32_ip8, + &m68008_device::adda_l_ds_ad_ip8, + &m68008_device::adda_l_as_ad_ip8, + &m68008_device::adda_l_ais_ad_ip8, + &m68008_device::adda_l_aips_ad_ip8, + &m68008_device::adda_l_pais_ad_ip8, + &m68008_device::adda_l_das_ad_ip8, + &m68008_device::adda_l_dais_ad_ip8, + &m68008_device::adda_l_adr16_ad_ip8, + &m68008_device::adda_l_adr32_ad_ip8, + &m68008_device::adda_l_dpc_ad_ip8, + &m68008_device::adda_l_dpci_ad_ip8, + &m68008_device::adda_l_imm32_ad_ip8, + &m68008_device::asr_b_imm3_ds_ip8, + &m68008_device::lsr_b_imm3_ds_ip8, + &m68008_device::roxr_b_imm3_ds_ip8, + &m68008_device::ror_b_imm3_ds_ip8, + &m68008_device::asr_b_dd_ds_ip8, + &m68008_device::lsr_b_dd_ds_ip8, + &m68008_device::roxr_b_dd_ds_ip8, + &m68008_device::ror_b_dd_ds_ip8, + &m68008_device::asr_w_imm3_ds_ip8, + &m68008_device::lsr_w_imm3_ds_ip8, + &m68008_device::roxr_w_imm3_ds_ip8, + &m68008_device::ror_w_imm3_ds_ip8, + &m68008_device::asr_w_dd_ds_ip8, + &m68008_device::lsr_w_dd_ds_ip8, + &m68008_device::roxr_w_dd_ds_ip8, + &m68008_device::ror_w_dd_ds_ip8, + &m68008_device::asr_l_imm3_ds_ip8, + &m68008_device::lsr_l_imm3_ds_ip8, + &m68008_device::roxr_l_imm3_ds_ip8, + &m68008_device::ror_l_imm3_ds_ip8, + &m68008_device::asr_l_dd_ds_ip8, + &m68008_device::lsr_l_dd_ds_ip8, + &m68008_device::roxr_l_dd_ds_ip8, + &m68008_device::ror_l_dd_ds_ip8, + &m68008_device::asr_ais_ip8, + &m68008_device::asr_aips_ip8, + &m68008_device::asr_pais_ip8, + &m68008_device::asr_das_ip8, + &m68008_device::asr_dais_ip8, + &m68008_device::asr_adr16_ip8, + &m68008_device::asr_adr32_ip8, + &m68008_device::asl_b_imm3_ds_ip8, + &m68008_device::lsl_b_imm3_ds_ip8, + &m68008_device::roxl_b_imm3_ds_ip8, + &m68008_device::rol_b_imm3_ds_ip8, + &m68008_device::asl_b_dd_ds_ip8, + &m68008_device::lsl_b_dd_ds_ip8, + &m68008_device::roxl_b_dd_ds_ip8, + &m68008_device::rol_b_dd_ds_ip8, + &m68008_device::asl_w_imm3_ds_ip8, + &m68008_device::lsl_w_imm3_ds_ip8, + &m68008_device::roxl_w_imm3_ds_ip8, + &m68008_device::rol_w_imm3_ds_ip8, + &m68008_device::asl_w_dd_ds_ip8, + &m68008_device::lsl_w_dd_ds_ip8, + &m68008_device::roxl_w_dd_ds_ip8, + &m68008_device::rol_w_dd_ds_ip8, + &m68008_device::asl_l_imm3_ds_ip8, + &m68008_device::lsl_l_imm3_ds_ip8, + &m68008_device::roxl_l_imm3_ds_ip8, + &m68008_device::rol_l_imm3_ds_ip8, + &m68008_device::asl_l_dd_ds_ip8, + &m68008_device::lsl_l_dd_ds_ip8, + &m68008_device::roxl_l_dd_ds_ip8, + &m68008_device::rol_l_dd_ds_ip8, + &m68008_device::asl_ais_ip8, + &m68008_device::asl_aips_ip8, + &m68008_device::asl_pais_ip8, + &m68008_device::asl_das_ip8, + &m68008_device::asl_dais_ip8, + &m68008_device::asl_adr16_ip8, + &m68008_device::asl_adr32_ip8, + &m68008_device::lsr_ais_ip8, + &m68008_device::lsr_aips_ip8, + &m68008_device::lsr_pais_ip8, + &m68008_device::lsr_das_ip8, + &m68008_device::lsr_dais_ip8, + &m68008_device::lsr_adr16_ip8, + &m68008_device::lsr_adr32_ip8, + &m68008_device::lsl_ais_ip8, + &m68008_device::lsl_aips_ip8, + &m68008_device::lsl_pais_ip8, + &m68008_device::lsl_das_ip8, + &m68008_device::lsl_dais_ip8, + &m68008_device::lsl_adr16_ip8, + &m68008_device::lsl_adr32_ip8, + &m68008_device::roxr_ais_ip8, + &m68008_device::roxr_aips_ip8, + &m68008_device::roxr_pais_ip8, + &m68008_device::roxr_das_ip8, + &m68008_device::roxr_dais_ip8, + &m68008_device::roxr_adr16_ip8, + &m68008_device::roxr_adr32_ip8, + &m68008_device::roxl_ais_ip8, + &m68008_device::roxl_aips_ip8, + &m68008_device::roxl_pais_ip8, + &m68008_device::roxl_das_ip8, + &m68008_device::roxl_dais_ip8, + &m68008_device::roxl_adr16_ip8, + &m68008_device::roxl_adr32_ip8, + &m68008_device::ror_ais_ip8, + &m68008_device::ror_aips_ip8, + &m68008_device::ror_pais_ip8, + &m68008_device::ror_das_ip8, + &m68008_device::ror_dais_ip8, + &m68008_device::ror_adr16_ip8, + &m68008_device::ror_adr32_ip8, + &m68008_device::rol_ais_ip8, + &m68008_device::rol_aips_ip8, + &m68008_device::rol_pais_ip8, + &m68008_device::rol_das_ip8, + &m68008_device::rol_dais_ip8, + &m68008_device::rol_adr16_ip8, + &m68008_device::rol_adr32_ip8, +}; diff --git a/src/devices/cpu/m68000/m68008.cpp b/src/devices/cpu/m68000/m68008.cpp index 3996d8adf00..7f71b048d47 100644 --- a/src/devices/cpu/m68000/m68008.cpp +++ b/src/devices/cpu/m68000/m68008.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Karl Stenerud +// copyright-holders:Olivier Galibert #include "emu.h" #include "m68008.h" @@ -19,24 +19,84 @@ std::unique_ptr m68008fn_device::create_disassembler() } m68008_device::m68008_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) - : m68000_musashi_device(mconfig, tag, owner, clock, M68008, 8,20) + : m68008_device(mconfig, M68008, tag, owner, clock) { } +m68008_device::m68008_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) + : m68000_device(mconfig, type, tag, owner, clock), + m_mmu8(nullptr) +{ + m_cpu_space_config.m_addr_width = m_cpu_space_config.m_logaddr_width = 20; + m_program_config.m_addr_width = m_program_config.m_logaddr_width = 20; + m_opcodes_config.m_addr_width = m_opcodes_config.m_logaddr_width = 20; + m_uprogram_config.m_addr_width = m_uprogram_config.m_logaddr_width = 20; + m_uopcodes_config.m_addr_width = m_uopcodes_config.m_logaddr_width = 20; + m_cpu_space_config.m_data_width = 8; + m_program_config.m_data_width = 8; + m_opcodes_config.m_data_width = 8; + m_uprogram_config.m_data_width = 8; + m_uopcodes_config.m_data_width = 8; + + m_disable_specifics = true; +} + void m68008_device::device_start() { - m68000_musashi_device::device_start(); - init_cpu_m68008(); + m68000_device::device_start(); + + m_s_program->specific(m_r_program8); + m_s_opcodes->specific(m_r_opcodes8); + m_s_uprogram->specific(m_r_uprogram8); + m_s_uopcodes->specific(m_r_uopcodes8); + m_s_cpu_space->specific(m_cpu_space8); + + // Theoretically UB, in practice works, the alternative (putting + // everything in m68000_device) is annoying + if(m_mmu8) { + m_handlers_f = reinterpret_cast(s_handlers_if8); + m_handlers_p = reinterpret_cast(s_handlers_ip8); + } else { + m_handlers_f = reinterpret_cast(s_handlers_df8); + m_handlers_p = reinterpret_cast(s_handlers_dp8); + } + +} + +void m68008_device::update_user_super() +{ + if(m_sr & SR_S) { + m_sp = 16; + m_program8 = m_r_program8; + m_opcodes8 = m_r_opcodes8; + if(m_mmu8) + m_mmu8->set_super(true); + } else { + m_sp = 15; + m_program8 = m_r_uprogram8; + m_opcodes8 = m_r_uopcodes8; + if(m_mmu8) + m_mmu8->set_super(false); + } } m68008fn_device::m68008fn_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) - : m68000_musashi_device(mconfig, tag, owner, clock, M68008FN, 8,22) + : m68008_device(mconfig, M68008FN, tag, owner, clock) { + m_cpu_space_config.m_addr_width = m_cpu_space_config.m_logaddr_width = 22; + m_program_config.m_addr_width = m_program_config.m_logaddr_width = 22; + m_opcodes_config.m_addr_width = m_opcodes_config.m_logaddr_width = 22; + m_uprogram_config.m_addr_width = m_uprogram_config.m_logaddr_width = 22; + m_uopcodes_config.m_addr_width = m_uopcodes_config.m_logaddr_width = 22; + m_cpu_space_config.m_data_width = 8; + m_program_config.m_data_width = 8; + m_opcodes_config.m_data_width = 8; + m_uprogram_config.m_data_width = 8; + m_uopcodes_config.m_data_width = 8; } void m68008fn_device::device_start() { - m68000_musashi_device::device_start(); - init_cpu_m68008(); + m68008_device::device_start(); } diff --git a/src/devices/cpu/m68000/m68008.h b/src/devices/cpu/m68000/m68008.h index 37582a66f4a..170d5eeea81 100644 --- a/src/devices/cpu/m68000/m68008.h +++ b/src/devices/cpu/m68000/m68008.h @@ -1,28 +1,61 @@ // license:BSD-3-Clause -// copyright-holders:Karl Stenerud +// copyright-holders:Olivier Galibert #ifndef MAME_CPU_M68000_M68008_H #define MAME_CPU_M68000_M68008_H #pragma once -#include "m68kmusashi.h" +#include "m68000.h" -class m68008_device : public m68000_musashi_device +class m68008_device : public m68000_device { public: + struct mmu8 { + virtual u8 read_program(offs_t addr) = 0; + virtual void write_program(offs_t addr, u8 data) = 0; + virtual u8 read_data(offs_t addr) = 0; + virtual void write_data(offs_t addr, u8 data) = 0; + virtual u8 read_cpu(offs_t addr) = 0; + virtual void set_super(bool super) = 0; + }; + // construction/destruction m68008_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); virtual std::unique_ptr create_disassembler() override; - virtual u32 execute_min_cycles() const noexcept override { return 4; } - virtual u32 execute_max_cycles() const noexcept override { return 158; } + void set_current_mmu(mmu8 *m); // device-level overrides virtual void device_start() override; + +protected: + // Typed constructor + m68008_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); + + using handler8 = void (m68008_device::*)(); + +#include "m68008-head.h" + + static const handler8 s_handlers_df8[]; + static const handler8 s_handlers_if8[]; + static const handler8 s_handlers_dp8[]; + static const handler8 s_handlers_ip8[]; + + // Fixed specifics + memory_access<24, 0, 0, ENDIANNESS_BIG>::specific m_r_program8, m_r_opcodes8, m_r_uprogram8, m_r_uopcodes8, m_cpu_space8; + + // Dynamic specifics, depending on supervisor state + memory_access<24, 0, 0, ENDIANNESS_BIG>::specific m_program8, m_opcodes8; + + // MMU, if one present + mmu8 *m_mmu8; + + virtual void update_user_super() override; + }; -class m68008fn_device : public m68000_musashi_device +class m68008fn_device : public m68008_device { public: // construction/destruction diff --git a/src/devices/cpu/m68000/tmp68301.h b/src/devices/cpu/m68000/tmp68301.h index f5b9b05f118..95bc18e4b7f 100644 --- a/src/devices/cpu/m68000/tmp68301.h +++ b/src/devices/cpu/m68000/tmp68301.h @@ -5,7 +5,7 @@ #pragma once -#include "m68000.h" +#include "m68000mcu.h" class tmp68301_device : public m68000_mcu_device { diff --git a/src/mame/luxor/abc1600mac.cpp b/src/mame/luxor/abc1600mac.cpp index 9a483d4d83f..b01d4d6b3ae 100644 --- a/src/mame/luxor/abc1600mac.cpp +++ b/src/mame/luxor/abc1600mac.cpp @@ -237,7 +237,7 @@ uint8_t abc1600_mac_device::read(offs_t offset) } } - if (!m_magic && (fc == M68K_FC_USER_PROGRAM)) + if (!m_magic && (fc == 2)) { task = 0; } @@ -245,18 +245,8 @@ uint8_t abc1600_mac_device::read(offs_t offset) bool nonx, wp; offs_t virtual_offset = get_physical_offset(offset, task, nonx, wp); - if (!machine().side_effects_disabled()) - { - if (nonx) - { - LOGMASKED(LOG_ERRORS, "%s BUS ERROR R %05x:%06x (NONX %u WP %u TASK %u FC %u MAGIC %u)\n", - machine().describe_context(), offset, virtual_offset, nonx, wp, task, fc, m_magic); - machine().debug_break(); - m_cpu->set_buserror_details(offset, 1, m_cpu->get_fc()); - m_cpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); - m_cpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); - } - } + if (!machine().side_effects_disabled() && nonx) + m_cpu->trigger_bus_error(); return space().read_byte(virtual_offset); } @@ -289,27 +279,8 @@ void abc1600_mac_device::write(offs_t offset, uint8_t data) bool nonx, wp; offs_t virtual_offset = get_physical_offset(offset, task, nonx, wp); - if (!machine().side_effects_disabled()) - { - if (nonx) - { - LOGMASKED(LOG_ERRORS, "%s BUS ERROR W %05x:%06x (NONX %u WP %u TASK %u FC %u MAGIC %u)\n", - machine().describe_context(), offset, virtual_offset, nonx, wp, task, fc, m_magic); - machine().debug_break(); - m_cpu->set_buserror_details(offset, 0, m_cpu->get_fc()); - m_cpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); - m_cpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); - } - if (!wp) - { - LOGMASKED(LOG_ERRORS, "%s BUS ERROR W %05x:%06x (NONX %u WP %u TASK %u FC %u MAGIC %u)\n", - machine().describe_context(), offset, virtual_offset, nonx, wp, task, fc, m_magic); - machine().debug_break(); - m_cpu->set_buserror_details(offset, 0, m_cpu->get_fc()); - m_cpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); - m_cpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); - } - } + if (!machine().side_effects_disabled() && (nonx || !wp)) + m_cpu->trigger_bus_error(); space().write_byte(virtual_offset, data); }